最近用nodejs開發微信公眾號支付功能后臺,明明后臺已經簽名校驗成功了(簽名相關可參照我的上一篇文章),支付的prepay_id都已經拿到了,但是返回給H5,H5調起微信支付面板時一直報chooseWXPay:fail,關鍵是android機閃了下支付面板,然后就沒了,連個錯誤彈框都沒,而ios就彈支付簽名驗證失敗,搞了我大半天,才搞定。
通過微信https://api.mch.weixin.qq.com/pay/unifiedorder接口成功返回prepay_id, nonce_str, sign 等參數,然后將這些參數返回給H5,h5調微信支付接口,然后就一直報支付簽名驗證失敗了。
1.我的問題是,微信接口返回的 簽名(sign) 不能直接給h5,需要再次簽名!!!!(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
再次簽名:paySign=MD5(appId=${appid}&nonceStr=${nonceStr}&package=prepay_id=${prepay_id}&signType=MD5&timeStamp=${timeStamp}&key=${key}).toString().toUpperCase(); ? 得到簽名paySign連同timeStamp,appid,nonceStr一并返回給H5,
需要注意的是:再次簽名中的時間戳是秒,timeStamp中的S是大寫,而H5請求支付時timestamp中的s是小寫
2.當然,有些人時因為支付授權目錄配置錯誤,需要檢查h5支付授權目錄是否正確,網上很多說是要配置到二級或三級目錄,但發現它們的開發配置文檔是之前的,8月1號后支付都移到微信支付平臺了,而且官方也沒提示要配置到二級或三級了,估計這個也坑了很多人,我這邊情況就配置了審核過的域名,這個應該要根據項目而定。這塊我沒遇到問題就不寫,怕寫得不對就埋坑了。