微信支付流程
流程:
上圖的網(wǎng)址為:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
如上圖所示,微信網(wǎng)頁(yè)支付的具體流程大致分為三個(gè)部分,最重要的是第一和第二部分:
-
第一部分:用戶進(jìn)入網(wǎng)頁(yè)
- 用戶點(diǎn)擊消息、鏈接或者掃描二維碼,進(jìn)入商品界面(即觸發(fā)網(wǎng)頁(yè)的window.onload事件的時(shí)候)。
- 網(wǎng)頁(yè)產(chǎn)生支付請(qǐng)求至商戶服務(wù)器,支付服務(wù)器先產(chǎn)生商戶訂單,然后調(diào)用 統(tǒng)一下單API,向微信服務(wù)器發(fā)送請(qǐng)求。
- 商戶服務(wù)器接收到微信服務(wù)器對(duì)統(tǒng)一下單API的響應(yīng)后,提取出參數(shù)prepay_id,并根據(jù)算法(后面會(huì)提到)生成支付簽名,然后將prepay_id和支付簽名作為上一步支付請(qǐng)求的響應(yīng)數(shù)據(jù)返回給客戶端,客戶端 緩存此數(shù)據(jù) 。
-
第二部分:用戶發(fā)起請(qǐng)求,服務(wù)器響應(yīng)
- 用戶在商品界面中點(diǎn)擊支付按鈕后,根據(jù)第一部分取到的數(shù)據(jù)和商品數(shù)據(jù)調(diào)用jsapi接口(至微信服務(wù)器)請(qǐng)求支付,微信支付服務(wù)器對(duì)請(qǐng)求進(jìn)行驗(yàn)證并響應(yīng),這個(gè)過(guò)程中,微信客戶端顯示“微信支付”的動(dòng)畫(huà)。
- 如果上一步的請(qǐng)求驗(yàn)證通過(guò),此時(shí)微信客戶端會(huì)彈出密碼輸入對(duì)話框,讓用戶輸入密碼。
- 用戶輸入密碼點(diǎn)擊支付后,微信客戶端提交支付授權(quán)。
- 微信客戶端對(duì)支付授權(quán)進(jìn)行驗(yàn)證,并將結(jié)果 同時(shí)發(fā)送 至用戶客戶端和商戶服務(wù)器。其中微信服務(wù)器發(fā)送至商戶服務(wù)器的通知url在第一部分的統(tǒng)一下單接口中由商戶指定。
- 商戶服務(wù)器對(duì)上一步收到的結(jié)果進(jìn)行處理,并響應(yīng)??蛻舳艘矔?huì)收到微信支付結(jié)果的模板消息。
注意: 第二部分和商戶的服務(wù)器沒(méi)有任何交互。
-
第三部分
- 微信跳轉(zhuǎn)回商戶的H5頁(yè)面。
- 商戶網(wǎng)頁(yè)調(diào)用請(qǐng)求查詢訂單結(jié)果。
具體的實(shí)現(xiàn)方案
上面的介紹詳細(xì)解釋了微信支付的流程,那么根據(jù)此流程,我們就可以分別對(duì)微信網(wǎng)頁(yè)支付設(shè)計(jì)前端和后端的實(shí)現(xiàn)方案。
我們可以看到,上面的支付流程中有一點(diǎn)不是很合理的地方:就是每進(jìn)入一次網(wǎng)頁(yè)就請(qǐng)求一次支付接口,產(chǎn)生一個(gè)訂單。因?yàn)楹芏鄷r(shí)候,用戶打開(kāi)網(wǎng)頁(yè)并不會(huì)點(diǎn)擊購(gòu)買產(chǎn)生實(shí)質(zhì)的支付請(qǐng)求。這樣會(huì)無(wú)故消耗不少服務(wù)器資源,特別是對(duì)于高并發(fā)網(wǎng)站來(lái)說(shuō)。