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

Php PayPal API:购物车项目金额的总和与订单金额不匹配,php,api,paypal,Php,Api,Paypal,关于这个错误有很多帖子,但都不适用于我。我真的不明白为什么金额不匹配。我有与AMT0*QTY0匹配的ITEMAMT。金额与ITEMAMT+SHIPPINGAMT匹配。我一遍又一遍地检查文档,它真的应该是这样工作的。它的工作时,我完全删除它的航运 结帐url中的金额也是73.9 我真的希望有人熟悉这个令人困惑的错误,并知道我做错了什么 提前谢谢 Array ( [TIMESTAMP] => 2013-01-24T22:56:09Z [CORRELATIONID] =>

关于这个错误有很多帖子,但都不适用于我。我真的不明白为什么金额不匹配。我有与AMT0*QTY0匹配的ITEMAMT。金额与ITEMAMT+SHIPPINGAMT匹配。我一遍又一遍地检查文档,它真的应该是这样工作的。它的工作时,我完全删除它的航运

结帐url中的金额也是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个

$amt = 61.9;
$amt = sprintf("%.2f",$amt); // 61.90
Paypal将返回此错误,因为金额格式不正确:

查看
AMT
行下的
表a.2


每次设置“money”参数时,都应该使用此规则。

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


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

几天前我在尝试沟通时也遇到了同样的问题,然后我才意识到这些订单总数并不匹配,只有几分钟的小数位。如果您尝试使用一些整数(如50)进行通信,例如item amt和total(无任何进动),则不会给出任何错误。我也打破了我的头,虽然贝宝有一些问题。(但事实上我是) 所以你最好检查一下计算结果,注意贝宝只接受进位或小数点后2位的金额。我同意塞缪尔所说的话


即使是发货金额,你也最好将其发送为12.00,而不是12和其他数字,如61.90、73.90…

谢谢你的回答,但这似乎不起作用:[AMT]=>73.90[L_PAYMENTREQUEST\u 0_AMT0]=>30.95[PAYMENTREQUEST\u 0_ITEMAMT]=>61.90[PAYMENTREQUEST\u TAXAMT]=>0.00[PAYMENTREQUEST\u 0_SHIPPINGAMT]=>12.00[PAYMENTREQUEST\u 0\u INSURANCEAMT]=>0.00[PAYMENTREQUEST\u 0\u AMT]=>73.90仍然得到了完全相同的结果error@Chris你找到解决办法了吗?我也有同样的问题。用小数我会出错。在发送给paypali之前,我试图将总价拆分为totalpriceexvat+vat。我已经将每一笔钱的var转换为sprintf(“%.2f”,即$var)。我知道这是必需的,正如Samuel Cook所说。但事实并非如此。我在php中使用了舍入($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