服务商模式微信小程序支付签名失败,请求管理员和大牛解决!!!
根据服务商模式的微信小程序支付文档:
①商户server调用支付统一下单:
统一下单成功返回预付单:
order
appid"wx11aa86ff470f0e4f" // 服务商的appid
mch_id"1518613291" // 服务商的mch_id
nonce_str"3acnTtQYjSqgbZL8"
prepay_id"wx10155845519876977e1ceaa42184415093"
result_code"SUCCESS"
return_code"SUCCESS"
return_msg"OK"
sign"5EBF79C3D17140CF4946985C4E1C4A00B9472BB3DE5E30FD3546E0AB216BAA62"
sub_appid"wx7ba8336d4ed76238" // 特约商户号微信小程序的appid
sub_mch_id"1520123771" // 特约商户号
trade_type"JSAPI"
②商户server调用再次签名:
生成签名PHP代码:
$appId = $order['sub_appid']; // 特约商户微信小程序的appid:wx7ba8336d4ed76238
$nonceStr = $order['nonce_str']; // 随机串
$package = "prepay_id=".$order['prepay_id']; // 数据包
$signType = "MD5"; // 签名方式
$timeStamp = time(); // 时间戳
$key = "XXXXXXXXXXXXXXXXXXXXXXXX"; // 特约商户的密钥key
// 第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
$stringA = "appId=".$appId."&nonceStr=".$nonceStr."&package=".$package."&signType=".$signType."&timeStamp=".$timeStamp;
// 第二步:拼接API密钥
$stringSignTemp = $stringA ."&key=".$key;
// MD5签名方式
$sign = md5($stringSignTemp);
// 字符串所有字符转换为大写
$paySign = strtoupper($sign);
返回
timeStamp1544428725
nonceStr"3acnTtQYjSqgbZL8"
package"prepay_id=wx10155845519876977e1ceaa42184415093"
signType"MD5"
paySign"2A6BBEBE8B4DB46A9E6BB52233F77D2D"
③微信小程序调起支付API:
wx.requestPayment({
'timeStamp': "1544428725",
'nonceStr': "3acnTtQYjSqgbZL8",
'package': "prepay_id=wx10155845519876977e1ceaa42184415093",
'signType': "MD5",
'paySign': "2A6BBEBE8B4DB46A9E6BB52233F77D2D",
'success': function (res) {
console.log(res)
},
'fail': function (res) {
console.log(res)
},
'complete': function (res) {
console.log(res)
},
})
返回
{err_code: 2, err_desc: "支付验证签名失败", errMsg: "requestPayment:fail"}
微信小程序开发问题解答
微信小程序开发者回答:
1. $stringA = "appId=".$appId."&nonceStr=".$nonceStr."&package=".$package."&signType=".$signType."&timeStamp=".$timeStamp; 请从官网下载SDK参考签名过程, 这里appId一定是微信小程序的appid
2.密钥是服务商的密钥,不是子商户的
微信小程序开发者回答: 你好,首先可以用微信支付提供的签名校验工具对比下签名结果是否一致(工具地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1),如果一致大概率是你使用的密钥key错了,key可以前往微信商户平台--》api安全---》api密钥重新设置,注意保管好你的key,不要外泄哦!
微信小程序开发者回答:
后台计算:
timeStamp1544436564
nonceStr"4FE35B26E47D0666F15A4F10924AA915"
package"prepay_id=wx10180924407742977e1ceaa40822018777"
signType"HMAC-SHA256"
paySign"05FF63B2CF5F1B79D087AEBD025D9EE14BC8E25B16A5A548DBE6EA61BE240223"
使用签名校验工具(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1):
paySign结果都一样:05FF63B2CF5F1B79D087AEBD025D9EE14BC8E25B16A5A548DBE6EA61BE240223
哪位大牛可以解决,,,等待ING
微信小程序开发者回答:
这个问题很常见,特别是服务商模式下,任何一个字段不匹配就会报这个错。。。我们用的是 HMAC-SHA256 这种加密方式
本文网址:http://www.91bianli.com/weixinxiaochengxu/41192.html