【问题标题】:Paypal API: The totals of the cart item amounts do not match order amountsPaypal API:购物车项目总金额与订单金额不匹配
【发布时间】:2021-01-20 04:11:20
【问题描述】:

我正在使用 paypal express checkout API,但在设置数量时遇到了问题。以下是我的 URI 参数:

$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

我已经尝试了几个小时来修复它并放弃了。有人可以强调我需要做些什么才能让它工作吗?

【问题讨论】:

  • 您是否尝试过在'PAYMENTREQUEST_0_AMT' => "100.00" 时制作L_PAYMENTREQUEST_0_QTY0 = 2 和'L_PAYMENTREQUEST_0_AMT0' => "100.00"?也许贝宝不计算 2x50.00,而只是寻找每行的总计。我只是在这里做假设。
  • 唉,那没用。
  • 我不知道它是否有帮助,但也许你所有的美元值都应该正确格式化为 '0.00'

标签: php paypal express-checkout


【解决方案1】:

您缺少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  

【讨论】:

  • 0down vote 这解决了我的“我已经添加了运费,为什么它坏了?”题。贝宝文档应该真的只是链接到这个网站......
  • 有谁知道我如何添加两个或更多产品?...关于这个很好的例子?谢谢。
【解决方案2】:

与问题没有直接相关,但由于在通过错误消息搜索时这首先出现在 Google 中,这可能对收到此错误的其他人有用。

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

以我为例(为清楚起见,添加了换行符):

    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,从而有效地将其从消息中删除,从而触发此错误,因为没有该行,金额确实不会加起来。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,并通过参数 L_PAYMENTREQUEST_0_AMT$k 的函数 number_format 在 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);
    

    【讨论】:

      猜你喜欢
      • 2013-01-08
      • 2012-11-29
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2016-05-05
      • 2016-10-13
      • 2021-12-11
      相关资源
      最近更新 更多