关于微信APP支付,提示支付验证签名失败

最近做微信APP支付,在“统一下单”里加签没有问题,调用成功,但是在 “调起支付”后却提示  支付验证签名失败。

先说一下请求的参数,参数一共有七个:

prepayid(统一下单里返回的标识符),

partnerid(商户号),

appid,

package(微信要求必须有,内容是“Sign=WXPay”),

 noncestr(随机数,不适用微信返回的,是重新生成一个,注意统一下单里的参数是nonce_str),

timestamp(时间戳,十位,注意统一下单里的时间是完整的时间,这里是时间戳),

sign(签名,将上述字段重新签名,而不是用统一下单返回的sign)。

这个问题折磨了我一上午,以为统一下单里签名没问题,那么调起支付就不会在加签上出错,最后用微信的签名生成工具对比了一下签名结果发现 程序生成的签名与官网生成的不一样,然后把签名过程输出了下,发现 package 这里出现了问题。

Sign=WXPay,我在加签里对内容进行了utf-8编码,而恰巧,一不小心 “=” 也参与了编码,于是 就变成了 Sign%3DWXPay,然后 错误的package进行了错误的加签,导致签名出错。

解决方案:在加签过程里修改,如果map匹配到 package,那么map的值不参与编码。官方签名校验工具地址:https://pay.weixin.qq.com/wiki/tools/signverify/。

(吐槽一句,微信支付的文档真是一团糟,要啥啥没有,找啥找不到,而且还出现了 多个标准。当然,也可能是我水平太差。。)

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值