【问题标题】:PayPal PHP SDK Error - Item Amount Must Add Up To Specified Amount SubtotalPayPal PHP SDK 错误 - 项目金额必须加起来才能达到指定金额小计
【发布时间】:2018-03-02 13:20:01
【问题描述】:

我使用 PHP SDK 从 PayPal 收到错误 "Item amount must add up to specified amount subtotal (or total if amount details not specified)"

我从阅读文档中知道,当项目总数与指定的总数不匹配时会发生此错误。除了我的情况,它们确实加起来了。

通过阅读其他答案,我知道这些项目是按项目计算的。即商品的价格*数量,但错误仍然存​​在。

不过,更有趣的是,此错误发生在用户已经登录并按下“立即付款”按钮之后

这里是交易对象(作为数组):

    `array (
        'amount' => array (
            'currency' => 'GBP',
            'total' => '558.48',
            'details' => array (
                'shipping' => '0',
                'tax' => '93.08',
                'subtotal' => '465.40', 
            ),
        ),
        'item_list' => array (
            'items' => array (
                0 => array (
                    'name' => 'Q-Connect Premium White A4 90gsm Inkjet Paper (500 Pack) KF01090',
                    'currency' => 'GBP',
                    'quantity' => 50,
                    'price' => '7.49',
                ),
                1 => array (
                    'name' => 'Stabilo Point 88 Fineliner Pen Black (Pack of 10 with 5 neon pens free) UK12/110-8846885',
                    'currency' => 'GBP',
                    'quantity' => 10,
                    'price' => '9.09',
                ),
            ),
        ),
    )`

如果运费为 0.00 英镑,请不要建议我删除运费,因为我已经尝试过了,如果运费 > 0,我仍然会收到错误

税款按小计 + 运费计算。所以在这种情况下 (465.40 + 0) * 1.2 = 558.48

类似地,465.40 + 93.08 + 0 = 558.48

【问题讨论】:

    标签: php paypal paypal-sandbox paypal-rest-sdk


    【解决方案1】:

    我解决了这个问题。

    点击“立即付款”按钮后,您需要重新验证付款。在第二轮中,我发送了错误的金额,这就是导致错误的原因。这就是为什么它发生在付款已经发送之后。

    【讨论】:

      【解决方案2】:

      您将值作为字符串而不是数字传递。可能会发生一些舍入错误或类似的事情。试试数字,看看会发生什么。数量作为数字正确传递

      您可能需要考虑 PayPal 费用,但我不太确定

      价格可能不是单独的,而是汇总的,再次,我不太确定...仔细检查

      在 PHP 中,声明数组时应省略最后一个逗号(它可能是可选的,请仔细检查...PHP 在错误报告方面相当宽松)

      PayPal SDK 的文档记录确实很差,而且使用起来很麻烦,除非您执行非常简单的操作,例如“立即付款”html 按钮。去条纹 -> https://stripe.com

      【讨论】:

      • 您好,感谢您的快速回复。不幸的是,我不得不完全无视你的回答。我发布的数组是在事务对象本身上调用toArray() 的结果。我实际上是在传递数字,它是贝宝正在转换它,这使得 A 点和 D 点无效。贝宝费用绝对没有考虑在内,我尝试使用聚合,但在进入登录阶段之前它就失败了。但是,我完全同意您的最后一点:P 但目前使用 Stripe 不是一个可行的选择
      猜你喜欢
      • 2013-08-27
      • 2018-06-12
      • 2016-08-17
      • 2019-11-20
      • 2016-05-05
      • 2016-10-13
      • 1970-01-01
      • 2018-09-05
      • 2016-04-04
      相关资源
      最近更新 更多