Does the creditCard function exist in Omnipay PayPal Express? Or only in PayPal Pro?

非 Y 不嫁゛ 提交于 2019-12-14 01:57:24

问题


This question is maybe similar to THIS and THIS but I'm not entirely sure.

I've made a shopping cart that sends the product details and quantity/total amount to Paypal on checking out. I'm using Laravel 4 and the Omnipay Paypal plugin (Paypal_Express). I can send product details fine using the 'setItems' function and am now looking to pre-populate the credit card field on the Paypal summary page with my User's details.

I have seen in other SO threads such as THIS that other people use the creditCard function to pass details to the Paypal summary credit card info page.

My question: 1) Do you need to be using Paypal_Pro for the creditCard function to worK? I get this error when I try (call_user_func_array() expects parameter 1 to be a valid callback, class 'Omnipay\Common\GatewayFactory' does not have a method 'creditCard').

I don't want to enter all the credit card details - Just speed the process up by entering the User's Name, Adress etc...

Also I tried changing to Paypal_Pro and it didn't work. (same error as above) I changed config plus gateways in my payment controller.

2)How do you change PayPal_Express to PayPay_Pro?

My code:

 public function postPayment() { 


        $cart = Session::get('cart'); 

        $allProducts = [];

        foreach($cart->aContents as $productID=>$quantity){

            $product = Product::find($productID);

            // get the product id
            // load the product from the id
            // store data in the allProduct array
            $allProducts[] = array('name' => $product->name, 'quantity' => $quantity, 'price'=> $product->price);
        }

        $cardInput = array(

            'first_name' => Input::get('first_name'),
            'last_name' => Input::get('last_name'),
            'address1' => Input::get('address1'),
            'city' => Input::get('city'),
            'zip' => Input::get('zip'),
            'email' => Input::get('email')

            );

        $card = Omnipay::creditCard($cardInput);

        $params = array( 
            'cancelUrl' => \URL::to('cancel_order'), 
            'returnUrl' => \URL::to('payment_success'), 
            'amount' => Input::get('price'), 
            'currency' => Input::get('currency'), 
            'card' => $card,    

            ); 

            Session::put('params', $params); 

            Session::save(); 

            $gateway = Omnipay::create('PayPal_Express'); 

            $gateway->setUsername('tjmusicmanagement-facilitator_api1.gmail.com'); 

            $gateway->setPassword('K2LWQVP2L8472BPY'); 

            $gateway->setSignature('AwTOuAJWzCkdc5PldYeiz.l3iy5UAwOucYW6EFLLA9zUQqXaWyEGbebq'); 

            $gateway->setTestMode(true); 

            $gateway->setLogoImageUrl(URL::to('images/logoSmall.png'));


            $response = $gateway->purchase($params)->setItems($allProducts)->send(); 

            if ($response->isSuccessful()) { 
            // payment was successful: update database
                 print_r($response); 

                }  elseif ($response->isRedirect()) { 

                // redirect to offsite payment gateway 
                    $response->redirect(); 

                } else { 

                    // payment failed: display message to customer 
                    echo $response->getMessage();

                 } 

            } 

And also the ignited\laravel-omnipay\config.php is unchanged (though I did try changing the driver)

return array(

// The default gateway to use
'default' => 'paypal',

// Add in each gateway here
'gateways' => array(
    'paypal' => array(
        'driver' => 'PayPal_Express',
        'options' => array(
            'solutionType' => '',
            'landingPage' => '',
            'headerImageUrl' => ''
        )
    )
)

);

Thanks for your tinme!!

EDIT: Here is my getSuccessPayment function where I can hopefully get the users paypal details (just name and address etc) from paypal. But how and where do I specify this?

    public function getSuccessPayment() 
            {   
                $gateway = Omnipay::create('PayPal_Express');
                $gateway->setUsername('lillyloverofwar-facilitator_api1.gmail.com'); 
                $gateway->setPassword('U6LM3SG2MNCA3QE2'); 
                $gateway->setSignature('AJVP9tUtdotIeVt82RpcG7n9ld-tAdCG1Ramb1u8yZECHhSpiXc0BO04'); 
                $gateway->setTestMode(true); 

                $params = Session::get('params'); 

                $response = $gateway->completePurchase($params)->send(); 
                $paypalResponse = $response->getData(); // this is the raw response object 

                if(isset($paypalResponse['PAYMENTINFO_0_ACK']) && $paypalResponse['PAYMENTINFO_0_ACK'] === 'Success') {

                    // return View::make('successfulPayment')->with($params); 
                 //     Session::flush();
                 // Response 
                 // print_r($paypalResponse); 
                 } else { 
                 //Failed transaction 
                 } 
                 // FLUSHING SESSION HERE GETS AN ERROR
                 // Session::flush();
                 return View::make('successfulPayment'); 


                } 

回答1:


1) I get this error when I try (call_user_func_array() expects parameter 1 to be a valid callback, class 'Omnipay\Common\GatewayFactory' does not have a method 'creditCard').

You can't use credit cards on the PayPal Express gateway, only on Pro or REST. I recommend that you use the REST gateway not the Pro gateway (REST supersedes Pro and has more features).

I don't want to enter all the credit card details - Just speed the process up by entering the User's Name, Adress etc...

There is no need to do that if you are using PayPal Express anyway, because PayPal will provide you the necessary details after the user has gone through the PayPal login process and authorized the transaction.

Also I tried changing to Paypal_Pro and it didn't work. (same error as above) I changed config plus gateways in my payment controller.

2)How do you change PayPal_Express to PayPay_Pro?

I suggest you have a look at my fork of the omnipay-paypal gateway, https://github.com/delatbabel/omnipay-paypal -- on the accept-paypal-payments branch there are additional commits (sent as a PR to the main repository but not merged yet) with additional features such as using the REST gateway for either Credit Card or PayPal purchases, and additional API documentation including code examples on how to use the REST gateway.

Here is the code example for using the Rest gateway for a purchase transaction with a credit card:

// Create a gateway for the PayPal RestGateway
// (routes to GatewayFactory::create)
$gateway = Omnipay::create('RestGateway');

// Initialise the gateway
$gateway->initialize(array(
    'clientId' => 'MyPayPalClientId',
    'secret'   => 'MyPayPalSecret',
    'testMode' => true, // Or false when you are ready for live transactions
));

// Create a credit card object
// DO NOT USE THESE CARD VALUES -- substitute your own
// see the documentation in the class header.
$card = new CreditCard(array(
            'firstName' => 'Example',
            'lastName' => 'User',
            'number' => '4111111111111111',
            'expiryMonth'           => '01',
            'expiryYear'            => '2020',
            'cvv'                   => '123',
            'billingAddress1'       => '1 Scrubby Creek Road',
            'billingCountry'        => 'AU',
            'billingCity'           => 'Scrubby Creek',
            'billingPostcode'       => '4999',
            'billingState'          => 'QLD',
));

// Do a purchase transaction on the gateway
$transaction = $gateway->purchase(array(
    'amount'        => '10.00',
    'currency'      => 'AUD',
    'description'   => 'This is a test purchase transaction.',
    'card'          => $card,
));
$response = $transaction->send();
if ($response->isSuccessful()) {
    echo "Purchase transaction was successful!\n";
    $sale_id = $response->getTransactionReference();
    echo "Transaction reference = " . $sale_id . "\n";
}


来源:https://stackoverflow.com/questions/28277335/does-the-creditcard-function-exist-in-omnipay-paypal-express-or-only-in-paypal

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!