使用贝宝(Paypal)余款支付API减一美分

时间:2018-10-01 02:44:57

标签: php paypal

我已经为一些客户开发了PayPal集成,但是其中一个客户却遇到了这样的问题,即返还金额减少1美分(不足0.01美元)。

我使用的是最新的paypal/rest-api-sdk-php作曲家软件包,在PayPal付款步骤中显示的总付款似乎正确。我使用以下代码获取付款金额:

$ppPayId = $_REQUEST['paymentId'];
$payment = PP\Payment::get($ppPayId, $this->apiCtx);
$amount = $payment->transactions[0]->amount->getTotal();

我需要一些有关如何进一步解决此问题的建议。我无法在沙盒环境中重现它;它只会在客户的真实帐户上发生。

1 个答案:

答案 0 :(得分:0)

您很可能遇到困扰电子商务发展的经典“由于浮点二进制数近似导致的计算错误”问题。换句话说,尽管编写了看似好看的加法,乘法和除法运算,但由于数字的二进制浮点表示,您正在积累非常小的值漂移。

关于此问题有很多文章/问题/博客/见解。通过搜索调用非常简单。例如:Why not use Double or Float to represent currency?(此答案有800多个投票)

传统的解决方案是使用“适当的”十进制数字处理类。还祈祷您选择的班级在一定程度上正确地进行了所有计算。一个PHP示例类是https://github.com/moneyphp/money,而且,我记得在PHP中某个“ Money / Money”类在将$分配到切片中时出错(发生了+/- $ 0.01);实际上可能是该库已链接到此处,因此请当心。我相信只能私下而非公开纠正该错误。