收藏
回答

支付验证签名失败

  1. errMsg:"requestPayment:fail"

  2. err_code:2

  3. err_desc:"支付验证签名失败"



微信小程序 吊起支付的时候返回支付验证签名失败,在经过签名工具的时候签名是一样的。

还有什么问题是导致错误呢

回答关注问题邀请回答
收藏

12 个回答

  • 哈撒给🍁
    哈撒给🍁
    2021-03-31

    在验签工具上验签成功,但是在手机微信上支付时就是返回验签失败。检查了所有字母得大小写,又重新复制了一遍。还是这个错误,怎么解决得?

    2021-03-31
    有用 1
    回复
  • 李飞飞
    李飞飞
    2020-09-25

    1、appId 的是大写的I,是 nonceStr 而不是 ‘nonce_str’

    2、小程序调用时的取值,要跟 服务端的值相同,timeStamp、nonceStr

    3、总结:这一步的经验,是下一步的坑····

    2020-09-25
    有用 1
    回复 2
  • 墨韵
    墨韵
    2020-07-01

    【已解决】

    android sdk提示:支付验证签名失败

    原因:统一下单返回的sign位数,跟下发给app的sign位数要一样!

    也就是说:签名类型要相同

    ps:被坑了好久~【详情 https://www.jianshu.com/p/fa756ff471fc

    2020-07-01
    有用 1
    回复 2
    • 墨韵
      墨韵
      2020-07-01
      统一下单返回的sign是md5的,下发给App的也要采用md5签;
      统一下单返回的sign是HMAC-SHA256,下发给App的也要采用HMAC-SHA256签。
      2020-07-01
      回复
    • 墨韵
      墨韵
      2020-07-01
      签名字段大小写,根据官方文档的就行,直接拷贝文档的字段,然后通过官方验签工具验证签名,验证通过,说明就ok了。(前提是api密钥、appid、parterid等字段值要正确!!!)
      2020-07-01
      回复
  • Time
    Time
    2019-10-06

    楼主解决了吗 我这边大小写检查了没问题 就是返回和你一样的错误

    2019-10-06
    有用 1
    回复
  • 微信支付技术助手7
    微信支付技术助手7
    2019-03-14

    您好,请参考:

    1.统一下单的时候,接口要传的appid是小写,但是二次签名的时候要求appId是大写,请注意。

    2.如下图:


    2019-03-14
    有用 1
    回复 4
    • Hope
      Hope
      2019-04-03

      请求添加你微信了,昵称 Hope  通过下

      2019-04-03
      回复
    • 万承宇
      万承宇
      2020-01-06
      原参是指的统一下单那个  时间戳和随机串么?
      2020-01-06
      回复
    • Hacked
      Hacked
      2020-10-13
      这个问题真的坑,连验证签名的测试工具都测不出来
      2020-10-13
      回复
    • 哈撒给🍁
      哈撒给🍁
      2021-03-31回复Hacked
      我签名测试工具测试通过,调用得时候,回复签名失败。。。
      2021-03-31
      回复
  • 孤独狂饮
    孤独狂饮
    03-24

    给大家同步一下我这边的方案,2022年03月24日:

    最终解决方案是:让后台返回所有需要的字段,客户端拿着数据,直接请求服务器,即可吊起微信支付。

    示例:

    PayReq request = new PayReq();
    // 应用ID (可本地写死,也可服务器返回)
    request.appId = PayConstants.WX_APP_ID;
    // 商户号 (可本地写死,也可服务器返回)
    request.partnerId = PayConstants.WX_APP_MICID;
    // 预支付交易会话ID, 微信返回的支付交易会话ID
    request.prepayId = mPayOrderBean.getPrepay_id();
    // 扩展字段, 固定值:Sign=WXPay, (可本地写死,也可服务器返回)
    request.packageValue = "Sign=WXPay";
    // 随机字符串, 随机生成 随机字符串,不长于32位。推荐随机数生成算法,服务器生成 (最好是 32 位,如果是 低于 12 位,可能有问题)
    request.nonceStr = mPayOrderBean.getNonceStr();
    // 时间戳,一定是服务器的时间戳 (最好是服务器的时间戳)
    request.timeStamp = mPayOrderBean.getTimestamp();
    // 签名 (这个签名是后端根据证书签名的,一定不要自己写哦,要不然调试好久都没结果)
    request.sign = mPayOrderBean.getSign();
    // 这个字段可有可无。建议还是带上。
    request.extData = "app data";
    mIWXAPI.sendReq(request);
    



    简单描述:

    1. 服务器使用下单接口后,会返回 (以下是测试数据):
    { 
      "return_code": "SUCCESS", 
      "return_msg": "OK",
      "appid": "APPID", 
      "mch_id": "商户号", 
      "nonce_str": "随机字符串", 
      "sign": "081675D3A89B1A735613CF2D777E6F06", 
      "prepay_id": "wx201706052018103dd047b0880123350695", 
      "result_code": "FAIL", 
      "err_code": "ORDERPAID", 
      "err_code_des": "该订单已支付" 
    }
    



    2 其中比较关键是: sign。 这个返回客户端也不行,需要服务器做二次加密。

    具体是:

    "appid=" + appid + "&noncestr=" + nonce_str + "&package=Sign=WXPay" + "&partnerid=" + mch_id + "&prepayid=" + prepayid + "&timestamp=" + timeStamp + "&key=" + key;
    


    一定要注意:这里的key为商户的key,而不是AppSecret;timestamp为当前的时间戳

    3 最后返回的字段:

    { 
      "appid": "第1步的APPID", 
      "mch_id": "第1步的mch_id", 
      "prepay_id": "第1步的prepay_id", 
      "nonce_str": "第1步的nonce_str", 
      "sign": "第3步的签名,不是第1步的签名",
      "timestamp":"第3步的时间戳"
    }
    


    4 注意查看我上面的注释,错一个,就会提示签名失败。


    参见:

    1. https://juejin.cn/post/6844903832875433991 (比较细致)
    2. https://blog.csdn.net/github_39118247/article/details/100198628 (比较老,或者适合客户端直接操作具体数据)



    03-24
    有用
    回复
  • ?,!。
    ?,!。
    02-24

    折腾了一下午和一晚上终于解决了。我这边的问题是:我们之前已经对接 过app的微信支付,后台直接返回了{ "package": "Sign=WXPay", "appid": "wx666", "sign": "7E9360EE36", "partnerid": "1116401", "prepayid": "wx66000", "noncestr": "345332", "timestamp": "1625620895" } 这样的数据各式我当时的做法是拿着后台返回的这些参数 格式化后直接去调用微信支付。

    但是注意注意,JSAPI加密sign的方法和app不一样, sign不能混用,它是是 需要把appId , timeStamp, nonceStr,package, signType 5个参数拼接key 以后 再使用md5加密

    02-24
    有用
    回复
  • 宿迁第一深情
    宿迁第一深情
    2020-03-06

    我的是支付密钥错了,开发工具正常生成了支付二维码,扫描报的支付签名认证失败,换了密钥好了

    2020-03-06
    有用
    回复
  • Meゞ夨ヤ譩丨App小程序软件开发
    Meゞ夨ヤ譩丨App小程序软件开发
    2020-02-12

    https://developers.weixin.qq.com/community/develop/article/doc/00026e815c4ed04d52e9a77eb51c13

    2020-02-12
    有用
    回复
  • 八九
    八九
    2019-11-29

    PHP的同学可能为了方便,组装字符串的时候用了http_build_query()这个函数,但是记得用urldecode()解下码,因为package字段中有个 "=" 会被转成 "%3D",造成签名错误


    appId=xxxxxxxxxxxxxx&nonceStr=OJpSEDBcskUxDh1I&package=prepay_id%3Dwx29143406406445bc284eb90f1909721300&signType=MD5&timeStamp=1575009247&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx


    不要问我为什么知道,因为我刚从这个坑里爬出来!


    2019-11-29
    有用
    回复

正在加载...

登录 后发表内容