微信支付之掃碼支付、公衆號支付、H5支付、小程序支付相關業務流程分析總結

前言php

好久以來,一直想寫一篇微信支付有關的總結文檔;一方面是總結本身的一些心得,另外一方面也能夠幫助別人,可是因種種緣由未能徹底理解透徹微信支付的幾大支付方式,今天有幸作一些總結上的文章,也趁此機會,將一年多以來的相關經驗分享一下。html

 

概述web

1. 掃碼支付數據庫

商戶在pc端展現一個支付二維碼,用戶使用微信掃一掃功能,掃碼後實現付款的支付方式。小程序

2. 公衆號支付微信小程序

商戶在微信APP內(微信瀏覽器)打開H5網頁,經過微信支付實現付款的支付方式。api

3. H5支付瀏覽器

商戶在微信瀏覽器之外的手機瀏覽器打開H5網頁,經過微信支付實現付款的支付方式。安全

4. 小程序支付微信

商戶在小程序內,經過微信支付實現付款功能的支付方式。

 

開發前準備

第一步,登陸到商戶平臺設置相關參數配置 

首先到微信商戶平臺申請一個企業帳號,並開通微信支付,設置好相應的公衆號支付、掃碼支付、H5支付的相關參數配置。

 

 

 

其中,公衆號支付須要設置JSAPI支付受權目錄,且最多隻能設置5個;

掃碼支付須要設置掃碼回調連接,既用戶經過掃碼支付完畢後微信回調到商戶的頁面連接;

H5支付則須要設置安全支付域名便可。

 

第二步,引入微信官方SDK

微信官方提供了一套Java、.NET、PHP等三個版本的開發SDK;我目前使用的是.NET,所以只須要下載.NTE的SDK便可。

地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 

下載完之後,在Visual Studio中打開項目,結構以下:

文件夾example是一些封裝好的實例,lib跟business中的內容是SDK的核心部分,所以須要將這兩個文件夾原樣複製到咱們實際的開發項目中:

 

 

 

業務流程

掃碼支付

1. 用戶下單,選擇微信支付;

2. 商戶後臺根據訂單信息,調用微信統一下單接口;

3. 統一下單接口返回預支付信息,商戶後臺將預支付信息經過技術手段生成二維碼圖片,並展現在網頁中;

4. 用戶使用微信掃碼進行支付,輸入支付密碼;

5. 支付完成,微信後臺向商戶後臺發出異步通知;

6. 商戶後臺接收到微信的異步通知後,獲取相關參數,進行對應的業務處理,如修改訂單狀態,並返回SUCCESS或FAIL的標誌以告知微信。

7. 微信向商戶後臺發送異步通知的同時,會向預先在商戶平臺設置的回調地址發起跳轉,商戶需在回調地址中獲取相關參數並進行業務處理,一旦得知訂單狀態是已付款狀態,則跳轉至相應支付成功界面。

詳細說明請看微信支付官方開發文檔:

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 

公衆號支付

1. 用戶下單,選擇微信支付;

2. 商戶後臺根據訂單信息,調用微信統一下單接口;

3. 統一下單接口返回預支付信息,商戶後臺獲取預支付信息,並經過JSAPI發起支付請求,JSAPI調起微信支付;

4. 用戶輸入支付密碼,支付完成;

5. 微信後臺向商戶後臺發出異步通知,同時會在JSAPI發起頁面返回支付信息;

6. 商戶後臺收到微信的異步通知,進行相關業務處理,並返回SUCCESS或FAIL的標誌以告知微信。

7. 商戶在JSAPI發起頁面獲取微信回調的信息,請求數據庫獲取訂單狀態,並進行支付成功或失敗對應的頁面跳轉。

詳細說明請看微信支付官方開發文檔:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 

 

H5支付

1. 用戶下單,選擇微信支付;

2. 商戶後臺根據appid向微信獲取code參數,再經過code參數向微信換取openid參數;

3. 商戶後臺根據訂單信息,調用微信統一下單接口;

4. 統一下單接口返回預支付信息,商戶後臺獲取預支付信息中的mweb_url參數,該參數是調起微信支付的URL,商戶後臺根據實際須要決定是否在該URL中增長支付完成後的回調頁面地址,而後跳轉至該URL,便可調起微信支付。

5. 用戶輸入支付密碼,支付完成。

6. 微信後臺向商戶後臺發出異步通知,並跳轉至支付發起頁或回調頁;

7. 商戶後臺在支付發起頁或回調頁面接收微信回調的信息,請求數據庫獲取訂單狀態,並進行支付成功或失敗對應的頁面跳轉。

詳細說明請看微信支付官方開發文檔:

https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1 

 

小程序支付

1. 用戶在小程序內下單,選擇微信支付;

2. 商戶在小程序中調用小程序登陸API,得到參數code;

3. 小程序端向商戶後臺發起接口調用,並將code及訂單相關參數一塊兒發送到商戶後臺。

4. 商戶後臺接收小程序發送的code和訂單相關參數,並結合appid,secret兩個參數,獲取openid;

5. 商戶後臺根據訂單信息,調用統一下單接口;

6. 統一下單接口返回預支付信息,商戶後臺獲取預支付信息,並進行再次簽名,返回支付參數(5個參數和sign)給小程序;

7. 小程序得到支付參數,發起支付請求;

8. 用戶輸入支付密碼,支付完成;

9. 微信後臺向商戶後臺發出異步通知,同時給小程序回調支付結果;

10.商戶後臺接收微信發送到異步通知,並進行相關業務處理,並返回SUCCESS或FAIL的標誌以告知微信;

11.小程序獲取支付回調結果,並向商戶後臺發起接口請求,獲取訂單狀態;並進行支付成功或失敗對應的頁面跳轉。

詳細說明請看微信支付官方開發文檔:

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1 

 

業務流程圖

 

分析和總結

 

掃碼支付、公衆號支付、H5支付、小程序支付都有一個同步回調地址跟異步通知地址,只是設置方式有所區別 :

1. 掃碼支付

同步回調地址在微信商戶平臺中設置,異步通知地址在統一下單接口的請求參數中設置;

2. 公衆號支付

同步回調地址在JSAPI發起支付的回到函數中進行回到,異步通知地址在統一下單接口的請求參數中設置;

3. H5支付

同步回調地址:在統一下單接口的返回參數中有一個參數mweb_url,在mweb_url中以get傳參形式新增一個參數redirect_url,redirect_url便是同步回調函數;

異步通知地址:統一下單接口的請求參數中設置;

4. 小程序支付

同步回調地址:在小程序得到支付參數,並經過js調起微信支付之後,js中會有一個回調函數,同步回調地址在該回調函數中添加;

異步通知地址:統一下單接口的請求參數中設置。

 

其中掃碼支付主要用於電腦端;公衆號支付跟H5支付主要用於移動端,所以商戶在移動端使用微信支付的時候須要判斷當前打開的瀏覽器是不是微信瀏覽器,並根據結果決定選擇公衆號支付或H5支付;小程序支付的話主要用於小程序內部,所以好比獲取openid,調用統一下單接口等操做均在給小程序提供數據接口服務的接口後臺實現。

 

同步回調地址是做爲微信後臺跟商戶進行頁面跳轉的渠道,所以同步回調地址是相當重要的,若是不填寫,則可能致使支付完成後沒法作頁面跳轉。

異步通知地址是微信後臺對商戶後臺在完成微信支付後進行通知的重要通道,商戶後臺的異步通知地址必須是可訪問的,在接收到微信的通知後,要作相關業務處理,並最終返回SUCCESS或FAIL的標識給微信,以告知微信不要在發送通知。

 

結尾

這裏只是針對微信掃碼支付、公衆號支付、H5支付、小程序支付等微信的四中支付方式作了一個大概的分析和總結,具體的每個支付方式的接入方法還請以微信支付開發文檔爲重要參考;因篇幅有限,代碼量大,這裏就不貼具體的實現代碼了。

 

參考文檔:

微信掃碼支付:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

微信公衆號支付:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

微信H5支付:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

微信小程序支付:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1

 

若有發現錯誤及解釋不當之處,歡迎你們指正。

 

轉載請註明本文出處:http://www.javashuo.com/article/p-cyzuvllg-hv.html 

相關文章
相關標籤/搜索