使用的是Node.js作為後端 統一下單: appid:這裡的appid是調起微信支付的appid mch_id:商戶號,需要註意的是商戶號要與appid對應 nonce_str:Math.random().toString(36).substr(2)這是我的隨機字元串的生成演算法 sign:這裡的簽 ...
使用的是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為大寫)傳遞參數不用,但是必須參與簽名,之後就是
nonceStr,package=prepay_id=(這裡註意需要加上prepay_id=),signType,timeStamp,還有一個key,這是商戶的API秘鑰,需要參與簽名(之前坑在這裡),小程式調用支付API ,其他註意事項與第一次簽名方式一致