- 注意事項:
- (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支付或者公眾號支付一樣的