1. 程式人生 > >微信公眾號支付:支付驗證簽名失敗

微信公眾號支付:支付驗證簽名失敗

如果開發的時候用微信demo做開發的話記得注意 wxpay這個類的建構函式中,

 if (useSandbox) {
        	this.signType = SignType.MD5; // 沙箱環境
}
        else {
            this.signType = SignType.HMACSHA256;
}

正式環境預設是HMACSHA256加密方式,

如果呼叫wxpay.unifiedOrder()進行請求的話,傳入的map引數中的sign_type並不能改變加密方式!

    /**
     * 作用:統一下單<br>
     * 場景:公共號支付、掃碼支付、APP支付
     * @param reqData 向wxpay post的請求資料
     * @param connectTimeoutMs 連線超時時間,單位是毫秒
     * @param readTimeoutMs 讀超時時間,單位是毫秒
     * @return API返回資料
     * @throws Exception
     */
    public Map<String, String> unifiedOrder(Map<String, String> reqData,  int connectTimeoutMs, int readTimeoutMs) throws Exception {
        String url;
        if (this.useSandbox) {
            url = WXPayConstants.SANDBOX_UNIFIEDORDER_URL_SUFFIX;
        }
        else {
            url = WXPayConstants.UNIFIEDORDER_URL_SUFFIX;
        }
        if(this.notifyUrl != null) {
            reqData.put("notify_url", this.notifyUrl);
        }
        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
        return this.processResponseXml(respXml);
    }

,所以如果是直接使用sdk程式碼的話,想按MD5加密記得修改建構函式的程式碼,並且unifiedOrder()方法中會進行加密,傳入map引數時不需要先加密sign。

PS:如果遇到公眾號支付驗證簽名失敗,並且簽名校驗工具通過的可以看看是不是這個原因