评论

全网最全v2接口签名报错排查指引!!!!

签名报错排查

前言:签名错误!估计很多朋友看到这个报错的时候就比较头大了,不知道如何下手,对什么是签名等都不是特别了解,所以很难处理好这类问题,下面是我总结的目前一些签名错误的排查指引。阅读本文章前,建议提前看一下文章右侧的目录,帮助你更好的阅读此文章。

确定自己使用的什么版本接口(通过这两个就可以直接判断使用的是什么版本):

v3接口特征:

1、参数是JSON格式

2、签名类型为非对称密钥SHA256-RSA,参考的是:如何生成签名

v2接口特征:

1、参数是XML格式

2、签名类型为MD5/HMAC-SHA256,参考的是:签名算法

----------

v3签名错误排查指引文档:点击

----------

什么是签名:

1、这里解释的稍微通俗一点,就是把要传递给接口的参数,进行加密,加密的这个动作就是签名,作用就是保障这条请求是你的请求

2、v2接口使用的是APIv2密钥进行签名的(注意是APIv2密钥,跟APIv3密钥没有关系,二者互不影响)

先确定自己是服务商还是直连商户:

需要提前准备的工具:

1、postman

2、v2接口签名校验工具

v2接口签名生成工具

下面介绍一下签名错误的几种情况以及对应的检查方法

v3接口小程序发券插件签名报错


只需要这些参数参与签名,且注意这里的下标需要按照文档提示带上下标0(如果是多张就是1、2等),不需要{}

服务端接口签名错误(比如JSAPI下单、APP下单等接口,除调起支付和回调接口基本可以认为是服务端接口)

签名错误经典报错

<xml><return_code><![CDATA[FAIL]]></return_code>

<return_msg><![CDATA[签名错误,请检查后再试]]></return_msg>

先检查参与签名的参数是否有问题,按照下面的方式生成签名(参数名称一定要去文档当中复制,避免手动输入出现空格大小写等错误,测试时,建议就填写必填字段,除了商户号APPID和APIv2密钥(有些接口需要openid,openid需要使用真实可用的,且是通过当前APPID获取的),其他的都是使用官方的示例值进行测试)

然后直接使用postman进行请求测试,不需要什么配置,只要参数跟请求的url

如果按照上面操作提示了签名错误原因可能有:

1、未根据自己商户号的属性使用正确的文档
显示 直连商户:应该使用 直连商户文档以及商户自身的APIv2密钥文档
显示 服务商:应该使用 服务商的文档以及服务商的APIv2密钥文档
显示 特约商户:应该使用 服务商的文档以及服务商的APIv2密钥文档
2、文档使用正确的且参数确保没有问题的情况,使用postman测试还是报错则说明APIv2密钥错误, 目前APIv2密钥无法查看,只能重新设置,使用相同的APIv2密钥重新设置则可以判断APIv2密钥是否正确注意重新设置时,一定要确保登录商户平台的商户号是下单的商户号,如果是服务商模式就一定必须是服务商去商户平台重置,如果直连模式,则是下单时传递的商户号到商户平台重置,一定要主要检查是不是对应的商户号
3、若使用postman测试没有问题,则说明APIv2密钥是正确的,第一步先确定在代码里面 使用的API密钥是否正确,注意是否会有 大小写空格问题,或者被代码转义了,导致出现大写等问题,若确保这些没有问题,把代码生成的签名使用验签工具进行验签来确认签名方式的问题

4、注意签名方式,v2只支持HMAC-SHA256和MD5,没有传递签名类型,一般默认就是MD5,注意查看是不是 传递了MD5却使用的HMAC-SHA256签名方式或者是反过来的 (注意,要是接口没有说明是签名类型,则默认就是MD5,使用HMAC-SHA256则会报签名错误)
5、商户号不正确也会导致签名错误

注意:

1、使用签名工具生成签名postman测试代码使用的参数是没有问题
2、使用验签工具验签能通过只代表生成 签名的方式是没有问题,但不代表 参数是否正确,因为验签工具不交易参数的正确性

客户端签名错误(比如JSAPI调起支付、APP调起支付等,这类属于特殊签名方式,在对应的文档会有详细的说明情况,比如JSAPI调起支付就有介绍如何生成签名)

1.首先确定 服务端和客户端的签名类型是否一致v2接口只能是MD5或者是HMAC-SHA256签名方式,二者的签名长度一样,如果不一样则会报签名错误
2.生成签名时使用的 APIv2密钥需要跟下单时使用的必须一致
3.使用签名工具进行验签(建议同时对下单的签名进行验签,这样就能直观的看到自己两次使用的APIv2密钥是否一样)

上述生成签名跟自己的不一样,则说明自己生成的签名有问题, 可以把生成签名写死在前端试一下
4.调起支付的前端方法尽量使用微信支付官方文档提供的方法, 注意参数不要有空格等问题

5.如果上面检查都没有问题,可能自己的代码有问题, 前后端传输问题,比如 时间戳timeStamp后端没有成功传递给接口,导致最终传递给微信接是空的也会报错, 这种情况建议先把参数提前生成好,然后写死在前端,建议直接重新写个简单的测试页面(可以避免缓存的影响)

如果有什么疑问,欢迎在评论区里留言

最后一次编辑于  06-30  
点赞 1
收藏
评论

2 个评论

  • 辉
    06-10

     https://api.mch.weixin.qq.com/v3/apply4sub/sub_merchants/{sub_mchid}/modify-settlement

    我们就某个商户,请求这个的时候,一直报系统繁忙,请稍后尝试.

    06-10
    赞同
    回复 1
    • HOPE
      HOPE
      06-21
      解决了吗?是下单报的错还是调起支付报的,没有解决可以私信发参数给我,帮你看看
      06-21
      回复
  • Es el amor.
    Es el amor.
    05-17

    咨询一下,如果相同的APPID下绑定多个商务号,但是只有一个商务号下载对账单好使,换一个商务号就报sign error 20001错误!知道什么原因吗?

    05-17
    赞同
    回复 1
    • HOPE
      HOPE
      05-18
      先确定一下你是使用的服务商还是直连商户,然后在确定你调用的是服务商的接口还是直连商户的接口,如果是服务商调用服务商接口下载某一个子商户的账单,构建签名的商户号是不需要改变的,都是使用服务商的,而是请求参数变了(要是下载服务商下全量的账单,就不需要改变参数,如果是某一个特定子商户的,只需要请求参数sub_mchid换成子商户的即可)
      05-18
      回复
登录 后发表内容