我打算使用sandbox进行支付测试,但是在获取验签密钥时,一直报“获取沙箱密钥失败,确认交易密钥是否正确”,请求的代码如下
```
url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"
response = requests.post(url, data.encode('UTF-8'), headers={'Content-Type': 'application/xml'})
```
其中我试过在获取签名时,添加原始支付密钥,或者不添加原始支付密钥都是报这个错。data如下:
```
'<xml><appid>xxxxxx</appid><mch_id>xxxxxx</mch_id><nonce_str>xxxxxx</nonce_str><sign>9B184C18D1F65AD872D9C2457D97209C</sign></xml>'
```
麻烦哪位帮忙解答一下。
楼主解决了吗
原因分析:
签名出错,参考安全规范
POST的数据里面没有商户相关的API_KEY, 但是凡是调用接口的签名, 在StringA按ASCII码拼接完请求参数之后,都需要在结尾加上key值,该值在微信商户平台可查到.
错误StringA:
stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";
正确StringA:
stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA&key=xxxxxxxxxxxxxx";
然后再将StringA做MD5或sha256加密运算.
得到正确返回sandbox_signkey, 可以此做后续沙盒测试.
其中我生成签名的时候只用了appid,mch_id, nonce_str,还有再拼接上支付密钥。不知道我哪里有问题