微信支付jsapi缺少參數(shù) total_fee 錯誤分析與解決方法
微信支付jsapi缺少參數(shù) total_fee,其實很多參數(shù)錯誤都會報這個錯,其實不一定是參數(shù) total_fee,所以最好是單步或者在日志文件輸出中間結(jié)果,畢竟服務(wù)器上沒幾個裝開發(fā)軟件的。
最近更換服務(wù)器之后,加上了nginx做代理并做了負(fù)載均衡后,微信支付第一次支付缺少參數(shù) total_fee,再支付就可以,再點支付有報錯缺少參數(shù) total_fee,好奇怪,按理說是不應(yīng)該報錯或者要就一直報錯,看了好一會代碼,沒問題,最后把統(tǒng)一下單的參數(shù)打印到后臺,終于發(fā)現(xiàn)問題

統(tǒng)一下單中spbill_create_ip參數(shù)一會是127.0.0.1(ipv4),一會是0:0:0:0:0:0:0:1(ipv6)
當(dāng)為ipv4是可以正常調(diào)用,為ipv6是就發(fā)生缺少參數(shù) total_fee錯誤,其實后臺報錯是
<xml> <return_code> <![CDATA[FAIL]]> </return_code> <return_msg><![CDATA[invalid spbill_create_ip]]></return_msg> </xml>
從中可以發(fā)現(xiàn)
1、微信支付不支持ipv6;
2、spbill_create_ip參數(shù)雖然要求為非空,但是微信只是校驗了非空,沒有根本要求要實際的用戶端實際ip,(127.0.0.1都能發(fā)起支付);
3、同時,我們也發(fā)現(xiàn)為什么ipv4情況下會一直是127.0.0.1,因為用了nginx做了代理,所以request.getRemoteAddr獲取的IP永遠(yuǎn)是本機地址。
確定問題所在,下面解決問題,把獲取IP地址的方法換一下
原來是
parameterMap.put("spbill_create_ip", request.getRemoteAddr());
更換成
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
這樣獲取的IP是ipv4是也是客戶的真實ip。
有時報這個錯誤并不一定是IP的問題,前端報錯都是微信支付jsapi缺少參數(shù) total_fee,所以最好的方法還是把中間結(jié)果打印出來或者斷點測試一下
相關(guān)文章
計算機網(wǎng)絡(luò)編程MQTT協(xié)議基礎(chǔ)原理詳解
這篇文章主要為大家介紹了計算機編程MQTT協(xié)議的基礎(chǔ)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11
Windows系統(tǒng)安裝使用Git的詳細(xì)教程
這篇文章主要介紹了Windows系統(tǒng)安裝使用Git的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
nasm實現(xiàn)的用vmware運行自做的linux啟動盤的引導(dǎo)代碼
這個小的代碼的編寫和運行還是能讓自己對系統(tǒng)啟動有一個更深的認(rèn)識,不過有個不懂的就是怎么用ISO鏡像文件啟動,怎么將引導(dǎo)代碼寫入ISO鏡像文件,依然沒有找到很好的方法解決2013-04-04
一文讀懂modbus slave和modbus poll使用說明
modbus poll和modbus slave是一款實用的modbus開發(fā)和調(diào)試工具,可以非常方便的進(jìn)行modbus調(diào)試,是非常有用的Modbus主機/從機模擬程序,這篇文章給大家介紹modbus slave和modbus poll使用說明,感興趣的朋友一起看看吧2021-04-04
微信小程序常用功能實例匯總包括上拉刷新,下拉加載,列表數(shù)據(jù)綁定,輪播,參數(shù)傳遞
這篇文章主要介紹了微信小程序常用功能實例匯總包括上拉刷新,下拉加載,列表數(shù)據(jù)綁定,輪播,參數(shù)傳遞,撥打電話,需要的朋友可以參考下2022-12-12

