在調用微信支付接口中遇到各種問題,真不知道是哪個人才寫的接口文檔,幾個簡單的接口調了好幾天。
1、小程序獲取code2Session時errcode出錯時是會返回錯誤碼,但正常時居然連這個字段都不返回了,說好的正常返回0呢?
2、小程序支付的時間戳參數,在調用小程序支付接口時需要後臺生成簽名,有個timeStamp參數,文檔上寫的是當前時間,注意這裏有個坑,它要的是到秒級別的,如果用java直接System.currentTimeMillis() 是不行的!會提示簽名錯誤!
正確做法是: System.currentTimeMillis() / 1000
3、小程序支付簽名時key是要拼接的,文檔上沒有寫明,示例上是寫的了搞得不知道以哪個爲準。
4、建議所有簽名統一MD5,否則 不知道哪個地方默認了其它簽名就會簽名通不過
5、小程序支付,也就是交易類型是JSAPI的情況下是要傳openId的,另外appId appkey sercrt mechId 等有一個不對應就會報簽名失敗,這點要注意。
6、微信支付demo裏代碼的一個大坑,其中有一段:
public WXPay(){
if(useSandBox){
signType = MD5;
}else{
signType = HMACSHA256
}
}
注意這裏一定要改下,改成統一的MD5 :
public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
this.config = config;
this.notifyUrl = notifyUrl;
this.autoReport = autoReport;
this.useSandbox = useSandbox;
if (useSandbox) {
this.signType = SignType.MD5; // 沙箱環境
}
else {
//TODO 默認用MD5
this.signType = SignType.MD5;
}
this.wxPayRequest = new WXPayRequest(config);
}
否則你會發現接收支付成功結果通知的時候怎麼老是簽名不通過,然後再發現換成HMACSHA256就通過了,看文檔裏明明寫的是默認MD5, 問題就出現在這,demo代碼 默認卻是HMACSHA256 !
7、沙盒模式測試時報金額不正確,這個問題我自己也不記得在哪看到的了,總之微信文檔上是沒找到,其原因是沙盒模式測試的金額(total_fee)必須是固定的330 !
另外,沙盒模式下的付款碼是不能付款的,不能付款也就是說沒法測試接收支付結果通知,只能上正式用1分錢測。
最後記一下接收支付結果通知spring mvc 的接收方式代碼:
@RequestMapping(value="receiveResult",consumes = {MediaType.TEXT_XML_VALUE},produces = {MediaType.TEXT_XML_VALUE})
public String receiveResult(@NotNull @RequestBody String xml){
//TODO
....
}
算是比較偷懶了,不怕麻煩的建議用實體類加註解 接收