微信支付的入口是在微信商戶平臺(tái)中,從微信商戶平臺(tái)的開發(fā)文檔可以查看相關(guān)微信支付的文檔,但是官方文檔首頁居然木有小程序版本入口,所以單獨(dú)給一下小程序的文檔. 微信支付的開發(fā)分為刷卡支付、公眾號(hào)支付、掃碼支付、APP支付以及小程序支付。
小程序支付流程

1. 小程序端向服務(wù)端請(qǐng)求生成訂單
小程序端向服務(wù)端請(qǐng)求下單,服務(wù)端需要先針對(duì)小程序進(jìn)行用戶認(rèn)證,并生成內(nèi)部訂單。
2. 小程序端向服務(wù)端請(qǐng)求訂單支付
小程序端向服務(wù)端請(qǐng)求支付,服務(wù)端調(diào)用統(tǒng)一下單API,獲取prepay_id。
3. 服務(wù)端請(qǐng)求統(tǒng)一下單API
接口地址 :https://api.mch.weixin.qq.com/pay/unifiedorder
請(qǐng)求方式 :POST
是否需要證書: 否
請(qǐng)求參數(shù)(必填):
- 小程序ID(appid):可在公眾號(hào)配置頁面獲取
- 商戶號(hào)(mch_id):可以在微信商戶配置頁面獲取
- 隨機(jī)字符串(nonce_str):隨機(jī)字符串,32位
- 簽名(sign):可查看簽名生成算法
- 商品描述(body): 參考微信參數(shù)規(guī)定
- 商戶訂單號(hào)(out_trade_no): 服務(wù)端內(nèi)部生成的訂單號(hào)
- 總金額(total_fee):訂單實(shí)際總金額,切記單位是分
- 終端IP(spbill_create_ip): APP和網(wǎng)頁支付提交用戶端ip,Native支付填調(diào)用微信支付API的機(jī)器IP。
- 通知地址(notify_url):微信支付的通知結(jié)果是異步的,支付成功后,微信會(huì)回調(diào)此地址,不能攜帶參數(shù)。
- 交易類型(trade_type):小程序取值:JSAPI
返回結(jié)果
- return_code: 此字段表示通信是否成功,非交易是否成功, 取值:SUCCESS、FAIL
- return_msg: 返回的信息
- result_code: 此字段表示交易是否成功!取值:SUCCESS、FAIL
- err_code: 請(qǐng)求錯(cuò)誤代碼,詳見微信文檔。
- err_code_des: 錯(cuò)誤返回的信息描述
- trade_type: 交易類型,當(dāng)return_code和result_code都為SUCCESS時(shí)才返回
- prepay_id:預(yù)支付ID,下一步要用到的,有效期2小時(shí)。如果用戶在生成此id后取消支付,但是在2個(gè)小時(shí)內(nèi)重新支付時(shí)可以復(fù)用該id。 當(dāng)return_code和result_code都為SUCCESS時(shí)才返回。
4. 服務(wù)端再次生成簽名
當(dāng)拿到prepay_id后,服務(wù)端應(yīng)該馬上存儲(chǔ)起來,以便在2個(gè)小時(shí)內(nèi)都可以復(fù)用。然后接下來就是要再次簽名(安全!安全!安全!)。服務(wù)端將最終需要請(qǐng)求微信支付的參數(shù)返回給小程序。
返回參數(shù):
- appid:可在公眾號(hào)配置頁面獲取
- timeStamp: 時(shí)間戳,到秒為止,如果用java的朋友記得不要用毫秒,要截?cái)嘧詈笕?/li>
- nonceStr: 32位隨機(jī)數(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)接口
在小程序端支付成功后,微信會(huì)立即請(qǐng)求之前設(shè)置的回調(diào)地址,并且服務(wù)端返回應(yīng)答,流程才算結(jié)束, 詳見官方文檔.一般我們需要針對(duì)返回的金額和內(nèi)部訂單號(hào)進(jìn)行校驗(yàn),并且存儲(chǔ)微信支付訂單號(hào)等信息。