1.調用統一下單的接口URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder
2.調用統一下單必傳參數:
appid:需要進行支付功能的公眾號的appId
mch_id:微信分配的商戶號
nonce_str:隨機字符串,自己生成,要求在32位以內,微信官方文檔推薦方式是調用隨機數函數生成,將得到的值轉換為字符串,主要用於保證簽名不可測
sign:簽名,通過簽名算法生成,使用md5進行加密
body:商品描述,自定義,如對什么進行付款
out_trade_no:隨機單號,要求是32個字符內,只能是數字、大小寫字母_-|* 且在同一個商戶號下唯一
total_fee:支付的金額,注意是以分為單位
spbill_create_ip:客戶請求的地址
notify_url:你的回調地址
trade_type:交易類型,這里微信公眾號支付為:JSAPI
3.其他可能需要但是非必傳的參數:
sign_type:簽名類型,默認是md5,還支持HMAC-SHA256
attach:此參數可自行傳String類型的值,支付成功后微信會原樣返回
參考微信官方api文檔:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
4.調用統一下單之前先獲取sign簽名:
這里的generateSignature方法,只需要將傳過去的集合遍歷,按順序用字符串拼接好,再進行md5的加密即可
5.調用統一下單:
把前面包含了sign的集合轉成xml再用post的方式請求統一下單,返回統一下單的xml
<xml>
<appid>你的appId</appid>
<mch_id>你的商戶Id</mch_id>
<nonce_str>70beD14citQ9QVXReoS6o032S00pTUvW</nonce_str>
<sign>7223ADBF584548B313EEACA0E11F77ED</sign>
<body>測試付款</body>
<out_trade_no>1310433801201812119763998320</out_trade_no>
<total_fee>1</total_fee>
<spbill_create_ip>客戶請求的地址</spbill_create_ip>
<notify_url>回調地址</notify_url>
<trade_type>JSAPI</trade_type>
<attach>931</attach>
<openid>o4vANuJk1m7jSAwP67gqu6GMGSsA</openid>
</xml>
然后把返回的xml轉成集合傳到頁面用於喚起H5的支付,之后進行二次簽名,這個需要用appId,timeStamp,nonceStr,package,signType,paySign參數重新獲取簽名,這里注意在將xml轉map的時候,微信公布的XEE的漏洞,如果是使用微信支付的sdk,那只需要更新就行。
頁面喚起h5支付得代碼(直接使用微信文檔里面得,把值改成自己后台傳過來得值就行):
后續再寫微信瀏覽器外得H5支付......