小程序模板网

[经验]跳坑《一百八十六》支付签名校验失败(签名错误)


  • 注意事项:
  • (1)如选择XML校验,XML需包含sign字段
  • (2)注意参数名需区分大小写,必须与文档的参数名大小写一致
     


Q:我调用小程序的微信支付api,一直报签名验证错误,参与签名的参数有timeStamp、nonceStr、package、signType。使用微信支付签名校验工具生成的签名跟我自己服务器生成的签名是一样的,但还是报签名错误。
A:appId不需要传入支付api,但是需要参与签名。


以下为全网的讨论,包括本站曾经的一些贴内的讨论:

相关讨论:
MD5加密中文的结果不一致
跳坑《四十七》微信小程序支付(微信支付签名错误)
跳坑《一百二十三》微信支付(微信小程序支付)

相关讨论:
有关于小程序支付接口问题
通过第三方服务器统一下单获得prepay_id,然后在小程序发起支付的时候提示“支付验证签名失败”,
appid,timeStamp,nonceStr,package,signType: 'MD5',paySign,一共有六个参数,签名是用前面五个参数生成的,和接口调试工具生成签名结果一致,请问一下这是神马情况
timeStamp 需要是string 类型,对应的秒数,如果取值是毫秒,需要 / 1000;

paySign签名前需要拼接API密钥 key=XXXX


相关讨论:
一直报微信支付签名错误 我之前微信公众号的支付都是成功的,用那一套代码做小程序的微信支付在统一下单时,就老是报微信支付签名错误了,三天了,实在找不到错误在哪了。有谁能够分享下心得吗,谢谢了!
已经好了,忘记填openid了,谢谢


相关讨论:
err_desc : "支付验证签名失败" err_code : "2"
发起支付时发生错误了。
参数都按要求传递了
sign没有加appId


相关讨论:
微信小程序支付失败 签名失败及签名错误的解析

以下希望对各位有所帮助

微信支付签名失败这个提示,是出于前台JSAPI调起返回的签名失败

微信支付签字错误这个提示,是出于微信支付统一下单API调起是返回的签名错误

小程序支付API

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
wx.requestPayment({
   'timeStamp': '',
   'nonceStr': '',
   'package': '',
   'signType': 'MD5',
   'paySign': '',
   'success':function(res){
   },
   'fail':function(res){
   }
})

这里请求的参数有 timeStamp,nonceStr,package,signType,paySign

跟公众号支付调起的方式少了个 appId

微信小程序也是用心良苦啊,其实我们在做 signType签名的时候,一定要在后台加上 appid

signType的加密方式是这样的,请看以下代码

string strTimeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");

string strNonceStr = System.Guid.NewGuid().ToString().Replace("-", "");

string strPackage = "prepay_id=" + callback.prepay_id; //这个是统一下单返回的 callback.prepay_id

Dictionary<string, string> dic = new Dictionary<string, string>();

dic["package"] = strPackage;
dic["appId"] = “您的小程序appId”; //签名时后台一定要加上这个
dic["timeStamp"] = strTimeStamp;
dic["nonceStr"] = strNonceStr;
dic["signType"] = "MD5";


string strQuery = KeeSoft.Code.HashTable.DictionaryToQuery(dic);//这里将 timeStamp,nonceStr,package,signType,appId 将这些参数进行ASCII码从小到大排序,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA

string strSign = KeeSoft.Code.DESEncrypt.WxMD5Encrypt(strQuery + "key=" + KeeSoft.WeChat.App.Config.Key).ToUpper();//将组成的URL键值对加上您的 商户号里的 key,再进行MD5加密,加密后转成大写

以上代码出自KeeSoft框架库

 

 

相关讨论:
支付相关。服务端二次签名需要的参数如下(java):
[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
String prepay_id = "你的prepay_id";
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
parameters.put("appId", appid);
parameters.put("timeStamp", timeStamp);
parameters.put("signType", signType);
parameters.put("nonceStr", nonce_str);
parameters.put("package","prepay_id="+prepay_id);


注意参数大小写,否则会出现验证签名失败,支付问题折腾了一天。。。




相关讨论:
微信小程序支付的时候报“支付验证签名失败"
调用支付微信支付接口一扫支付码就报“支付验证签名失败"
 
校验签名的时候是正确的
 
这里是调用支付的代码,有没有大神踩过坑的,求解答,万分感谢!

 

基本都是参数问题导致的,一个参数大小写,一个是参数顺序,签名校验工具只能校验出具体的数值结果,但是微信支付要求很严格的


相关讨论:
微信小程序支付提示“支付验证签名失败”
目前在做小程序的支付功能,在支付的时候提示“支付验证签名失败”。实用签名校验工具也没有发现问题。因为我这里之前用微信公众号申请过商户,所以这里小程序和微信公众号绑定的都是同一个商户,那么这时候APIkey时候一致?
 
在签名工具哪里验证一下签名和自己md5加密的签名是否一致,如果不一致的情况,首先检查参数,然后检查md5加密是不是没有把字节转成utf-8;也可以看看这个

相关讨论:
微信支付提示支付验证签名失败
我在做微信公众号支付开发  统一下单的prepay_id我已经正常取到了,但是在H5页面调起微信支付后始终返回  支付验证签名失败 ,但是
  我在签名校验工具中
生成的签名和我的也一致  ,实在不知道什么问题了,求帮助啊
 
解决了,前端接收参数时,参数赋值的对应关系弄错了。。。低级错误啊。得出结论:总之这种错误肯定就是提交的参数和签名时的参数不一致的问题,还是要找参数的问题就ok了


新增案例:  


新增案例:
请问一个支付商户号能同时给公众号和小程序用吗? 
我在测试统一下单接口,用公众号的appId和key就能调用成功,
换成了小程序的appId和key就报错:
[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
</xml>


这里的key说的就是签名最后追加的AppSecret。
感觉是不是这个key的问题,如果填入正确公众号的appId和错误的key,同样也会报这个错。

见鬼,小程序的appId和key可以成功调用这个接口
var l='https://api.weixin.qq.com/sns/jscode2session?appid='+d.appid+'&secret='+d.secret+'&js_code='+res.code+'&grant_type=authorization_code';

答:hjm 
注意,这里的密钥是支付平台中的客户密钥,不是公众号的AppSecret(应用密钥)
http://blog.csdn.net/kunga0814/article/details/51697384

新增案例:签名老是错误
商户key是你微信支付配置的key
需要证书吗
具体设置忘记了,好像是需要操作证书,就是之前的app支付或者公众号支付一样的
直接在小程序里面写,搞定了,谢谢


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/21890.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询