收藏
回答

小程序支付js调起支付请求的时候报支付签名验证失败

小程序支付为服务商版的微信支付,预支付成功后对微信平台返回的参数进行签名以及通过uni-app发起支付请求,结果报错提示是支付签名验证失败。

后端签名代码

前端调起支付代码

1.看过其他相同问题的帖子,有人说是因为微信预支付的appid要小写,而jsapi调起的支付签名里面的appId要大写,这里是按照文档上面的大小写的要求传参的。

2.微信预支付的签名密钥和jsapi调起支付的签名密钥是一致的,且签名结果在微信官网经过签名验证结果是一致的。

3.贴吧有人说是密钥要重置可能是因为微信平台有缓存的原因(在这里表示已经在服务商平台里面的api安全里面重置过密钥了,但是还是一样的情况,情况还是只能下单不能支付,如下图)

4.怀疑是否受支付授权目录配置影响,目前这个配置不太会配置(刚刚百度问过,也有说小程序不需要设置支付授权目录)

5.也有人说“最新微信支付提供的SDK代码中,统一下单接口sign_type是置为 HMAC-SHA256 而不是使用默认的 MD5,而公众号内发起支付的签名只能使用 MD5,正是这种不一致导致了签名验证错误,将统一下单的签名类型改成MD5即可。”,但是我小程序这边统一下单和jsapi调起支付的签名都是设置的MD5,也可以排除这个问题。


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

3 个回答

  • 路人甲
    路人甲
    2020-05-12

    支付成功了,原因是自己看错文档了,我以为看的是jsapi的文档,实际上应该是小程序的文档

    2020-05-12
    有用 1
    回复 2
    • 钦
      2020-08-04
      老哥 可以贴一下 小程序的前端的 paySign 的加密排序吗 我的老是支付验证签名失败 还有 signType 是RSA 还是 MD5 谢谢了
      2020-08-04
      回复
    • 二十一
      二十一
      2020-10-23回复
      可以使用官方sdk里的WXPayUtil.generateSignature()
      2020-10-23
      回复
  • 冰冻的绿豆汤
    冰冻的绿豆汤
    2020-05-11

    应该是第5点的问题,页面调起支付收银台的js,全部用微信返回的参数,不是说你自己改成MD5就可以的

    2020-05-11
    有用 1
    回复 9
    • 路人甲
      路人甲
      2020-05-11
      微信预支付统一下单的接口里面返回数据中没有签名类型呀。
      2020-05-11
      回复
    • 路人甲
      路人甲
      2020-05-11
      js传参里面的signType:MD5是官网提供的可选值,写死也没问题吧
      2020-05-11
      回复
    • 冰冻的绿豆汤
      冰冻的绿豆汤
      2020-05-11回复路人甲
      预支付统一下单接口里面,返回数据里有签名类型的
      2020-05-11
      回复
    • 路人甲
      路人甲
      2020-05-12
      这是统一下单接口的返回参数,只有签名没有签名类型,统一下单接口的传参倒是有签名类型,但是传过去反而不能下单,提示不识别的参数sigin_type
      2020-05-12
      回复
    • 冰冻的绿豆汤
      冰冻的绿豆汤
      2020-05-12回复路人甲
      https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=7_7&index=5
      2020-05-12
      回复
    查看更多(4)
  • 微信支付技术助手8
    微信支付技术助手8
    2020-05-11

    请按照以下几点进行排查:

    1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误

    2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)

    3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)

    4、确认参数的大小写,参数名与接口文档一致

    5、签名原串的参数值使用原始值,不需要encode

    6、接口需要使用UTF-8编码

    7、调用“小程序支付API”中appid没有按照文档要求的格式

    8、调用“小程序支付API”中signType类型与“统一下单接口”不一致

    2020-05-11
    有用
    回复 3
    • 路人甲
      路人甲
      2020-05-11
      老哥提出的问题排查点有一下问题已经确认过的了
      1.使用签名检查工具校验签名。  (已经校验过几次都是一致的)
      2.确认密钥是否有误   (统一下单的密码和js签名的密钥用的是同一个,而统一下单是成功的,说明密钥没问题)
      3.确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数( js调起的参数和签名的一致,没有增加和减少,况且签名验证工具是通过的,所以应该也不是这个问题,js前台也打印过原参数基本没问题)
      4.确认参数的大小写,参数名与接口文档一致 (参数的大小写都是从官网文档copy过去的,也不会有问题)
      5.签名原串的参数值使用原始值,不需要encode (没有做过encode)
      6.接口需要使用UTF-8编码 ( js调起的请求,没有编码设置,而且也没有中文数据)
      7.调用“小程序支付API”中appid没有按照文档要求的格式 (appid参数的大小写和文档一致的)
      8.调用“小程序支付API”中signType类型与“统一下单接口”不一致  (用的都是MD5签名方式)
      2020-05-11
      回复
    • ouhzh
      ouhzh
      2022-07-11回复路人甲
      兄弟,你解决了吗?貌似我也是遇到这样的问题
      2022-07-11
      回复
    • 路人甲
      路人甲
      2022-08-17回复ouhzh
      原因是自己看错文档了,我以为看的是jsapi的文档,实际上应该是小程序的文档
      2022-08-17
      回复
登录 后发表内容
问题标签