微信公眾號支付:支付驗證簽名失敗
阿新 • • 發佈:2019-01-07
如果開發的時候用微信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:如果遇到公眾號支付驗證簽名失敗,並且簽名校驗工具通過的可以看看是不是這個原因