微信支付流程

流程:

支付

上圖的網(wǎng)址為:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4

如上圖所示,微信網(wǎng)頁支付的具體流程大致分為三個部分,最重要的是第一和第二部分:

  1. 第一部分:用戶進入網(wǎng)頁
    • 用戶點擊消息、鏈接或者掃描二維碼,進入商品界面(即觸發(fā)網(wǎng)頁的window.onload事件的時候)。
    • 網(wǎng)頁產(chǎn)生支付請求至商戶服務(wù)器,支付服務(wù)器先產(chǎn)生商戶訂單,然后調(diào)用 統(tǒng)一下單API,向微信服務(wù)器發(fā)送請求。
    • 商戶服務(wù)器接收到微信服務(wù)器對統(tǒng)一下單API的響應(yīng)后,提取出參數(shù)prepay_id,并根據(jù)算法(后面會提到)生成支付簽名,然后將prepay_id和支付簽名作為上一步支付請求的響應(yīng)數(shù)據(jù)返回給客戶端,客戶端 緩存此數(shù)據(jù) 。
  2. 第二部分:用戶發(fā)起請求,服務(wù)器響應(yīng)
    • 用戶在商品界面中點擊支付按鈕后,根據(jù)第一部分取到的數(shù)據(jù)和商品數(shù)據(jù)調(diào)用jsapi接口(至微信服務(wù)器)請求支付,微信支付服務(wù)器對請求進行驗證并響應(yīng),這個過程中,微信客戶端顯示“微信支付”的動畫。
    • 如果上一步的請求驗證通過,此時微信客戶端會彈出密碼輸入對話框,讓用戶輸入密碼。
    • 用戶輸入密碼點擊支付后,微信客戶端提交支付授權(quán)。
    • 微信客戶端對支付授權(quán)進行驗證,并將結(jié)果 同時發(fā)送 至用戶客戶端和商戶服務(wù)器。其中微信服務(wù)器發(fā)送至商戶服務(wù)器的通知url在第一部分的統(tǒng)一下單接口中由商戶指定。
    • 商戶服務(wù)器對上一步收到的結(jié)果進行處理,并響應(yīng)。客戶端也會收到微信支付結(jié)果的模板消息。

注意: 第二部分和商戶的服務(wù)器沒有任何交互。

  1. 第三部分
    • 微信跳轉(zhuǎn)回商戶的H5頁面。
    • 商戶網(wǎng)頁調(diào)用請求查詢訂單結(jié)果。

具體的實現(xiàn)方案

上面的介紹詳細(xì)解釋了微信支付的流程,那么根據(jù)此流程,我們就可以分別對微信網(wǎng)頁支付設(shè)計前端和后端的實現(xiàn)方案。

我們可以看到,上面的支付流程中有一點不是很合理的地方:就是每進入一次網(wǎng)頁就請求一次支付接口,產(chǎn)生一個訂單。因為很多時候,用戶打開網(wǎng)頁并不會點擊購買產(chǎn)生實質(zhì)的支付請求。這樣會無故消耗不少服務(wù)器資源,特別是對于高并發(fā)網(wǎng)站來說。