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

統(tǒng)一下單中spbill_create_ip參數(shù)一會(huì)是127.0.0.1(ipv4),一會(huì)是0:0:0:0:0:0:0:1(ipv6)
當(dāng)為ipv4是可以正常調(diào)用,為ipv6是就發(fā)生缺少參數(shù) total_fee錯(cuò)誤,其實(shí)后臺(tái)報(bào)錯(cuò)是
<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ù)雖然要求為非空,但是微信只是校驗(yàn)了非空,沒(méi)有根本要求要實(shí)際的用戶端實(shí)際ip,(127.0.0.1都能發(fā)起支付);
3、同時(shí),我們也發(fā)現(xiàn)為什么ipv4情況下會(huì)一直是127.0.0.1,因?yàn)橛昧薾ginx做了代理,所以request.getRemoteAddr獲取的IP永遠(yuǎn)是本機(jī)地址。
確定問(wèn)題所在,下面解決問(wèn)題,把獲取IP地址的方法換一下
原來(lái)是
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是也是客戶的真實(shí)ip。
有時(shí)報(bào)這個(gè)錯(cuò)誤并不一定是IP的問(wèn)題,前端報(bào)錯(cuò)都是微信支付jsapi缺少參數(shù) total_fee,所以最好的方法還是把中間結(jié)果打印出來(lái)或者斷點(diǎn)測(cè)試一下
相關(guān)文章
密碼哈希函數(shù) Bcrypt的最大密碼長(zhǎng)度限制詳解
這篇文章主要介紹了密碼哈希函數(shù) Bcrypt的最大密碼長(zhǎng)度限制詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
ffmpeg播放器實(shí)現(xiàn)詳解之視頻顯示(推薦)
FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。這篇文章主要介紹了ffmpeg播放器實(shí)現(xiàn)詳解視頻顯示,需要的朋友可以參考下2020-07-07
計(jì)算機(jī)網(wǎng)絡(luò)編程MQTT協(xié)議基礎(chǔ)原理詳解
這篇文章主要為大家介紹了計(jì)算機(jī)編程MQTT協(xié)議的基礎(chǔ)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11
Cordova插件實(shí)現(xiàn)JavaScript與Java的通信的詳細(xì)過(guò)程
本文將結(jié)合最常用的華為推送服務(wù)Cordova插件,介紹HMS Core用到的JS-Java消息交互方式,講解在JS側(cè)如何調(diào)用Java側(cè)接口,最終實(shí)現(xiàn)HMS Core能力,感興趣的朋友一起學(xué)習(xí)下吧2021-06-06
好玩又實(shí)用的查看函數(shù)圖像網(wǎng)站Desmos
這個(gè)網(wǎng)站的最大優(yōu)點(diǎn),就是省去了安裝數(shù)學(xué)繪圖軟件或計(jì)算軟件的麻煩,只要打開(kāi)瀏覽器就能使用了。看了介紹之后,可別忘了把這個(gè)好網(wǎng)站加到書(shū)簽2021-08-08

