<xml><return_code><![CDATA[SUCCESS]]></return_code><result_code><![CDATA[FAIL]]></result_code><err_code><![CDATA[SIGN_ERROR]]></err_code><err_code_des><![CDATA[验证签名失败]]></err_code_des><mch_id><![CDATA[1565095421]]></mch_id><appid><![CDATA[wx1fe38888dc886611]]></appid><nonce_str><![CDATA[ed8363b65a685c18]]></nonce_str><sign><![CDATA[1F2FA5CC0DFBBBAE65A7E7C7011B842C9D7BAD72264CD160785020636459A780]]></sign></xml>
我用了https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=20_1这个验签,来回的都用了商户号的api密钥验签了都是通过的,但是微信那边就是一直这个错误,这个交流社区每次都只能看到出现的问题,但是从来没有看到过解决过的问题,每次都会有客服提供者提供那最后也没个音信,感觉这个问题也不会有人来解决,这样以后我还是转阿里的支付吧。
请按照以下几点进行排查:
1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码
这是我加的支付助手给的解决方案,这六点我早就试过了,搞了我一个多星期还没搞出来,谁能帮我解决这个问题,给钱也可以!
解决了,最后一点,utf-8编码问题,全部是英文就通过了。谢谢客服,= =!,终于搞定了。
这个帖子就不删了,记录一下愚蠢的凡人(自己GAG)。很容易忽视的一个细节就是用restTemplate或者其他的封装了httpClient的框架时没有去定义框架底层的默认编码,我用的是restTemplate,底层默认的是iso所以就算打印出来的入参没有问题但是实际发送过去的是另外的东西,导致SIGN_ERROR, 以后还是得细心点呀!!!!
签名问题,就是以上几点出现的问题。或者你把KEY重置一下。你的签名一直不通过,肯定是你的参数本身还存在问题。