复盘微信支付金额不正确问题—PHP浮点型计算

码农天地 -
复盘微信支付金额不正确问题—PHP浮点型计算
一、背景

在做微信支付项目的时候,微信要求金额的单位必须为分,而数据库中订单金额单位是元,所以使用订单金额*100是正确的做法,但是会经常出现少一分钱的状况,这是为什么呢?

二、排查过程

订单支付金额的计算非常复杂,所以单位转化为分之后再转化为整型,可以保证微信支付参数不出错,也是正确的做法。

但这里面隐藏了一个问题,还记得我们问题发生的条件必须是“购买某商品时”吗?如果单独购买这个商品的话,订单的金额是19.9。我们可以尝试:

echo (int)(19.9 * 100); // 结果为1989,而非1990

这就导致了订单创建时给微信的支付数据是1990,而再次支付时却是1980,所以接口返回了“订单号重复”的错误。

此时我们会发现少了一分钱,为什么呢?让我们看一下PHP官方文档来了解一下。

三、解决方案
方法一 $total_fee = (int)(($order_money + 0.00001) * 100);  
方法二 $total_fee = (int)bcmul($order_money, 100);
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

微信支付浮点数php

扩展阅读

加个好友,技术交流

1628738909466805.jpg