使用的是Node.js作為后端
統一下單:
appid:這里的appid是調起微信支付的appid
mch_id:商戶號,需要注意的是商戶號要與appid對應
nonce_str:Math.random().toString(36).substr(2)這是我的隨機字符串的生成算法
sign:這里的簽名是第一次簽名,后面還會講到第二次簽名,主要注意點如下:
1.首先要把需要傳遞請求參數使用key1=value&key2=value2的形式進行拼接也就是統一下單文檔上的參數,除去sign
2.所拼接的字符串的屬性名的順序,必須按照ASCII碼(字典序)進行排序
3.在最后拼接上使用的key,這里的key指的是商戶平台設置的API秘鑰>>>>微信商戶平台(pay.weixin.qq.com)-->賬戶設置-->API安全-->密鑰設置
4.進行MD5簽名或者HMAC-SHA256簽名方式,這里使用到的是MD5的方式
5.最后需要需要轉換成大寫
sign_type:簽名方式,要與使用的簽名方式一直
spbill_create_ip:這里的ip網上有人說隨便填,但是我在嘗試時候使用了127.0.0.1返回的數據中數ip錯誤,所以使用了網絡的真實ip,這里使用到了http://ip-api.com/json
trade_type:這里使用JSAPI,需要在商戶平台進行開通
openid:用戶在商戶appid下的唯一標識 獲取方式請參考小程序API wx.login和code2Session,其中appid,secret應該對應
最后請求參數生成完畢之后需要傳遞一個XML文件到服務器這里使用到了xml2js
一般請求失敗后可以先檢查請求數據格式是否正確,再檢查參數順序以及key是否對應
wx.requestPayment(Object object)調起微信支付
timeStamp:當前的時間戳單位秒
package:這里的形式是prepay_id=***這里的prepay_id是統一下單成功后返回的數據結果
signType:簽名方式
paySign:這里是簽名也就是前面所說的二次簽名這里的簽名包含參數有appId(注意這里跟一次簽名的屬性不同I為大寫)傳遞參數不用,但是必須參與簽名,之后就是
