總結一下微信掃碼支付、小程序支付的幾個坑

在調用微信支付接口中遇到各種問題,真不知道是哪個人才寫的接口文檔,幾個簡單的接口調了好幾天。

 

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
   ....

}

算是比較偷懶了,不怕麻煩的建議用實體類加註解 接收

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章