APP调起支付需要通过opensdk来调起(iOS相关资源,Android相关资源)
V2版接口和V3版接口规则差异说明:
- 参数格式:V2接口为XML,V3接口为JSON
- 签名方式:V2接口为MD5或HMAC-SHA256,V3接口为非对称密钥SHA256-RSA
- 回调加密:V2接口无需加密,V3接口为AES-256-GCM加密
本文章主要协助开发者定位APP调起支付返回签名验证失败报错的问题,大家可根据以下步骤逐步排查。
V2版本排查步骤:
步骤一、签名类型与下单时的签名类型不一致
检查调起支付的签名类型是否与下单一致,比如下单是HMAC-SHA256,而调起支付用的是MD5
步骤二、生成签名原串的参数和实际请求参数不一致
检查生成签名串的参数与实际发起请求的参数是否一致
步骤三、调起支付时的请求参数名大小写不正确
检查客户端调用时的传参是否正确
步骤四、使用的API版本不一致
检查下单和调起支付时使用的API版本是否一致,比如下单用的V2版本的API,而调起支付又使用的是V3的API来实现。
步骤五、使用的商户号不一致
检查下单和调起支付时使用的商户号是否一致,比如下单用的是A商户号,而调起支付又使用的是B商户号信息生成签名
步骤六、使用的key不正确
需要用APIv2密钥生成签名, key设置路径:微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全-->设置API密钥
步骤七、没有重新生成签名
调起支付的签名需要重新按照调起支付文档中规定的参数和要求生成,而不能直接使用统一下单接口的签名值(sign)
V3版本排查步骤:
步骤一、生成签名原串的参数和实际请求参数不一致
检查生成签名串的参数值与客户端实际发起请求的参数值是否一致
步骤二、调起支付时构造签名串的字段和格式不正确
检查调起支付时构造签名串格式是否正确,参与签名字段及格式应是:
步骤三、调起支付时的大小写不正确
检查客户端调用时的传参是否正确
步骤四、使用的API版本不一致
检查下单和调起支付时使用的API版本是否一致,比如调起支付参考的V3的API规则实现,而下单用的V2统一下单。
步骤五、使用的商户号不一致
检查下单和调起支付时使用的商户号是否一致,比如下单用的是A商户号,而调起支付又使用的是B商户号信息生成签名
步骤六、没有重新生成sign
调起支付的签名(paySign)需要重新按照调起支付文档中规定的参数和要求生成,而不能直接使用下单接口的签名值(signature)
如通过以上步骤仍然无法解决你的问题,可以在帖子提供关键信息(比如签名工具中的截图和通过postman请求报错)并留言,记得对敏感信息打码,比如key,mch_id,appid等
附录
1、SDK与相关API规则介绍
- 微信支付API v3 SDK介绍
- 验签工具使用指引
- 微信支付官方提供的排查签名步骤介绍
- APP调起支付版本文档(V3普通商户版本)
- APP调起支付版本文档(V2普通商户版本)
- APP调起支付版本文档(V3服务商版本)
- APP调起支付版本文档(V2服务商版本)
就不能把顺序理一下吗?搞的乱七八糟的,我JSAPI能正常支付,App 死活付不了,一直提示我签名错误,气死了,你们公司那么多人,就不能让一个人专门做个demo? 不做事的开除算了,写那一堆乱七八糟的浪费别人时间,原本几分钟就能好的事,非要别人把所有文档看一遍,而且前后顺序也不理一下,简单的东西偏偏要复杂化,sb一样的,签名工具也报错,换几台电脑都打不开,垃圾公司。你直接第一步干嘛,第二步干嘛,弄个顺序多清楚,然后app和其他签名方式是不同还是一样,在app 那标注一下噻
这签名,就拿appId来说,一会是大写(appId)一会是小写(appid),能不能规范点啊。
包名我检查了是对的啊
就在这里报错了
调起微信支付异常