php计算用户实际付的金额,复盘微信支付金额不正确问题—PHP浮点型计算
復盤微信支付金額不正確問題—PHP浮點型計算2020-11-15 11:58:29
一、背景
在做微信支付項目的時候,微信要求金額的單位必須為分,而數據庫中訂單金額單位是元,所以使用訂單金額*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是在服務器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利于學習,使用廣泛,主要適用于Web開發領域。
Tags 標簽微信支付浮點數php
擴展閱讀
總結
以上是生活随笔為你收集整理的php计算用户实际付的金额,复盘微信支付金额不正确问题—PHP浮点型计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多项式乘法问题
- 下一篇: 【Unityamp;NGUI】UI精灵跟