根据文档提示所需要检查的以下几个,
1.签名串的最后一行没有附加换行符
如果请求报文主体为空(如GET请求),最后一行应为一个换行符。 =====>根据报错信息这个排除
2.签名串中的参数,跟实际请求的参数不一致
手工拼接的URL,和实际请求发送的不一致。我们建议的实现是,使用HTTP库构造请求对象或者URL对象,再使用相应的方法取得URL。===》这个url我是string拼接的 如下
https://api.mch.weixin.qq.com/v3/apply4subject/applyment/merchants/+mchid+"/state"
签名和设置Authorization头时,使用了前后生成的两个时间戳。 =====>这个排除
签名和设置Authorization头时,使用了前后生成的两个不同的随机串。=====>这个排除
签名和请求时,使用了前后两次序列化的JSON串作为请求主体。 =====>这个排除
商户的开发者可以将关键参数生成并保存在变量中,签名和发送请求时统一使用,避免前后生成的信息不一致。=====>这个排除
3.文本的编码不一致
生成签名串使用了非UTF-8编码或者未设置具体编码。 =====>这个排除
4使用了错误的商户私钥
开发者可以使用如下的openssl命令检查私钥和商户证书中的modulus(p、q两个大素数的乘积)是否一致。如果两者一致,那么私钥和证书是成对的。 ======>这个我根据微信平台返回的证书获取的privatekey用的是下图的apiclient_key跟商户序列号用的是apiclient_cert
代码一块就是简单的拼接
能看看是哪一块出问题了吗
我的是post方法是成功的,用get就报错误的签名,验签失败
境外商户 没有地方设置 KEY啊?
老哥你解决了吗?
签名错误,基本可以从两点排查,签名参数(用官方验证工具验证),KEY的问题(更换一下KEY),基本就能解决签名错误的问题