搜了一下,发现不少朋友卡在这里了,我自己也被卡了一天多才解决,下面分享下个人经验:
1.检查各参数是否正确,一定要对着微信网站数据过一遍,不要拿中间数据对比,一定要对着微信网站数据过一遍,不要拿中间数据对比,一定要对着微信网站数据过一遍,不要拿中间数据对比。中间别人给的数据,可能已经变了,而没有告知你,这个会浪费不少时间。
2.验证证书是不是对的,这个我也遇到了,拿到的第一版证书也是有问题,幸好后面补发给我了,要不又不知道要卡多久。。证书验证的方法官网有例子,大概命令如下:
openssl x509 -noout -modulus -in wxpay_cert.pem openssl rsa -noout -modulus -in wxpay_key.pem
两个结果一样就OK的。
3.加密算法可参考官网例子https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/qian-ming-sheng-cheng,但这个里面有坑,比如哪个随机数,一定不要过长,官网的32位,其实是有问题的,建议拿时间戳(毫秒)试,位数应该有要求。
4.如果还是返回"message":"错误的签名,验签失败",这个时候,你可以拿官网给的两个工具试。链接地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml,一个是可以验签的,把自己拼的填进去然后比对工具跑出来的对不对,不对的话,就是加密算法有问题,对了,那就是有参数或者数据拼接格式不对,这个时候可以用第二个工具。第二个工具是个postman的配置,直接按照git上的readme流程走,就可以了,有3个参数需要填:
- private_key,商户私钥,位于文件
apiclient_key.pem
中。请见,商户API证书和什么是私钥?什么是证书?。 - mchid,商户号。
- serialNo,商户证书的证书序列号。请见什么是证书序列号。
填好之后,直接发个测试的req,如果还是“错误的签名,验签失败”,那么基本就可以确定你上面3个参数有问题,因为中间计算签名都是微信自己算的,这个我自己测试过,是对的,还是靠谱的。这个时候就回到步骤1,老老实实核对参数,步骤2校验证书吧。
随机数32位没问题,我们项目一直在用32位的随机数
感谢分享