微信发红包接口一直报错 SIGN_ERROR "签名错误"

微信官方给出的原因是:

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/

从微信官方的解释和我的代码对比一下,并没有发现有什么异常。后来发现发红包传的参数 total_amount 是int型,问我传的是double型,就报了SIGN_ERROR 签名错误,这就说明了参数的传递一定严格按照微信定义的形式去传参。

微信支付返回401错误代码表示签名错误。根据引用\[1\]中的解释,签名错误可能是由于参数传递的问题导致的。在微信支付中,参数的传递必须严格按照微信定义的形式去传参。请检查你传递的参数是否符合微信的要求。 另外,根据引用\[2\]中的示例代码,你需要将参数转换成xml格式,并使用签名算法生成签名。然后将xml格式的参数发送给微信平台进行下单请求。请确保你的代码中的参数和签名的生成过程正确无误。 此外,根据引用\[3\]的说明,在接收到微信的支付通知后,你需要及时给予应答,以确保微信方知道你已经收到了支付通知。如果没有及时给予应答,微信会通过一定的策略定期重新发起通知。请确保你的代码中包含了给予应答的逻辑。 综上所述,要解决微信支付401 SIGN_ERROR错误,你需要检查参数传递是否正确,确保签名的生成过程正确,以及及时给予微信支付通知的应答。 #### 引用[.reference_title] - *1* [微信发红包接口一直报错 SIGN_ERROR "签名错误](https://blog.csdn.net/zuihongyan518/article/details/90029622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [微信支付(java版本)](https://blog.csdn.net/a1029573879a/article/details/127443685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值