微信支付,前端顯示簽名驗證失敗。

公司的一個老項目需要接入微信支付,在接入的過程中,我通過了微信支付所要求的所有的驗收用例(首次接入是可以關注公衆號“微信支付商戶接入驗收助手”來查看驗收結果),但還是碰到了下面這個噁心的問題。

一、一個訂單要進行兩次簽名,一次是在調用統一創建訂單這個接口的時候進行如下簽名

待簽名的字符sb=appid=wx282be1b55c24ffc9&mch_id=1397448502&nonce_str=OkWAlNcf3rg4vXmS&prepay_id=wx24101539080287557f3439e31253661600&result_code=SUCCESS&return_code=SUCCESS&return_msg=OK&trade_type=JSAPI&key=a8dke2de0ak92ldqefyns23i7nxvde2d
使用的加密方式: MD5str=60226D8167A6F1140438BCC4BCB0B6BC。

 

二、訂單創建成功後要返回支付簽名這幾個參數給前端的getBrandWCPayRequest函數,以便做發起確認支付的操作,其中需要進行第二次簽名

待簽名的字符sb=appId=wx282be1b55c24ffc9&nonceStr=4f76f95244ca433883042764db61488a&package=prepay_id=wx24101539080287557f3439e31253661600&signType=MD5&timeStamp=1569291339&key=a8dke2de0ak92ldqefyns23i7nxvde2d
使用的加密方式: MD5str=E238F09BFCC834EDAC9A53EC1AE02F9D

WxPayVo = {"appId":"wx282be1b55c24ffc9","nonceStr":"OkWAlNcf3rg4vXmS","packages":"prepay_id=wx24101539080287557f3439e31253661600","paySign":"E238F09BFCC834EDAC9A53EC1AE02F9D","signType":"MD5","timeStamp":"1569291339"}

出現了一個巨大的坑,因爲這裏的參數我都是存在map裏面的,而微信這個傻逼在第一簽名的時候使用了nonce_str(仔細看第一次簽名的sb=...),在第二次簽名的時候卻使用了nonceStr(仔細看第二次簽名的sb=...),導致我的map裏面既有nonce_str 又有nonceStr,我在返回的時候,使用了nonce_str,導致我的簽名一直提示失敗,找了好久,才知道是這個問題。

所以你在出現這個問題的時候,是否是返回了第一個nonce_str而不是第二個nonceStr。

三、關於簽名的方式,有人說(https://blog.csdn.net/qq_35641337/article/details/79029664)微信不支持HMACSHA256簽名。因爲我在測試MD5簽名通過後,換成HMACSHA256簽名依然有用。


 

 

 

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