微信支付之掃碼支付、公眾號(hào)支付、H5支付、小程序支付相關(guān)業(yè)務(wù)流程分析總結(jié)

微信支付之掃碼支付、公眾號(hào)支付、H5支付、小程序支付相關(guān)業(yè)務(wù)流程分析總結(jié)

前言

很久以來(lái),一直想寫(xiě)一篇微信支付有關(guān)的總結(jié)文檔;一方面是總結(jié)自己的一些心得,另一方面也可以幫助別人,但是因種種原因未能完全理解透徹微信支付的幾大支付方式,今天有幸做一些總結(jié)上的文章,也趁此機(jī)會(huì),將一年多以來(lái)的相關(guān)經(jīng)驗(yàn)分享一下。

概述

1. 掃碼支付

商戶(hù)在pc端展示一個(gè)支付二維碼,用戶(hù)使用微信掃一掃功能,掃碼后實(shí)現(xiàn)付款的支付方式。

2. 公眾號(hào)支付

商戶(hù)在微信APP內(nèi)(微信瀏覽器)打開(kāi)H5網(wǎng)頁(yè),通過(guò)微信支付實(shí)現(xiàn)付款的支付方式。

3. H5支付

商戶(hù)在微信瀏覽器以外的手機(jī)瀏覽器打開(kāi)H5網(wǎng)頁(yè),通過(guò)微信支付實(shí)現(xiàn)付款的支付方式。

4. 小程序支付

商戶(hù)在小程序內(nèi),通過(guò)微信支付實(shí)現(xiàn)付款功能的支付方式。

開(kāi)發(fā)前準(zhǔn)備

第一步,登錄到商戶(hù)平臺(tái)設(shè)置相關(guān)參數(shù)配置

首先到微信商戶(hù)平臺(tái)申請(qǐng)一個(gè)企業(yè)賬號(hào),并開(kāi)通微信支付,設(shè)置好相應(yīng)的公眾號(hào)支付、掃碼支付、H5支付的相關(guān)參數(shù)配置。

image
image

其中,公眾號(hào)支付需要設(shè)置JSAPI支付授權(quán)目錄,且最多只能設(shè)置5個(gè);

掃碼支付需要設(shè)置掃碼回調(diào)鏈接,既用戶(hù)通過(guò)掃碼支付完畢后微信回調(diào)到商戶(hù)的頁(yè)面鏈接;

H5支付則需要設(shè)置安全支付域名即可。

第二步,引入微信官方SDK

微信官方提供了一套Java、.NET、PHP等三個(gè)版本的開(kāi)發(fā)SDK;我目前使用的是.NET,因此只需要下載.NTE的SDK即可。

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

image

下載完以后,在Visual Studio中打開(kāi)項(xiàng)目,結(jié)構(gòu)如下:

image

文件夾example是一些封裝好的實(shí)例,lib跟business中的內(nèi)容是SDK的核心部分,因此需要將這兩個(gè)文件夾原樣復(fù)制到我們實(shí)際的開(kāi)發(fā)項(xiàng)目中:

image

業(yè)務(wù)流程

掃碼支付

1. 用戶(hù)下單,選擇微信支付;

2. 商戶(hù)后臺(tái)根據(jù)訂單信息,調(diào)用微信統(tǒng)一下單接口;

3. 統(tǒng)一下單接口返回預(yù)支付信息,商戶(hù)后臺(tái)將預(yù)支付信息通過(guò)技術(shù)手段生成二維碼圖片,并展示在網(wǎng)頁(yè)中;

4. 用戶(hù)使用微信掃碼進(jìn)行支付,輸入支付密碼;

5. 支付完成,微信后臺(tái)向商戶(hù)后臺(tái)發(fā)出異步通知;

6. 商戶(hù)后臺(tái)接收到微信的異步通知后,獲取相關(guān)參數(shù),進(jìn)行對(duì)應(yīng)的業(yè)務(wù)處理,如修改訂單狀態(tài),并返回SUCCESS或FAIL的標(biāo)志以告知微信。

7. 微信向商戶(hù)后臺(tái)發(fā)送異步通知的同時(shí),會(huì)向預(yù)先在商戶(hù)平臺(tái)設(shè)置的回調(diào)地址發(fā)起跳轉(zhuǎn),商戶(hù)需在回調(diào)地址中獲取相關(guān)參數(shù)并進(jìn)行業(yè)務(wù)處理,一旦得知訂單狀態(tài)是已付款狀態(tài),則跳轉(zhuǎn)至相應(yīng)支付成功界面。

詳細(xì)說(shuō)明請(qǐng)看微信支付官方開(kāi)發(fā)文檔:

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

公眾號(hào)支付

1. 用戶(hù)下單,選擇微信支付;

2. 商戶(hù)后臺(tái)根據(jù)訂單信息,調(diào)用微信統(tǒng)一下單接口;

3. 統(tǒng)一下單接口返回預(yù)支付信息,商戶(hù)后臺(tái)獲取預(yù)支付信息,并通過(guò)JSAPI發(fā)起支付請(qǐng)求,JSAPI調(diào)起微信支付;

4. 用戶(hù)輸入支付密碼,支付完成;

5. 微信后臺(tái)向商戶(hù)后臺(tái)發(fā)出異步通知,同時(shí)會(huì)在JSAPI發(fā)起頁(yè)面返回支付信息;

6. 商戶(hù)后臺(tái)收到微信的異步通知,進(jìn)行相關(guān)業(yè)務(wù)處理,并返回SUCCESS或FAIL的標(biāo)志以告知微信。

7. 商戶(hù)在JSAPI發(fā)起頁(yè)面獲取微信回調(diào)的信息,請(qǐng)求數(shù)據(jù)庫(kù)獲取訂單狀態(tài),并進(jìn)行支付成功或失敗對(duì)應(yīng)的頁(yè)面跳轉(zhuǎn)。

詳細(xì)說(shuō)明請(qǐng)看微信支付官方開(kāi)發(fā)文檔:

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

H5支付

1. 用戶(hù)下單,選擇微信支付;

2. 商戶(hù)后臺(tái)根據(jù)appid向微信獲取code參數(shù),再通過(guò)code參數(shù)向微信換取openid參數(shù);

3. 商戶(hù)后臺(tái)根據(jù)訂單信息,調(diào)用微信統(tǒng)一下單接口;

4. 統(tǒng)一下單接口返回預(yù)支付信息,商戶(hù)后臺(tái)獲取預(yù)支付信息中的mweb_url參數(shù),該參數(shù)是調(diào)起微信支付的URL,商戶(hù)后臺(tái)根據(jù)實(shí)際需要決定是否在該URL中增加支付完成后的回調(diào)頁(yè)面地址,然后跳轉(zhuǎn)至該URL,即可調(diào)起微信支付。

5. 用戶(hù)輸入支付密碼,支付完成。

6. 微信后臺(tái)向商戶(hù)后臺(tái)發(fā)出異步通知,并跳轉(zhuǎn)至支付發(fā)起頁(yè)或回調(diào)頁(yè);

7. 商戶(hù)后臺(tái)在支付發(fā)起頁(yè)或回調(diào)頁(yè)面接收微信回調(diào)的信息,請(qǐng)求數(shù)據(jù)庫(kù)獲取訂單狀態(tài),并進(jìn)行支付成功或失敗對(duì)應(yīng)的頁(yè)面跳轉(zhuǎn)。

詳細(xì)說(shuō)明請(qǐng)看微信支付官方開(kāi)發(fā)文檔:

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

小程序支付

1. 用戶(hù)在小程序內(nèi)下單,選擇微信支付;

2. 商戶(hù)在小程序中調(diào)用小程序登錄API,獲得參數(shù)code;

3. 小程序端向商戶(hù)后臺(tái)發(fā)起接口調(diào)用,并將code及訂單相關(guān)參數(shù)一起發(fā)送到商戶(hù)后臺(tái)。

4. 商戶(hù)后臺(tái)接收小程序發(fā)送的code和訂單相關(guān)參數(shù),并結(jié)合appid,secret兩個(gè)參數(shù),獲取openid;

5. 商戶(hù)后臺(tái)根據(jù)訂單信息,調(diào)用統(tǒng)一下單接口;

6. 統(tǒng)一下單接口返回預(yù)支付信息,商戶(hù)后臺(tái)獲取預(yù)支付信息,并進(jìn)行再次簽名,返回支付參數(shù)(5個(gè)參數(shù)和sign)給小程序;

7. 小程序獲得支付參數(shù),發(fā)起支付請(qǐng)求;

8. 用戶(hù)輸入支付密碼,支付完成;

9. 微信后臺(tái)向商戶(hù)后臺(tái)發(fā)出異步通知,同時(shí)給小程序回調(diào)支付結(jié)果;

10.商戶(hù)后臺(tái)接收微信發(fā)送到異步通知,并進(jìn)行相關(guān)業(yè)務(wù)處理,并返回SUCCESS或FAIL的標(biāo)志以告知微信;

11.小程序獲取支付回調(diào)結(jié)果,并向商戶(hù)后臺(tái)發(fā)起接口請(qǐng)求,獲取訂單狀態(tài);并進(jìn)行支付成功或失敗對(duì)應(yīng)的頁(yè)面跳轉(zhuǎn)。

詳細(xì)說(shuō)明請(qǐng)看微信支付官方開(kāi)發(fā)文檔:

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

業(yè)務(wù)流程圖

image

分析和總結(jié)

掃碼支付、公眾號(hào)支付、H5支付、小程序支付都有一個(gè)同步回調(diào)地址跟異步通知地址,只是設(shè)置方式有所區(qū)別 :

1. 掃碼支付

同步回調(diào)地址在微信商戶(hù)平臺(tái)中設(shè)置,異步通知地址在統(tǒng)一下單接口的請(qǐng)求參數(shù)中設(shè)置;

2. 公眾號(hào)支付

同步回調(diào)地址在JSAPI發(fā)起支付的回到函數(shù)中進(jìn)行回到,異步通知地址在統(tǒng)一下單接口的請(qǐng)求參數(shù)中設(shè)置;

3. H5支付

同步回調(diào)地址:在統(tǒng)一下單接口的返回參數(shù)中有一個(gè)參數(shù)mweb_url,在mweb_url中以get傳參形式新增一個(gè)參數(shù)redirect_url,redirect_url即是同步回調(diào)函數(shù);

異步通知地址:統(tǒng)一下單接口的請(qǐng)求參數(shù)中設(shè)置;

4. 小程序支付

同步回調(diào)地址:在小程序獲得支付參數(shù),并通過(guò)js調(diào)起微信支付以后,js中會(huì)有一個(gè)回調(diào)函數(shù),同步回調(diào)地址在該回調(diào)函數(shù)中添加;

異步通知地址:統(tǒng)一下單接口的請(qǐng)求參數(shù)中設(shè)置。

其中掃碼支付主要用于電腦端;公眾號(hào)支付跟H5支付主要用于移動(dòng)端,因此商戶(hù)在移動(dòng)端使用微信支付的時(shí)候需要判斷當(dāng)前打開(kāi)的瀏覽器是否是微信瀏覽器,并根據(jù)結(jié)果決定選擇公眾號(hào)支付或H5支付;小程序支付的話(huà)主要用于小程序內(nèi)部,因此比如獲取openid,調(diào)用統(tǒng)一下單接口等操作均在給小程序提供數(shù)據(jù)接口服務(wù)的接口后臺(tái)實(shí)現(xiàn)。

同步回調(diào)地址是作為微信后臺(tái)跟商戶(hù)進(jìn)行頁(yè)面跳轉(zhuǎn)的渠道,因此同步回調(diào)地址是至關(guān)重要的,如果不填寫(xiě),則可能導(dǎo)致支付完成后無(wú)法做頁(yè)面跳轉(zhuǎn)。

異步通知地址是微信后臺(tái)對(duì)商戶(hù)后臺(tái)在完成微信支付后進(jìn)行通知的重要通道,商戶(hù)后臺(tái)的異步通知地址必須是可訪(fǎng)問(wèn)的,在接收到微信的通知后,要做相關(guān)業(yè)務(wù)處理,并最終返回SUCCESS或FAIL的標(biāo)識(shí)給微信,以告知微信不要在發(fā)送通知。

結(jié)尾

這里只是針對(duì)微信掃碼支付、公眾號(hào)支付、H5支付、小程序支付等微信的四中支付方式做了一個(gè)大概的分析和總結(jié),具體的每一個(gè)支付方式的接入方法還請(qǐng)以微信支付開(kāi)發(fā)文檔為重要參考;因篇幅有限,代碼量大,這里就不貼具體的實(shí)現(xiàn)代碼了。

參考文檔:

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

微信公眾號(hào)支付: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

如有發(fā)現(xiàn)錯(cuò)誤及解釋不當(dāng)之處,歡迎大家指正。

轉(zhuǎn)載請(qǐng)注明本文出處:https://www.cnblogs.com/luckyyang/p/9509631.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容