微信支付,前端显示签名验证失败。

公司的一个老项目需要接入微信支付,在接入的过程中,我通过了微信支付所要求的所有的验收用例(首次接入是可以关注公众号“微信支付商户接入验收助手”来查看验收结果),但还是碰到了下面这个恶心的问题。

一、一个订单要进行两次签名,一次是在调用统一创建订单这个接口的时候进行如下签名

待签名的字符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签名依然有用。


 

 

 

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