per-item details ci-merchant and PayPalExpress

2.2k Views Asked by At

I am using ci-merchant and I want to do my cart checkout with PayPal Express.

This is the code I am using:

$this->load->library('merchant');
$this->merchant->load('paypal_express');
$settings = $this->merchant->default_settings();
$settings = array(
    'username' => 'bla bla bla.gmail.com',
    'password' => 'bla bla bla',
    'signature' => 'bla bla bla',
    'test_mode' => true);
$this->merchant->initialize($settings);
$params =array(
            'amount' => $this->cart->format_number($this->cart->total()),
            'currency' => 'EUR',
            'return_url' => 'https://www.example.com/checkout/payment_return/123',
            'cancel_url' => 'https://www.example.com/checkout',
            'description' => 'Esto es desc'
                    );

$response = $this->merchant->purchase($params);

With the above code I am being redirected to PayPal just fine, but at the items column I only see one unique item.

Now I would like to add per-item description, qty and price. But I don't know the where to include my items array, and wich format should I use. I can't find it on ci-merchant docs. Can anybody explain me?

2

There are 2 best solutions below

0
On BEST ANSWER

You just need to setup your $params to include all of the fields you would need to make it work, and you need to make sure you're using version 63.0 or later.

It can be a little tricky, though, because any Express Checkout flow could include more than 1 payment, and each payment included could include more than 1 item, so you'll end up adding 0,1,2, etc. to params.

Here's a sample of SetExpressCheckout with 1 payment that has 2 items on it.

[REQUESTDATA] => Array
    (
        [USER] => ***
        [PWD] => ***
        [VERSION] => 97.0
        [BUTTONSOURCE] => AngellEYE_PHPClass
        [SIGNATURE] => ***
        [METHOD] => SetExpressCheckout
        [MAXAMT] => 200.00
        [RETURNURL] => http://paypal.angelleye.com/standard/samples/DoExpressCheckoutPayment.php
        [CANCELURL] => http://paypal.angelleye.com/paypal/class/cancel.php
        [ALLOWNOTE] => 1
        [HDRIMG] => http://paypal.angelleye.com/images/hdrimg.jpg
        [SOLUTIONTYPE] => Sole
        [LANDINGPAGE] => Billing
        [BRANDNAME] => Angell EYE
        [CUSTOMERSERVICENUMBER] => 555-555-5555
        [BUYEREMAILOPTIONENABLE] => 1
        [PAYMENTREQUEST_0_AMT] => 100.00
        [PAYMENTREQUEST_0_CURRENCYCODE] => USD
        [PAYMENTREQUEST_0_ITEMAMT] => 80.00
        [PAYMENTREQUEST_0_SHIPPINGAMT] => 15.00
        [PAYMENTREQUEST_0_TAXAMT] => 5.00
        [PAYMENTREQUEST_0_DESC] => This is a test order.
        [PAYMENTREQUEST_0_NOTETEXT] => This is a test note before ever having left the web site.
        [PAYMENTREQUEST_0_PAYMENTACTION] => Sale
        [L_PAYMENTREQUEST_0_NAME0] => Widget 123
        [L_PAYMENTREQUEST_0_DESC0] => Widget 123
        [L_PAYMENTREQUEST_0_AMT0] => 40.00
        [L_PAYMENTREQUEST_0_NUMBER0] => 123
        [L_PAYMENTREQUEST_0_QTY0] => 1
        [L_PAYMENTREQUEST_0_ITEMURL0] => http://www.angelleye.com/products/123.php
        [L_PAYMENTREQUEST_0_ITEMCATEGORY0] => Digital
        [L_PAYMENTREQUEST_0_NAME1] => Widget 456
        [L_PAYMENTREQUEST_0_DESC1] => Widget 456
        [L_PAYMENTREQUEST_0_AMT1] => 40.00
        [L_PAYMENTREQUEST_0_NUMBER1] => 456
        [L_PAYMENTREQUEST_0_QTY1] => 1
        [L_PAYMENTREQUEST_0_ITEMURL1] => http://www.angelleye.com/products/456.php
        [L_PAYMENTREQUEST_0_ITEMCATEGORY1] => Digital
    )

That results in the following when redirected to PayPal..

enter image description here

0
On

CI Merchant doesn't support listing order items in PayPal out of the box. There is a pull request which supports this, but it won't be merged into master until we work around some tax calculation and rounding issues.

Until it's supported officially, you may want to try using the forked version to achieve this, or simply edit the PayPal driver yourself to pass through the item data.