- 注意事項(xiàng):
- (1)如選擇XML校驗(yàn),XML需包含sign字段
- (2)注意參數(shù)名需區(qū)分大小寫,必須與文檔的參數(shù)名大小寫一致
timeStamp 需要是string 類型,對(duì)應(yīng)的秒數(shù),如果取值是毫秒,需要 / 1000;
paySign簽名前需要拼接API密鑰 key=XXXX
已經(jīng)好了,忘記填openid了,謝謝

sign沒有加appId
以下希望對(duì)各位有所幫助
微信支付簽名失敗這個(gè)提示,是出于前臺(tái)JSAPI調(diào)起返回的簽名失敗
微信支付簽字錯(cuò)誤這個(gè)提示,是出于微信支付統(tǒng)一下單API調(diào)起是返回的簽名錯(cuò)誤
小程序支付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){
}
})
|
這里請(qǐng)求的參數(shù)有 timeStamp,nonceStr,package,signType,paySign
跟公眾號(hào)支付調(diào)起的方式少了個(gè) appId
微信小程序也是用心良苦啊,其實(shí)我們?cè)谧?signType簽名的時(shí)候,一定要在后臺(tái)加上 appid
signType的加密方式是這樣的,請(qǐng)看以下代碼
string strTimeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");
string strNonceStr = System.Guid.NewGuid().ToString().Replace("-", "");
string strPackage = "prepay_id=" + callback.prepay_id; //這個(gè)是統(tǒng)一下單返回的 callback.prepay_id
Dictionary<string, string> dic = new Dictionary<string, string>();
dic["package"] = strPackage;
dic["appId"] = “您的小程序appId”; //簽名時(shí)后臺(tái)一定要加上這個(gè)
dic["timeStamp"] = strTimeStamp;
dic["nonceStr"] = strNonceStr;
dic["signType"] = "MD5";
string strQuery = KeeSoft.Code.HashTable.DictionaryToQuery(dic);//這里將 timeStamp,nonceStr,package,signType,appId 將這些參數(shù)進(jìn)行ASCII碼從小到大排序,使用URL鍵值對(duì)的格式(即key1=value1&key2=value2…)拼接成字符串stringA
string strSign = KeeSoft.Code.DESEncrypt.WxMD5Encrypt(strQuery + "key=" + KeeSoft.WeChat.App.Config.Key).ToUpper();//將組成的URL鍵值對(duì)加上您的 商戶號(hào)里的 key,再進(jìn)行MD5加密,加密后轉(zhuǎn)成大寫
以上代碼出自KeeSoft框架庫
相關(guān)討論:
|
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);
|
基本都是參數(shù)問題導(dǎo)致的,一個(gè)參數(shù)大小寫,一個(gè)是參數(shù)順序,簽名校驗(yàn)工具只能校驗(yàn)出具體的數(shù)值結(jié)果,但是微信支付要求很嚴(yán)格的
在簽名工具哪里驗(yàn)證一下簽名和自己md5加密的簽名是否一致,如果不一致的情況,首先檢查參數(shù),然后檢查md5加密是不是沒有把字節(jié)轉(zhuǎn)成utf-8;也可以看看這個(gè)
解決了,前端接收參數(shù)時(shí),參數(shù)賦值的對(duì)應(yīng)關(guān)系弄錯(cuò)了。。。低級(jí)錯(cuò)誤啊。得出結(jié)論:總之這種錯(cuò)誤肯定就是提交的參數(shù)和簽名時(shí)的參數(shù)不一致的問題,還是要找參數(shù)的問題就ok了
|
1
2
3
4
|
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[簽名錯(cuò)誤]]></return_msg>
</xml>
|
注意,這里的密鑰是支付平臺(tái)中的客戶密鑰,不是公眾號(hào)的AppSecret(應(yīng)用密鑰)http://blog.csdn.net/kunga0814/article/details/51697384
商戶key是你微信支付配置的key
具體設(shè)置忘記了,好像是需要操作證書,就是之前的app支付或者公眾號(hào)支付一樣的