用的官方的示例 :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
补充:换了一种方式,支付成功了。 应该还是官方示例有问题。具体什么问题就不知道了,嗯
咨询一下,你用了什么方式
其实官方的demo是对的,签名也是那样签名的,就是返回值中
restData里有一个sign字段,将你的签名字段给替换了,签名变量换个名称就行了,比如paySIgn
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)参数的类型和格式,长度限制需要完全符合文档的要求
只会复制粘贴么……
我上面都说了是官方的示例。要错也是tcb给的wx-untl-js有错。用别的方案就能通过,就别再质疑别人大小写、数字类型的问题了吧。