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

Posted

技术标签:

【中文标题】PayPal API:购物车项目总金额与订单金额不匹配【英文标题】:PayPal API: The totals of the cart item amounts do not match order amounts 【发布时间】:2013-01-08 20:48:32 【问题描述】:

有很多关于这个错误的帖子,但它们都不适用于我。我真的不明白为什么金额不匹配。我有与 AMT0 * QTY0 匹配的 ITEMAMT。 AMT 匹配 ITEMAMT + SHIPPINGAMT。我一遍又一遍地检查文档,它确实应该以这种方式工作。当我完全删除它的运输时,它就起作用了......

结帐网址中的 AMT 也是 73.9。

我真的希望有人熟悉这个非常令人困惑的错误,并且知道我做错了什么......

提前致谢

Array
(
    [TIMESTAMP] => 2013-01-24T22:56:09Z
    [CORRELATIONID] =>
    [ACK] => Failure
    [VERSION] => 62.0
    [BUILD] => 4181146
    [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
)
Array
(
    [PAYMENTREQUEST_0_PAYMENTACTION] => Sale
    [L_PAYMENTREQUEST_0_NAME0] => XXXX
    [L_PAYMENTREQUEST_0_NUMBER0] => 30533
    [L_PAYMENTREQUEST_0_DESC0] => XXXX
    [L_PAYMENTREQUEST_0_AMT0] => 30.95
    [L_PAYMENTREQUEST_0_QTY0] => 2
    [PAYMENTREQUEST_0_ITEMAMT] => 61.9
    [PAYMENTREQUEST_0_TAXAMT] => 0
    [PAYMENTREQUEST_0_SHIPPINGAMT] => 12
    [PAYMENTREQUEST_0_INSURANCEAMT] => 0
    [PAYMENTREQUEST_0_AMT] => 73.9
    [PAYMENTREQUEST_0_CURRENCYCODE] => USD
    [REQCONFIRMSHIPPING] => 1
    [PAYMENTREQUEST_0_SHIPTOSTREET] => XXXX
    [PAYMENTREQUEST_0_SHIPTOCITY] => XXXX
    [PAYMENTREQUEST_0_SHIPTOSTATE] => XX
    [PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE] => XX
    [PAYMENTREQUEST_0_SHIPTOZIP] => XXXXXX
    [PAYMENTREQUEST_0_SHIPTOPHONENUM] => XXXXXXXX
)

【问题讨论】:

【参考方案1】:

您发送的货币必须保留 2 个小数位。您似乎只提供了 1 个。

$amt = 61.9;
$amt = sprintf("%.2f",$amt); // 61.90

Paypal 将返回此错误,因为金额格式不正确:

看看AMT行下的Table A.2

http://www.paypalobjects.com/en_US/ebook/PP_NVPAPI_DeveloperGuide/Appx_fieldreference.html

每次设置“金钱”参数时都应应用此规则。

【讨论】:

感谢您的回答,但这似乎不起作用:[AMT] => 73.90 [L_PAYMENTREQUEST_0_AMT0] => 30.95 [PAYMENTREQUEST_0_ITEMAMT] => 61.90 [PAYMENTREQUEST_0_TAXAMT] => 0.00 [PAYMENTREQUEST_0_SHIPPINGA ] => 12.00 [PAYMENTREQUEST_0_INSURANCEAMT] => 0.00 [PAYMENTREQUEST_0_AMT] => 73.90 仍然得到完全相同的错误 @Chris 你找到解决方案了吗,我遇到了同样的问题。使用小数我会出错。我正在尝试在发送到贝宝之前将总价格拆分为 totalpriceexvat + vat 我把所有的钱都花光了 var sprintf("%.2f",$var)【参考方案2】:

我的问题的答案可能对大多数路过的人没有帮助。但我的一件物品在描述中包含一个 & (L_PAYMENTREQUEST_0_DESC0)。 '&' 转义了通过 CURL 传递的数据。这造成了错误(完全关闭)。请记住,当您在 URL 被编码时输入任何包含 & 的字符时也会发生这种情况,例如é 将变为é

我很抱歉从我的第一篇文章中删除了项目描述,但由于有关金额的错误消息,我不知道这与它有关。

【讨论】:

【参考方案3】:

几天前我在尝试交流时也遇到了同样的问题,然后我才意识到这些订单总数并不真正匹配,有一些小数位。如果您尝试使用一些整数(如 50)进行通信,如 item amt 和 total(没有任何进动),那么它不会给出任何错误。我也打破了我的头,虽然贝宝有一些问题。 (但我真的是) 所以你最好检查计算,并注意贝宝将接受最多只有 2 位进动或小数位的金额。我同意 Samuel 所说的话。

即使是运费,您也最好将其发送为 12.00 而不是 12 以及其他数字,例如 61.90、73.90 ...

【讨论】:

我知道这是必需的,就像塞缪尔库克所说的那样。但事实并非如此。我在 php 中使用了 round($value, 2),这意味着如果需要,它将四舍五入到小数点后两位。 12.00 将是 12,61.90 将是 61.9,30.95 将是 30.95。并不是说 PayPal 不接受小于两位小数的值,但如果您不四舍五入到两位小数,则这些值不会在 PayPal 的计算中相加。如果你给他们 AMT0 => 10.55,QTY0 => 2 paypal 会计算到 21.10,ITEMAMT 为 21.1 就可以了,但是 QTY0 => 3 并且值是 31.65,这需要你有两个 dec's

以上是关于PayPal API:购物车项目总金额与订单金额不匹配的主要内容,如果未能解决你的问题,请参考以下文章

PayPal 错误 10413 - 购物车项目总金额与订单金额不匹配

PayPal 网关已拒绝请求。购物车项目总金额与订单金额不匹配。 Magento

10413 贝宝错误:购物车项目总金额与订单金额不匹配

Paypal Express Checkout:应用订单折扣

Paypal 不返回实际总金额

PayPal Rest API 小计等于零