前言
很久以來,一直想寫一篇支付有關的總結文檔;一方面是總結自己的一些心得,另一方面也可以協助別人,但是因種種原因未能完全理解透徹支付的幾大支付方式,今天有幸做一些總結上的文章,也趁此機會,將一年多以來的相關經驗分享一下。
概述
1. 掃碼支付
商戶在pc端展示一個支付二維碼,使用者使用掃一掃功能,掃碼後實現付款的支付方式。
2. 公眾號支付
商戶在APP內(瀏覽器)開啟H5網頁,通過支付實現付款的支付方式。
3. H5支付
商戶在瀏覽器以外的手機瀏覽器開啟H5網頁,通過支付實現付款的支付方式。
4. 小程式支付
商戶在小程式內,通過支付實現付款功能的支付方式。
開發前準備
第一步,登入到商戶平台設定相關參數配置
首先到商戶平台申請一個企業帳號,並開通支付,設定好相應的公眾號支付、掃碼支付、H5支付的相關參數配置。
其中,公眾號支付需要設定JSAPI支付授權目錄,且最多隻能設定5個;
掃碼支付需要設定掃碼回調連結,既使用者通過掃碼支付完畢後回調到商戶的頁面連結;
H5支付則需要設定安全支付網域名稱即可。
第二步,引入官方SDK
官方提供了一套Java、.NET、PHP等三個版本的開發SDK;我目前使用的是.NET,因此只需要下載.NTE的SDK即可。
地址: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. 向商戶後台發送非同步通知的同時,會向預先在商戶平台設定的回調地址發起跳轉,商戶需在回調地址中擷取相關參數並進行業務處理,一旦得知訂單狀態是已付款狀態,則跳轉至相應支付成功介面。
詳細說明請看支付官方開發文檔:
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發起頁面擷取回調的資訊,請求資料庫擷取訂單狀態,並進行支付成功或失敗對應的頁面跳轉。
詳細說明請看支付官方開發文檔:
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. 商戶後台在支付發起頁或回調頁面接收回調的資訊,請求資料庫擷取訂單狀態,並進行支付成功或失敗對應的頁面跳轉。
詳細說明請看支付官方開發文檔:
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.小程式擷取支付回調結果,並向商戶後台發起介面請求,擷取訂單狀態;並進行支付成功或失敗對應的頁面跳轉。
詳細說明請看支付官方開發文檔:
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支付、小程式支付等的四中支付方式做了一個大概的分析和總結,具體的每一個支付方式的接入方法還請以支付開發文檔為重要參考;因篇幅有限,代碼量大,這裡就不貼具體的實現代碼了。
參考文檔:
掃碼支付:pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1
公眾號支付:pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
H5支付:pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1
小程式支付:pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1
如有發現錯誤及解釋不當之處,歡迎大家指正。
請註明本文出處:www.cnblogs.com/luckyyang/p/9509631.html