收藏
回答

云开发 + 微信支付 + 签名失败的问题

用的官方的示例 :https://github.com/TencentCloudBase/tcb-demo-basic/tree/master/cloud


这一段,我把数据打印出来:



返回的结果是:


这里的 sign 是 86DD0E877BDE8B370D37763F2736A9E1


然后我去官方的签名验证工具,输入数据:
返回的 sign:


sign=83A31AA0E87932DC6AC592DF7FB47D1A



按照这个结果来看,可能是后端返回的值有错误,然后我重置了 商户后台的 KEY ,两次……


并且,我专门用错误的 商户key,会直接提示错误,根本不会进入到sign哪里,一开始初始化就不会成功。


值都是一样的,库用的官方的

const {

WXPay,

WXPayConstants,

WXPayUtil

} = require('wx-js-utils')


我想请问一下 ,还有什么可能?




我依稀感觉应该是 后台的问题,因为我用同样的 key 数据等等,在别人的平台下是能支付成功的。绝对可以排除appid 、key错误这些问题了。



求解怎么破?


补充说明:

参数不含有中文,妥妥的。

const body = 'aaa'

const total_fee = 1



最后一次编辑于  05-30  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

2 个回答

  • 小东江
    小东江
    05-30

    补充:换了一种方式,支付成功了。 应该还是官方示例有问题。具体什么问题就不知道了,嗯

    05-30
    赞同 1
    回复 2
    • 青藤
      青藤
      06-29

      咨询一下,你用了什么方式

      06-29
      回复
    • 青藤
      青藤
      06-30

      其实官方的demo是对的,签名也是那样签名的,就是返回值中

      restData里有一个sign字段,将你的签名字段给替换了,签名变量换个名称就行了,比如paySIgn

      06-30
      回复
  • 微信支付技术助手4
    微信支付技术助手4
    05-30

    1) 使用微信的在线签名工具检查签名是否和程序生成的一致

    https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1 签名工具用谷歌打开。

    选择MD5,XML,然后把请求参数xml放进去,就能校验签名

    2)如果和微信的在线签名工具一致,说明程序没有错误,确定是API密钥错误(被别人改动或者记错了)

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

    2.1)统一下单用的是A商户号,也必须是A商户号登陆商户平台设置key才对。

    2.2)要注意统一下单请求参数中total_fee参数的类型是int类型。

    3) 如果和微信的在线签名工具不一致,说明程序有错误,常见的错误可能是:

    3.1) 编码问题,确保所有的都是utf-8的. 如果有中文, 可以先把中文改成英文重新签名,看是否签名错误,如果英文不会错中文才会错,基本肯定是编码问题

    3.2:)消息中字段大小写和文档中完全一致

    4 统一下单和调起支付签名类型需要一致。

    5)参数的类型和格式,长度限制需要完全符合文档的要求

    05-30
    赞同
    回复 1
    • 小东江
      小东江
      05-30

      只会复制粘贴么……


      我上面都说了是官方的示例。要错也是tcb给的wx-untl-js有错。用别的方案就能通过,就别再质疑别人大小写、数字类型的问题了吧。

      05-30
      回复