Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paypal API: The totals of the cart item amounts do not match order amounts

I am working with the paypal express checkout API and am having issues with setting the quantity. Below are my URI parameters:

$params = array(
   'METHOD' => 'SetExpressCheckout',
   'PAYMENTREQUEST_0_SHIPPINGAMT' => '0',
   'PAYMENTREQUEST_0_TAXAMT' => '0',
   'PAYMENTREQUEST_0_HANDLINGAMT' => '0',
   'PAYMENTREQUEST_0_AMT' => "50.00",
   'RETURNURL' => $this->_returnUri,
   'CANCELURL' => $this->_cancelUri,
   'HDRIMG' => $this->_logoUri,
   'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP',
   'L_PAYMENTREQUEST_0_DESC0' => 'Product description',
   'L_PAYMENTREQUEST_0_NAME0' => 'Product name',
   'L_PAYMENTREQUEST_0_AMT0' => "50.00",
   'L_PAYMENTREQUEST_0_QTY0' => "2"
);

If L_PAYMENTREQUEST_0_QTY0 is set to 1 the process is fine. However, changing it to 2 and adding 'PAYMENTREQUEST_0_ITEMAMT' => "100.00" to the array gives me the following error:

TIMESTAMP: 2012-04-17T12:11:16Z
CORRELATIONID: da43f6c91254
ACK: Failure
VERSION: 88.0
BUILD: 2808426
L_ERRORCODE0: 10413
L_SHORTMESSAGE0: Transaction refused because of an invalid argument. See additional error messages for details.
L_LONGMESSAGE0: The totals of the cart item amounts do not match order amounts.
L_SEVERITYCODE0: Error

I have tried for hours on end to fix it and have given up. Can someone highlight want I need to do to get it to work ?

like image 247
Rijndael Avatar asked Apr 17 '12 12:04

Rijndael


2 Answers

You're missing an ITEMAMT. See also my answer in Paypal Express checkout with shipping cost and error which contains a working example with multiple quantities.

&L_PAYMENTREQUEST_0_NAME0=10% Decaf Kona Blend Coffee  
&L_PAYMENTREQUEST_0_NUMBER0=623083  
&L_PAYMENTREQUEST_0_DESC0=Size: 8.8-oz 
&L_PAYMENTREQUEST_0_AMT0=9.95  
&L_PAYMENTREQUEST_0_QTY0=2  
&L_PAYMENTREQUEST_0_NAME1=Coffee Filter bags  
&L_PAYMENTREQUEST_0_NUMBER1=623084  
&L_PAYMENTREQUEST_0_DESC1=Size: Two 24-piece boxes  
&L_PAYMENTREQUEST_0_AMT1=39.70  
&L_PAYMENTREQUEST_0_QTY1=2  
&PAYMENTREQUEST_0_ITEMAMT=99.30  
&PAYMENTREQUEST_0_TAXAMT=2.58  
&PAYMENTREQUEST_0_SHIPPINGAMT=3.00  
&PAYMENTREQUEST_0_HANDLINGAMT=2.99  
&PAYMENTREQUEST_0_SHIPDISCAMT=-3.00  
&PAYMENTREQUEST_0_INSURANCEAMT=1.00  
&PAYMENTREQUEST_0_AMT=105.87  
&PAYMENTREQUEST_0_CURRENCYCODE=USD  
like image 179
Robert Avatar answered Oct 10 '22 11:10

Robert


Not directly related to the question, but since this comes up first in Google when searching by error message this might be useful to other people who are receiving this error.

You might be getting this error if some of the fields are not set(null/blank).

For instance in my case it was(line breaks added for clarity):

    PAYMENTREQUEST_0_PAYMENTACTION=Sale
    &REQCONFIRMSHIPPING=0
    &RETURNURL=some_url
    &CANCELURL=some_other_url
    &BRANDNAME=Brand
    &L_PAYMENTREQUEST_0_NAME0=
    &L_PAYMENTREQUEST_0_AMT0=1.00
    &L_PAYMENTREQUEST_0_QTY0=1
    &PAYMENTREQUEST_0_AMT=1.00
    &PAYMENTREQUEST_0_CURRENCYCODE=USD

And it was giving me the same error, even though the amounts are fine. I think it is a parsing issue, because if you insert even a space after L_PAYMENTREQUEST_0_NAME0= in

&L_PAYMENTREQUEST_0_NAME0=&L_PAYMENTREQUEST_0_AMT0=1.00

It works fine.

So my guess is that at the PayPal's end it just assigns "&L_PAYMENTREQUEST_0_AMT0=1.00" to L_PAYMENTREQUEST_0_NAME0, thus effectively removing it from the message and consequently triggers this error, since without that line the amounts do not add up indeed.

like image 2
Zar Shardan Avatar answered Oct 10 '22 12:10

Zar Shardan