官方解决方案您好,请按照以下几点排查:
1.使用签名检查工具:)验证签名算法是否错误
2、确认秘钥是否正确(服务商模式使用服务商商户账户秘钥,秘钥是在商户平台配置的,如果同一个商户账户成功调用其他接口,则可以判定秘钥问题出去)
3. 确认接口实际请求参数与生成原始签名串时使用的参数一致。 不能添加额外或缺失的参数(可以通过打印原始签名字符串来检查)。
4. 确认参数大小写,参数名称与接口文档一致。
5、原始签名串的参数值使用原来的值,不需要
6.接口需要使用UTF-8编码
如果您已检查完以上所有内容,请按照以下几点进行故障排除:
7. 打印出您要求的最终数据,并将其与您的工具验证的正确数据进行比较,看看是否存在大小写差异或多余空格。
8. 使用当前参数进行测试和故障排除,避免应用层处理问题。
9.重置密钥(支付密钥)
我们来一一分析
1.日常签名错误
1. 缺失数据 2. 空格 3. 大写
为什么会出现这样的问题呢? 一般情况下,如果您下单有这些问题,是不会报签名错误的。 这是因为签名本身是成功的,但是开发者最终请求的数据已经改变或者被硬编码了。 因为有数据,开发者需要将最终请求的数据打印出来,并使用工具进行验证。
2、工具验证了sign值相同,但为什么还是报签名错误?
注:该工具只会验证数据签名后的签名是否对应,不会验证支付密钥是否正确,但微信支付官方后台调用订单接口时会验证。
解决方案:
1.找到正确的密钥,替换后重试(如果仍然报签名错误,请参考2)
支付密钥所在位置【账户中心-API -API Key-Set Key】
2、重置密钥(优先,但请注意,重置密钥会对使用该密钥的其他线上业务产生影响,重置前业务量需要较小,然后替换所有使用该密钥的地方),更换并重试。
3. 支付结果通知验证签名失败
1. 付款结果通知。 有些开发者在测试签名验证时,会将收到的数据通过微信发送给其他同事进行测试。 其中一个数据是这样的
通过微信发送的数据将如下所示:
那么当其他开发者复制它时,它会是这样的:
最后,当我去手动验证签名时,出现错误:“签名失败”。
2. 收到支付结果通知后,封装数据,然后进行签名验证。 这样也会报:“签名错误”,所以一定要使用官方返回的原始数据
4.确认秘钥(支付秘钥)是否正确
1、服务提供商模式使用服务提供商的商户账户密钥。 密钥在商户平台【账户中心-API安全-API密钥-设置密钥】中配置。 如果同一个商户账户调用其他接口成功,则可以排除秘钥问题。
2. 使用错误的密钥。 除了API key之外,我们的商户后台还有一个秘钥设置。 不要在这里设置或使用错误的密钥。 当然,您可以将V2V3密钥设置为相同。 我就是这样设置的。 避免使用错误
3、设置的秘钥是在商户A账户下,但订单却是使用商户B账户下的,服务商的问题较多。 设置在子商户上,但采用的是服务商模式。