微信支付服務商簽名驗證無誤,可是統一下單後服務器返回,算法
一樣的代碼,採用普通商戶模式,一切正常,採用服務商受理模式就簽名錯誤,非常無奈。安全
普通商務模式,統一下單提交數據以下,能夠正常支付:服務器
<com.tencent.protocol.wxpay_protocol.WxPayReqData> <appid>wx4a7********3f</appid> <mch_id>1********001</mch_id> <sub_appid></sub_appid> <sub_mch_id></sub_mch_id> <device_info>WEB</device_info> <nonce_str>mi068g76xh8sqjiwq9pn5fhgx0xc02gu</nonce_str> <sign>9A1A3EE2FDB8A654BEE511DFB51632CD</sign> <body>11111</body> <detail>flyjee</detail> <attach></attach> <out_trade_no>161018T1637310011323101119</out_trade_no> <fee_type>CNY</fee_type> <total_fee>1</total_fee> <spbill_create_ip>1.84.114.244</spbill_create_ip> <time_start></time_start> <time_expire></time_expire> <goods_tag></goods_tag> <notify_url>http://********.com/payment/wxpay/notify</notify_url> <trade_type>NATIVE</trade_type> <product_id>T163731001</product_id> <limit_pay></limit_pay> <openid></openid> <sub_openid></sub_openid> </com.tencent.protocol.wxpay_protocol.WxPayReqData>
服務商受理模式,統一下單提交數據以下,沒法正常支付,服務器返回簽名失敗:微信
<com.tencent.protocol.wxpay_protocol.WxPayReqData> <appid>wx4**********d3f</appid> <mch_id>1**********02</mch_id> <sub_appid></sub_appid> <sub_mch_id>14**********02</sub_mch_id> <device_info>WEB</device_info> <nonce_str>syxwhyaimb9jdmwu9p567g8rafgfhxy9</nonce_str> <sign>45348143E73EFD6B5531ADEEB385E1A8</sign> <body>11111</body> <detail>flyjee</detail> <attach></attach> <out_trade_no>161018T207610011419101219</out_trade_no> <fee_type>CNY</fee_type> <total_fee>1</total_fee> <spbill_create_ip>1.84.114.244</spbill_create_ip> <time_start></time_start> <time_expire></time_expire> <goods_tag></goods_tag> <notify_url>http://**********.com/payment/wxpay/notify</notify_url> <trade_type>NATIVE</trade_type> <product_id>T20761001</product_id> <limit_pay></limit_pay> <openid></openid> <sub_openid></sub_openid> </com.tencent.protocol.wxpay_protocol.WxPayReqData>
簽名驗證結果以下:app
以上可見,簽名自己算法都是沒有問題的。若是mch_id,sub_mch_id,appid等出現錯誤,也會在微信服務器驗證簽名以前首先驗證,並報錯返回的。測試
通過兩天折磨,百般嘗試,度娘谷歌,都無果。今天進行參數及業務對比發現,系統參數不會有錯了,業務參數也不該該有錯,開始懷疑Key的問題,以前一直用的是普通商戶對應微信服務號的key,一直認爲和升級成服務商後對應的應該是一個。微信支付
開始檢查,服務商平臺--帳戶中心--API安全,在這裏找到了key設置的地方。以下圖,根本就沒有說當前的key是什麼,也沒有說要設置,也沒有任何接口說要使用這裏的key,整個就是一個坑。url
點擊「設置密鑰」,進入後,將密鑰設置的和原來的密鑰同樣。code
測試,經過了!!竟然經過了!!!xml
這就是巨大的坑啊,微信接口太不靠譜了。
至此問題解決了,但願對你們有幫助