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

3

17

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 ?

None answered 17/4, 2012 at 12:24 Comment(3)
Have you tried making L_PAYMENTREQUEST_0_QTY0 = 2 and 'L_PAYMENTREQUEST_0_AMT0' => "100.00" while 'PAYMENTREQUEST_0_AMT' => "100.00"? Maybe paypal doesn't calculate the 2x50.00 but just looks for TOTAL per LINE. I am just making assumptions here.Airfield
Alas, that did not work.None
I don't know if it would help, but maybe all your dollar values should be formatted properly '0.00'Cupronickel
P
25

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  
Plasm answered 18/4, 2012 at 20:51 Comment(2)
0down vote This fixed my "I've added the shipping cost, why is it broken?" question. The paypal docs should really just link to this site...Bromoform
Does anyone know how i can add two or more products?...regarding to this good example?Thanks.Vania
G
2

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.

Greece answered 4/7, 2013 at 3:34 Comment(0)
R
0

I had the same trouble and resolved it by formating prices in foreach by function number_format for parameter L_PAYMENTREQUEST_0_AMT$k

Example:

$items_amount = 0;
foreach ($products as $k => $product) {
    $params["L_PAYMENTREQUEST_0_NAME$k"] = $product['name'];
    $params["L_PAYMENTREQUEST_0_DESC$k"] = $product['desc'];
    $params["L_PAYMENTREQUEST_0_AMT$k"] = number_format($product['priceIVA'], 2);
    $params["L_PAYMENTREQUEST_0_QTY$k"] = $product['count'];
    $items_amount += (floatval($product['priceIVA']) * $product['count']);
}

$params['PAYMENTREQUEST_0_AMT'] = $params['PAYMENTREQUEST_0_ITEMAMT'] = number_format($items_amount, 2);
Roil answered 22/8, 2017 at 17:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.