注意事项:
(1)如选择XML校验,XML需包含sign字段
(2)注意参数名需区分大小写,必须与文档的参数名大小写一致
Q:我调用小程序的微信支付api,一直报签名验证错误,参与签名的参数有timeStamp、nonceStr、package、signType。使用微信支付签名校验工具生成的签名跟我自己服务器生成的签名是一样的,但还是报签名错误。
A:appId不需要传入支付api,但是需要参与签名。
通过第三方服务器统一下单获得prepay_id,然后在小程序发起支付的时候提示“支付验证签名失败”,
appid,timeStamp,nonceStr,package,signType: 'MD5',paySign,一共有六个参数,签名是用前面五个参数生成的,和接口调试工具生成签名结果一致,请问一下这是神马情况
timeStamp 需要是string 类型,对应的秒数,如果取值是毫秒,需要 / 1000;
paySign签名前需要拼接API密钥 key=XXXX
已经好了,忘记填openid了,谢谢
发起支付时发生错误了。
参数都按要求传递了
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框架库
相关讨论:
[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);