之前已经能正常报关。也使用了微信网页上的验签工具都是通过的。同样的KEY,支付能正常调起,但是报关就提示签名验证失败
<xml>
<sign> </sign>
<appid> </appid>
<mch_id> </mch_id>
<out_trade_no> </out_trade_no>
<transaction_id> </transaction_id>
<customs> </customs>
<mch_customs_no> </mch_customs_no>
<cert_id> </cert_id>
<name></name>
</xml>
同样的问题,验证工具也通过了,也是挨个检查没问题,就是说签名失败。
<xml><action_type>ADD</action_type>
<appId>wxbxxxxxxxx</appId>
<cert_id>buyerIdNumber</cert_id>
<cert_type>IDCARD</cert_type>
<customs>GUANGZHOU_ZS</customs>
<duty>taxTotal</duty>
<mch_customs_no>xxxxxx</mch_customs_no>
<mch_id>xxxxxxx</mch_id>
<name>buyerName</name>
<out_trade_no>orderNo</out_trade_no>
<sign>xxxxxxxxxxxxxxxxxxxxxx</sign>
<transaction_id>payTransactionId</transaction_id>
</xml>
请按照以下几点进行排查:
1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码
7、签名不需要参数nonce_str,请去掉