严格按文档生成的签名,所有参数都设置成了英文,并且(https://pay.weixin.qq.com/wiki/tools/signverify/)与生成的sign值一样,该商户之前做过js支付,签名都没问题,不知道为什么做现金红包发放就说签名错误,以下是具体代码,无敏感信息
以下是错误信息
<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[签名错误]]></return_msg><result_code><![CDATA[FAIL]]></result_code><err_code><![CDATA[SIGN_ERROR]]></err_code><err_code_des><![CDATA[签名错误]]></err_code_des><mch_billno><![CDATA[敏感信息]]></mch_billno><mch_id><![CDATA[敏感信息]]></mch_id><wxappid><![CDATA[敏感信息]]></wxappid><re_openid><![CDATA[敏感信息]]></re_openid><total_amount>100</total_amount></xml>
可能是以下问题导致:
1、没有使用商户平台设置的商户API密钥进行加密(有可能之前设置过密钥,后来被修改了,没有使用新的密钥进行加密)
2、加密前没有按照文档进行参数排序(可参考文档)
3、把值为空的参数也进行了签名。可到(http://mch.weixin.qq.com/wiki/tools/signverify/ )验证。
4、如果以上3步都没有问题,把请求串中(post的数据)里面中文都去掉,换成英文,试下,看看是否是编码问题。(post的数据要求是utf8)
请按照以下的几点进行排查:
1、到商户平台重新设置新的密钥后重试
2、检查请求参数把空格去掉重试
3、 中文不需要进行encode,使用CDATA
4、 按文档要求生成签名后再重试
在线签名验证工具:http://mch.weixin.qq.com/wiki/tools/signverify/