评论

微信支付接口报【签名错误】,看这一篇就够了

此文章致力解决在开发微信支付相关接口报【签名错误】,并不断升级更新

此文章致力解决在开发微信支付相关接口报【签名错误】,并不断升级更新

文章demo以’普通商户版’-‘JSAPI支付’作为案例(JSAPI支付文档)

先讲一下开发步骤和经验,文章后半部分讲排错经验

开发步骤

设置支付目录文档链接

支付目录,一定要设置实际支付页面的路径以 / 结尾,如果提示<当前页面URL未注册>,请检查自己实际支付页面的路径是否填写正确

发起支付的业务流程,我们做的操作应该是这样的:用户选择支付金额和其他参数–>用户点击支付–>前端向后台发起请求获取签名等参数–>后台调用统一下单接口,返回给前端需要的签名参数–>前端调用WeixinJSBridge.invoke–>用户填写密码–>支付成功–>微信发送通知给统一下单填写的回调方法。详细业务流程点我查看

后台调用统一下单接口文档链接

此接口参数非常多,第一次开发的时候,建议开发者仔仔细细对每个参数进行比对。遇到签名错误的同学,大部分人的原因是因为参数填写错误导致的

后台在给前端准备参数的时候,是要进行两次签名的:第一次是发送统一下单请求之前,对发送给微信的所有参数进行签名;第二次是微信返回预支付交易会话标识后,对传给前端的所有参数进行签名。

请注意,第一次签名和第二次签名的时候,参数是不一样的,第二次签名的时候,签名需要哪些参数呢?签名的参数是WeixinJSBridge.invoke需要用到的参数,和第一次签名需要的参数是不一样的!

对于参数package我第一次粗心大意,没有拼接字符串‘prepay_id=’希望大家也注意一些,前后台都需要拼接这个字符串‘prepay_id=’

这是我刚刚花费10分钱获取的统一下单截图

只有result_code和return_code都为SUCCESS的时候,说明调用成功,成功拿到预支付的id

前端获取参数后拉起微信支付文档链接

其实完整坐下来,微信支付就这么点东西,只是大家可能有些不熟悉,对于大家遇到的签名错误问题,绝大部分是参数没有认真进行参数比对,参数不能多,也不能少。如果还报错,建议从下面一些方式进行排查

排错经验

· 首先排查签名方法是否正确(签名效验工具),如果自己写的签名方法和工具展示出来的结果一模一样,说明你签名的工具方法写的没有问题,那么就剩下参数的问题了!

· 然后进行参数比对,根据开发文档,进行比对,一个字母都不能差

· 第一次签名和第二次签名的APPID ,后台签名的i是小写,前端调用的是大写

· 后端第二次签名,参数package一定不要忘记拼接prepay_id

· 请再三确认appid和mch_id是否正确,如果同时进行多个公众号支付开发,一定不要弄混

· 第二次签名参数timeStamp时间差距太大(你服务器时间要尽量准确,好像误差不能超过10分钟)

· 中文参数错误,英文参数没有问题的,本文以MD5加密为例,请在加密的时候,指定编码格式为UTF-8

对于企业付款到零钱/银行卡

· 尝试在商户平台的账户信息中更改API密钥(账户设置-安全设置-API安全), 15分钟后生效

· 还是参数,参数,参数

终极杀器·缓存

作者开发语言是java,之前缓存无处不在,myeclipse(开发者工具)的缓存,本地编译缓存,服务器tomcat的缓存,如果你觉得我就是对的,什么都排查过了,没有问题,OK,建议清理缓存(先删除tomcat里边的项目,再添加然后重新编译项目;服务器tomcat缓存,清理tomcat文件夹下work-catalina文件夹的内容)。实在不行,重启本地电脑。重启服务器server。

请各位同学一定要先自行排查问题,如果还无法解决问题,或者你遇到过其他bug情况,欢迎留言,我会及时更新到文章,以便帮助更多人解决签名错误的问题。ღ( ´・ᴗ・` )比心

------------------分割线-------------------

签名方式是否真的正确?

----------2019年12月2日更新,感谢斌斌反馈----------

由于作者做支付是在2016年,辛辛苦苦整理了一份demo,一直沿用至今,忘记当时是否有官方sdk了,如果大家用的是官方sdkDemo,以上bug排查完,还是报签名错误,请检查签名方式,实际是MD5还是HMACSHA256。具体情况可以看这篇提问【JSAPI第二次签名到底什么机制?】

最后一次编辑于  2021-03-18  
点赞 14
收藏
评论

15 个评论

  • 阴天快乐,
    阴天快乐,
    2021-10-09

    补充一下,参数一定不能带特殊符号,- 这个也不行,我就是被这个坑的

    2021-10-09
    赞同 1
    回复 2
    • 阴天快乐,
      阴天快乐,
      2021-10-09
      中文一定要用ISO_8859_1这个编码。。。。 坑死我了
      2021-10-09
      1
      回复
    • 10032
      10032
      2022-08-31回复阴天快乐,
      英雄
      2022-08-31
      回复
  • 陈久胜
    陈久胜
    2021-03-22

    2021-03-22
    赞同 1
    回复 1
  • VBit
    VBit
    2020-08-01

    追加,如果用官方的demo记得各项签名时的参数,排查一下,是否签名前是否所有额字符串拼接都正确,特别是key,记得一定要根据官方的demo重写自己的支付,验证签名逻辑

    2020-08-01
    赞同 1
    回复 1
    • 圥忈
      圥忈
      2021-10-15
      我用的是官网的demo 改改参数,去访问那个实例的时候,说我签名错误 FAIL 我也搞不懂。
      2021-10-15
      回复
  • 小柴
    小柴
    2020-09-11

    支付,退款,查询,下单,都没有问题,唯独企业付款返回签名错误,咋解决?

    2020-09-11
    赞同 5
    回复 1
    • hedh
      hedh
      2022-04-20
      有解决没?我也遇到这种情况。唯独企业付款返回签名错误。
      2022-04-20
      回复
  • 测试名字是否显示
    测试名字是否显示
    2019-12-27

    你好,获取证书的接口 报签名错误 256 加密方式 工具已经通过,掉接口一直报错,参数什么的都检查没问题 签名也用UTF-8 了 不知道问题出在那里了。求指导

    2019-12-27
    赞同 3
    回复
  • 阿卜来提1952
    阿卜来提1952
    发表于移动端
    2021-07-17
    我就2万块钱。
    2021-07-17
    赞同 1
    回复
  • 阿卜来提1952
    阿卜来提1952
    发表于移动端
    2021-07-17
    我要借钱。
    2021-07-17
    赞同 1
    回复
  • 本王今年八岁
    本王今年八岁
    2020-07-22

    我遇到的问题是,核销事件回调通知,没有带签名,也没声明任何原因

    2020-07-22
    赞同 1
    回复
  • 悠然种豆南山下
    悠然种豆南山下
    10-14

    补充一下企业微信 付款到员工接口的一个坑点,两次签名的key/secret是不一样的,一个是普通微信的,一个是企业微信的。

    否则会报告签名错误。

    10-14
    赞同
    回复
  • hedh
    hedh
    2022-04-20

    支付,退款,查询,下单,都没有问题,唯独企业付款返回签名错误。

    这是啥问题? 难道这错误信息,有问题?

    抓包校验是没问题的。同样调用查询接口就没问题。

    https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=20_1


    2022-04-20
    赞同
    回复 1
    • Starfee
      Starfee
      10-26
      同样的问题也遇到了。
      10-26
      回复

正在加载...

登录 后发表内容