- 注意事项:
- (1)如选择XML校验,XML需包含sign字段
- (2)注意参数名需区分大小写,必须与文档的参数名大小写一致
timeStamp 需要是string 类型,对应的秒数,如果取值是毫秒,需要 / 1000;
paySign签名前需要拼接API密钥 key=XXXX
已经好了,忘记填openid了,谢谢
sign没有加appId
以下希望对各位有所帮助
微信支付签名失败这个提示,是出于前台JSAPI调起返回的签名失败
微信支付签字错误这个提示,是出于微信支付统一下单API调起是返回的签名错误
小程序支付API
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框架库
相关讨论:
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);
|
基本都是参数问题导致的,一个参数大小写,一个是参数顺序,签名校验工具只能校验出具体的数值结果,但是微信支付要求很严格的
在签名工具哪里验证一下签名和自己md5加密的签名是否一致,如果不一致的情况,首先检查参数,然后检查md5加密是不是没有把字节转成utf-8;也可以看看这个
解决了,前端接收参数时,参数赋值的对应关系弄错了。。。低级错误啊。得出结论:总之这种错误肯定就是提交的参数和签名时的参数不一致的问题,还是要找参数的问题就ok了
1
2
3
4
|
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
</xml>
|
注意,这里的密钥是支付平台中的客户密钥,不是公众号的AppSecret(应用密钥)http://blog.csdn.net/kunga0814/article/details/51697384
商户key是你微信支付配置的key
具体设置忘记了,好像是需要操作证书,就是之前的app支付或者公众号支付一样的