dedemao / weixinPay

微信支付单文件版。一个PHP文件搞定微信支付系列。包括原生支付(扫码支付),H5支付,公众号支付,现金红包、企业付款到零钱等。新增V3版。
https://www.dedemao.com/wx/demo.html
1.16k stars 607 forks source link

支付方法里,元转换分不应该使用intval,这样精度有问题 #26

Closed xianrenqh closed 3 years ago

xianrenqh commented 3 years ago

支付方法里,元转换分不应该使用intval,这样精度有问题。 比如支付19.9元,实际唤起的支付金额为19.89元。 可以使用bcmul()函数 源代码: $unified = array( 'appid' => $config['appid'], 'attach' => 'pay', //商家数据包,原样返回,如果填写中文,请注意转换为utf-8 'body' => $orderName, 'mch_id' => $config['mch_id'], 'nonce_str' => self::createNonceStr(), 'notify_url' => $notifyUrl, 'openid' => $openid, //rade_type=JSAPI,此参数必传 'out_trade_no' => $outTradeNo, 'spbill_create_ip' => '127.0.0.1', 'total_fee' => intval($totalFee * 100), //单位 转为分 'trade_type' => 'JSAPI', );

修改代码: $unified = array( 'appid' => $config['appid'], 'attach' => 'pay', //商家数据包,原样返回,如果填写中文,请注意转换为utf-8 'body' => $orderName, 'mch_id' => $config['mch_id'], 'nonce_str' => self::createNonceStr(), 'notify_url' => $notifyUrl, 'openid' => $openid, //rade_type=JSAPI,此参数必传 'out_trade_no' => $outTradeNo, 'spbill_create_ip' => '127.0.0.1', 'total_fee' => bcmul($totalFee,100), //单位 转为分 'trade_type' => 'JSAPI', );

dedemao commented 3 years ago

感谢反馈bug,但bcmul函数需要安装bcmath扩展才能使用,有的用户并没有安装这个扩展,提高了代码的使用难度。可通过floatval($totalFee) * 100来替代。