Paypal API:购物车项目金额的总计与订单金额不匹配

问题描述:

我正在使用paypal express checkout API,并且在设置数量方面存在问题。以下是我的URI参数:Paypal API:购物车项目金额的总计与订单金额不匹配

$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" 
); 

如果L_PAYMENTREQUEST_0_QTY0设置为1,则表示进程正常。然而,将其改为2和添加“PAYMENTREQUEST_0_ITEMAMT” =>“100.00”到阵列给我以下错误:

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 

我曾尝试了几个小时就结束修复它和已经放弃。有人可以强调我需要做些什么才能使其发挥作用?

+0

您是否尝试过做'L_PAYMENTREQUEST_0_QTY0 = 2'和''L_PAYMENTREQUEST_0_AMT0 '=>“100.00”'while''PAYMENTREQUEST_0_AMT'=>“100.00”'?也许paypal不会计算2x50.00,而只是寻找每条LINE的TOTAL。我只是在这里做出假设。 – Jakub 2012-04-17 12:36:11

+0

唉,那没用。 – Rijndael 2012-04-17 16:49:18

+0

我不知道这是否有帮助,但也许所有的美元值应格式正确'0.00' – thescientist 2012-04-18 13:23:35

您错过了ITEMAMT。另请参见Paypal Express checkout with shipping cost and error中的我的回答,其中包含多个数量的工作示例。

&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 
+2

0down vote 这固定我“我增加了运费,为什么它坏了?”题。 贝宝文档应该真的只是链接到这个网站... – 2012-05-23 21:23:36

+0

有谁知道我可以添加两个或更多的产品?...关于这个很好的例子?谢谢。 – 2013-09-07 15:59:44

直接相关的问题,但因为这由错误信息搜索时第一次出现在谷歌这可能是谁收到此错误别人有用。

如果某些字段未设置(空白/空白),您可能会收到此错误。

例如,在我的情况下,它是(增加了清晰度换行符):

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 

,这是给我同样的错误,即使数额的罚款。 我认为这是一个问题的解析,因为如果你L_PAYMENTREQUEST_0_NAME0后插入甚至空间=在

&L_PAYMENTREQUEST_0_NAME0=&L_PAYMENTREQUEST_0_AMT0=1.00 

它工作正常。

所以我的猜测是,在PayPal的结束,它只是分配“& L_PAYMENTREQUEST_0_AMT0 = 1.00”到L_PAYMENTREQUEST_0_NAME0,从而有效地从消息中移除,并因此触发这个错误,因为没有该行的金额加起来不确实。

我有同样的烦恼,并通过功能number_format为参数L_PAYMENTREQUEST_0_AMT $ K的的foreach在格式化的价格解决它

例子:

$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);