微信支付的入口是在微信商戶平臺中蒋腮,從微信商戶平臺的開發(fā)文檔可以查看相關(guān)微信支付的文檔玖喘,但是官方文檔首頁居然木有小程序版本入口戈次,所以單獨給一下小程序的文檔. 微信支付的開發(fā)分為刷卡支付蔑歌、公眾號支付碌上、掃碼支付、APP支付以及小程序支付顷蟀。
小程序支付流程
1. 小程序端向服務(wù)端請求生成訂單
小程序端向服務(wù)端請求下單酒请,服務(wù)端需要先針對小程序進行用戶認證,并生成內(nèi)部訂單鸣个。
2. 小程序端向服務(wù)端請求訂單支付
小程序端向服務(wù)端請求支付羞反,服務(wù)端調(diào)用統(tǒng)一下單API,獲取prepay_id囤萤。
3. 服務(wù)端請求統(tǒng)一下單API
接口地址 :https://api.mch.weixin.qq.com/pay/unifiedorder
請求方式 :POST
是否需要證書: 否
請求參數(shù)(必填):
- 小程序ID(appid):可在公眾號配置頁面獲取
- 商戶號(mch_id):可以在微信商戶配置頁面獲取
- 隨機字符串(nonce_str):隨機字符串昼窗,32位
- 簽名(sign):可查看簽名生成算法
- 商品描述(body): 參考微信參數(shù)規(guī)定
- 商戶訂單號(out_trade_no): 服務(wù)端內(nèi)部生成的訂單號
- 總金額(total_fee):訂單實際總金額,切記單位是分
- 終端IP(spbill_create_ip): APP和網(wǎng)頁支付提交用戶端ip涛舍,Native支付填調(diào)用微信支付API的機器IP澄惊。
- 通知地址(notify_url):微信支付的通知結(jié)果是異步的,支付成功后,微信會回調(diào)此地址掸驱,不能攜帶參數(shù)肛搬。
- 交易類型(trade_type):小程序取值:JSAPI
返回結(jié)果
- return_code: 此字段表示通信是否成功,非交易是否成功毕贼, 取值:SUCCESS温赔、FAIL
- return_msg: 返回的信息
- result_code: 此字段表示交易是否成功!取值:SUCCESS鬼癣、FAIL
- err_code: 請求錯誤代碼陶贼,詳見微信文檔。
- err_code_des: 錯誤返回的信息描述
- trade_type: 交易類型待秃,當return_code和result_code都為SUCCESS時才返回
- prepay_id:預(yù)支付ID拜秧,下一步要用到的,有效期2小時章郁。如果用戶在生成此id后取消支付枉氮,但是在2個小時內(nèi)重新支付時可以復(fù)用該id。 當return_code和result_code都為SUCCESS時才返回驱犹。
4. 服務(wù)端再次生成簽名
當拿到prepay_id后嘲恍,服務(wù)端應(yīng)該馬上存儲起來,以便在2個小時內(nèi)都可以復(fù)用雄驹。然后接下來就是要再次簽名(安全!安全淹辞!安全医舆!)。服務(wù)端將最終需要請求微信支付的參數(shù)返回給小程序象缀。
返回參數(shù):
- appid:可在公眾號配置頁面獲取
- timeStamp: 時間戳蔬将,到秒為止,如果用java的朋友記得不要用毫秒央星,要截斷最后三位
- nonceStr: 32位隨機數(shù)
- package: prepay_id=xxxxx(上一步拿到的prepay_id)
- signType:MD5
- paySign: 重新生成的簽名
5. 小程序端向微信服務(wù)器發(fā)起支付
小程序在拿到服務(wù)端的參數(shù)后霞怀,調(diào)用wx.requestPayment(OBJECT)
發(fā)起支付。
6. 服務(wù)端接收支付回調(diào)接口
在小程序端支付成功后莉给,微信會立即請求之前設(shè)置的回調(diào)地址毙石,并且服務(wù)端返回應(yīng)答,流程才算結(jié)束, 詳見官方文檔.一般我們需要針對返回的金額和內(nèi)部訂單號進行校驗颓遏,并且存儲微信支付訂單號等信息徐矩。