1.V3签名错误
1.1服务端签名错误(如下单) 参数错误和方式错误无先后顺序
1.1.1 签名方式错误
当签名参数无误时,就是签名的方式有问题,可以使用以下方式检查
使用官方验签工具进行验签,地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/download/Product_5.zip
明文填写方式参考官方签名生成文档 ,地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml
注意红色方框内容,【\n】在验签工具明文中是换行的意思,不是字符串,注意一共有5个,所以POST请求在验签工具里面最后一行需要换一行,GET需要换两行,并且GET请求需要在URL末尾附加有’?'和对应的查询字符串
POST请求可参考以下截图
GET请求可参考以下截图,注意【?】为英文状态下的?
1.1.2 签名参数错误(含私钥等参数) 参数错误和方式错误无先后顺序
当签名方式无误时,就是签名的参数有问题,可以使用以下方式检查
使用官方postman脚本进行测试,地址:https://github.com/wechatpay-apiv3/wechatpay-postman-script
注意:需要先下载脚本后导入postman里进行配置
严格按照官方步骤进行配置,注意这里的配置,Authorization的值就是{{auth}},不需要自己生成签名
配置好之后先测试下载证书(官方已经配置好,直接可以调用)如果成功下载证书,说明私钥、商户号、证书序列号是没有问题的,根据请求方式选择【证书下载】或者【发放指定批次的代金券】替换一下参数和请求URL即可测试出错的接口
1.1.3 Authorization头部值错误
1.商户号mchid 与使用私钥不匹配或不存在(注意:千万不可以有空格)
2.证书序列号serial_no与当前私钥对应在商户平台查看的证书序列号不匹配(注意:如果不匹配可能会导致系统繁忙,请稍后重试)
3.随机字符串nonce_str与组成签名的明文中的随机字符串一致(注意:千万不可以有空格)
4.时间戳timestamp与组成签名的明文中的时间戳一致(注意:千万不可以有空格)
5.组成请求头时是一行数据,WECHATPAY2-SHA256-RSA2048 mchid=“1900009191”【中间是一个空格,不是换行】
6.无论是下单还是唤起,如果是服务商模式,均使用服务商的参数(私钥、商户号、证书序列号)唤起和下单一定需要使用相同的私钥进行签名
1.2唤起签名错误
1.2.1 签名参数错误
1.严格按照文档需要的参数进行签名,如小程序唤起支付
注意参与签名时不要有空格
2.私钥文件需要和下单时一样,如果是服务商模式,均使用服务商的
3.唤起的参数字段名大小写必须与文档中一致,注意签名方式为RSA
4.测试时以上均无误,则把前端参数写死后测试
1.2.2 签名方式错误(前后端签名方式需一致)
1.签名方式按照文档中的方式进行签名,可用签名验证工具进行验签,明文排放规则如下
这里的【\n】在验签工具明文中是换行的意思,不是字符串注意一共有4个,明文最后一行需换行
2.V2签名错误
2.1服务端签名错误(如下单)
使用官方签名工具验证签名,复制请求的XML请求串,使用api秘钥验签
签名方式按照加密的方式验证,例如MD5
点击校验签名,就会得到验签的结果
使用官方签名工具生成签名,使用postman测试,无需任何配置,复制粘贴请求地址和请求参数,就可以校验参数和秘钥是否正确
注:需要使用证书的接口,可以自行在网上查询如何导入证书
地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1
注意签名方式和字段签名方式需要保持一致,填写时不要有空格,注意大小写需要与文档一致
如果使用验签工具生成签名后请求接口依然提示签名错误,那就是API秘钥有问题,登录商户平台重置秘钥后再重试
秘钥key设置方式:https://kf.qq.com/faq/161220VnAvUb161220NJRbiM.html
如果是服务商模式,均使用服务商的秘钥
2.2唤起签名错误(前后端签名方式需一致)
唤起支付时需要按照文档要求生成签名,不是用下单成功后返回的签名,注意签名的参数大小写需要与文档一致
可以使用验签工具生成签名值写死在前端进行测试,签名方式及秘钥key需要下单时一致
唤起时的签名错误可能有:
1.如参与签名字段的大小写或者不是文档规定使用的参数(有缺少或有多余的参数)
2.生成签名的秘钥key错误,注意一点是在商户平台设置的api秘钥,设置地址:https://kf.qq.com/faq/161220VnAvUb161220NJRbiM.html
服务商模式下单和唤起都需要使用服务商的秘钥
3.前后端交互问题,可能前端传递的参数为空或错误
4.注意唤起的方法里的字段需要与文档中一致,不可以缺少或者多余
字段注意不要有空格,需要真实参数【appId必须是当前唤起主体的appId,例如小程序就必须是当前唤起支付的小程序appId,且和下单时的appId一致】
3.V3验证签名错误
在代码中验签失败的时候,可以使用官方验签工具进行验签,下载地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/download/Product_5.zip
验签是需要使用平台证书,不是使用商户证书,平台证书接口文档:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay5_1.shtml
获取到平台证书后需要解密,解密文档:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_2.shtml
明文和签名填写方式参考官方验证签名文档 ,文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml
平台证书、明文、签名都得到之后,可以使用验签工具进行验签,文档中的/n换行在验签工具中是需要手动换行的,所以最后一行也是需要换行。如图
牛逼
我的情况是,我们有多个 APP,之前的 APP 早就上线了也没问题,但是新创建的 APP(未上线) 在 Android 端部分机型上报错:「签名不对,请检查签名是否与开放平台上填写的一致。」,神奇的是在部分机型上却又能正常吊起微信付款页面
我用验签工具 签名验证通过 返回的字节长度和请求字节长度也是一致还是报签名错误
签名验证通过,前端APP调用唤起微信支付还是报-1,签名错误