已在社区搜了很久,没发现可行的解决方案,希望得到微信技术的支持!
场景:
- 访问的是申请入驻的接口:https://api.mch.weixin.qq.com/applyment/micro/submit
- 请求中的参数字段均按接口文档中填写,已对过多次
- 需加密的参数均已按要求加密,需传media_id的也获取到media_id
- 签名已通过“签名校验工具”检测
- 担心是密钥设置问题,已重新在服务商商户平台重新设置过
- 担心是编码问题,测试过不包含任何汉字的参数
- 使用的是python语言
访问接口总是“签名校验失败,请检查后重试”,已经被弄哭了。。
有人解决了么?我的这个接口也是这问题。
在“微信支付接口签名校验工具”上能通过校验。但一提交,就报:
<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[签名校验失败,请检查后重试]]></return_msg> </xml>
python开发者可以使用已经封装好的“微信支付 V3 API Python SDK”
https://github.com/minibear2021/wechatpayv3
array ( 'return_code' => 'SUCCESS', 'return_msg' => 'OK', 'nonce_str' => 'Two5SQeY4adsFWeE', 'sign' => '128D0CC2A661A27CA6959C17373A380A57B10D1663FCCB430ACF3590A36CC405', 'result_code' => 'FAIL', 'err_code' => array ( ), 'err_code_des' => '该功能已经下线。', )
访问后 返回结果是 该功能已经下线,该功能不准备开放了么?
我搞支付
请按照以下几点进行排查:
1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码
如果还不行,建议更换一下KEY。
1. 使用签名检测工具确认算法没有问题
2. 同一商户号和密钥请求下列接口都能正确返回:
https://api.mch.weixin.qq.com/risk/getcertficates
https://api.mch.weixin.qq.com/secapi/mch/uploadmedia
3. 接口实际的请求参数与生成签名原串的参数使用的是同一变量,不会有增加或缺少的情况(见5)。
4. 参数确认和接口文档一致。
5. 签名和请求过程(python):
params = { ... } # 生成请求参数
params["sign"] = self.mk_sha256_sign(params) # 生成签名
data = mk_xml(params) # 生成xml数据,可通过检查工具
data = data.encode(“utf-8”) # 转成utf-8格式
headers = {"Content-Type": "text/xml; charset=utf-8"}
requests.post(url, headers=headers, data=data,
cert=(self.ssl_cert_path, self.ssl_key_path))
依然提示 “签名校验失败,请检查后重试”
访问后 返回结果是 该功能已经下线,该功能不准备开放了么?
@API团队 如果签名校验失败,能不能返回服务端签名时用的输入,或者输入的md5也行,这样至少能知道是两边内容不一致造成的原因