微信支付服务商签名验证无误,可是统一下单后服务器返回,算法
一样的代码,采用普通商户模式,一切正常,采用服务商受理模式就签名错误,非常无奈。安全
普通商务模式,统一下单提交数据以下,能够正常支付:服务器
<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
这就是巨大的坑啊,微信接口太不靠谱了。
至此问题解决了,但愿对你们有帮助