操作退款的时候,调用微信退款接口,返回“签名错误”,之前都是正常的,最近云服务器停掉以后,然后重新开启云服务,操作退款,发现报这个错误。
麻烦大家帮忙解答一下,不胜感激。
日志如下:
[INFO] - com.github.binarywang.wxpay.service.impl.WxPayServiceApacheHttpImpl.post[75 line] - ,
【请求地址】:https://api.mch.weixin.qq.com/secapi/pay/refund,
【请求数据】:<xml>,
<appid>wx53******省略</appid>,
<mch_id>157******省略</mch_id>,
<nonce_str>1644984967685</nonce_str>,
<sign>038BA94DD4A2A01****055B7A5F5AA70</sign>,
<out_trade_no>20211216******省略</out_trade_no>,
<out_refund_no>R2022******省略</out_refund_no>,
<total_fee>14000</total_fee>,
<refund_fee>5700</refund_fee>,
<op_user_id>157******省略</op_user_id>,
</xml>,
【响应数据】:<xml><return_code><![CDATA[FAIL]]></return_code>,
<return_msg><![CDATA[签名错误]]></return_msg>,
</xml>,
我也遇到签名错误问题,然后支付调用正常,签名检查工具校验也没问题,退款一直报签名错误,搞了好久没啥用,然后把重新排了下参数顺序就通过了,我把参数顺序也有影响,
这几个放到最前面然后就没出现了。。。
签名错误问题可以按照以下几点进行排查:
1、使用签名检查工具校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码