收藏
回答

微信支付异步通知,验证签名失败,可能原因?

微信支付异步通知,返回的是数据流,将其转换成map,当做参数,WXPayUtil.isSignatureValid用该方法验证签名,失败,请问可能是什么原因,另外,支付使用什么方式加密签名,返回也是什么方式加密签名是吗?



最后一次编辑于  2019-10-10
回答关注问题邀请回答
收藏

4 个回答

  • hey
    hey
    2020-04-08

    去掉返回的sign,其余的参数来算出签名 与 微信的sign作对比


    文档里根本没有提 只能猜

    2020-04-08
    有用 2
    回复 2
    • 孙一飞
      孙一飞
      2020-06-19
      普通商户去掉sign,其他参数能对上。 第三方平台商户的结果对不上,郁闷了
      2020-06-19
      回复
    • 王俊超
      王俊超
      05-29回复孙一飞
      我草大哥,翻了那么多,就你说到整点上了
      05-29
      回复
  • sky | AW大师
    sky | AW大师
    2020-05-28

    使用非沙箱环境时,支付OK,异步回调提示眼前失败,这与默认的签名方式有关,请求统一下单是非沙箱模式,但是使用的 “HMACSHA256”加密方式;而异步回调的时候没有“sign_type”字段,默认使用MD5加密方式,因此验证签名失败,这里把非沙箱改为MD5就可以了。我这边用的是java代码,修改下com.github.wxpay.sdk.WXPay的java类中非沙箱模式为默认的MD5就可以了。支付文档好久了,也不更新,坑了一个个支付对接的人,这里给说明下,帮助大家躲过坑。

    if (useSandbox) {
        this.signType = SignType.MD5; // 沙箱环境
    }
    else {
        this.signType = SignType.HMACSHA256;
    }
    
    2020-05-28
    有用 1
    回复
  •   
      
    2020-07-23

    这个确实是个问题,下单时是HMAC-SHA25,但是,异步通知返回结果时是MD5

    2020-07-23
    有用
    回复
  • 微信支付技术助手1
    微信支付技术助手1
    2019-10-10

    1、在统一下单unifiedorder接口中,确认下配置的notify_url,找到程序的代码
    2、修改代码增加签名验证:取支付通知中的参数和自己的密钥算出签名,用这个签名和支付通知中参数的签名做比较,如果完全一样,则验证通过,否则验证不通过。
    算签名的方法:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
    3.签名校验工具:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1

    2019-10-10
    有用
    回复 5
    • 闲时
      闲时
      2020-01-04
      官方支付文档写的有问题,统一下单不设置加密方式默认为HMAC-SHA25,微信返回签名加密说同统一下单的加密类型,统一下单不设置加密类型,本地验签又默认把验签加密方式设为了MD5
      2020-01-04
      4
      回复
    • 哦~
      哦~
      2020-01-10
      我再次重申这个问题,已经整整三个月了,这个问题依然存在,麻烦尽快修改sdk及api文档
      2020-01-10
      2
      回复
    • Mr.W
      Mr.W
      2020-02-27回复哦~
      是的,我改了加密方式,验证通过了!
      2020-02-27
      回复
    • 周凌峰
      周凌峰
      2020-03-19
      调TM的微信的支付,调的火大。通知的签名,用了哪些参数啊,不会说明吗?通知的签名加密方式,在哪里写的啊??能在支付结果通知里边,都写出来?
      2020-03-19
      1
      回复
    • 江
      2020-05-26
      官方支付文档写的有问题,统一下单不设置加密方式默认为HMAC-SHA25,微信返回签名加密说同统一下单的加密类型,统一下单不设置加密类型,本地验签又默认把验签加密方式设为了MD5。返回给app端需要二次签名 和 回调需要签名都是用HMAC-SHA25加密方式。被坑老长时间找问题了。
      2020-05-26
      回复
登录 后发表内容
问题标签