1. 程式人生 > >支付流程簡單邏輯分析

支付流程簡單邏輯分析

常用的支付方式有:

1、支付寶支付

支付流程:

(1)先與支付寶簽約,獲取商戶id(partner)和賬號id(seller)

(2)下載相應的公私鑰檔案(加密簽名使用),在客戶端我們可能只需要私鑰

(3)下載支付寶sdk

(4)生成訂單資訊,可以直接客戶端或者自己服務端生存都可以,但是大多是服務端生存的。

(5)呼叫支付寶客戶端,有支付寶客戶端跟支付寶打交道

(6)支付完畢之後返回結果給客戶端和服務端。

2、微信支付

支付流程:

(1)註冊微信開放平臺,建立應用獲取appid,appSecret,申請支付功能,申請成功之後會返回一些引數詳情見圖

(2)下載微信支付sdk

(3)客戶端請求訂單,後臺與微信後臺互動,返回給客戶端支付引數;

(4)呼叫微信客戶端,由微信客戶端和微信伺服器打交道;

(5)客戶端和服務端都會收到支付結果;(前臺訊息不可靠,我們需要去後臺驗證,如果後臺沒有收到支付通知,後臺去微信伺服器驗證然後將結果返回給客戶端)

注意事項:

1)如果APP裡面已經使用了ShareSDK,就有一些地方要注意。不要再重複匯入微信的SDK,因為shareSDK裡面的extend已經包括了微信的SDK。

2)微信本身是鼓勵客戶APP把簽名演算法放到伺服器上面,這樣資訊就不容易被破解。但是如果客戶APP本身沒有伺服器端,或者認為不需要放到伺服器端,也可以直接把簽名(加密)的部分直接放在APP端。Sample程式碼的註釋有點亂,多次提到伺服器云云,但是其實可以不這麼做。

3、銀聯

支付流程:

(1)註冊申請就不是前端的事了,直接介入sdk

(2)從自己的服務端獲取流水號

(3)然後呼叫銀聯sdk,不用跳轉,銀聯sdk直接是內嵌的

(4)支付完成之後會回撥代理方法

4、內購

•請求有效的產品代號集合

•購買指定產品

•驗證購買

•恢復購買

常用的支付方式有:

1、支付寶支付

支付流程:

(1)先與支付寶簽約,獲取商戶id(partner)和賬號id(seller)

(2)下載相應的公私鑰檔案(加密簽名使用),在客戶端我們可能只需要私鑰

(3)下載支付寶sdk

(4)生成訂單資訊,可以直接客戶端或者自己服務端生存都可以,但是大多是服務端生存的。

(5)呼叫支付寶客戶端,有支付寶客戶端跟支付寶打交道

(6)支付完畢之後返回結果給客戶端和服務端。

2、微信支付

支付流程:

(1)註冊微信開放平臺,建立應用獲取appid,appSecret,申請支付功能,申請成功之後會返回一些引數詳情見圖

(2)下載微信支付sdk

(3)客戶端請求訂單,後臺與微信後臺互動,返回給客戶端支付引數;

(4)呼叫微信客戶端,由微信客戶端和微信伺服器打交道;

(5)客戶端和服務端都會收到支付結果;(前臺訊息不可靠,我們需要去後臺驗證,如果後臺沒有收到支付通知,後臺去微信伺服器驗證然後將結果返回給客戶端)

注意事項:

1)如果APP裡面已經使用了ShareSDK,就有一些地方要注意。不要再重複匯入微信的SDK,因為shareSDK裡面的extend已經包括了微信的SDK。

2)微信本身是鼓勵客戶APP把簽名演算法放到伺服器上面,這樣資訊就不容易被破解。但是如果客戶APP本身沒有伺服器端,或者認為不需要放到伺服器端,也可以直接把簽名(加密)的部分直接放在APP端。Sample程式碼的註釋有點亂,多次提到伺服器云云,但是其實可以不這麼做。

3、銀聯

支付流程:

(1)註冊申請就不是前端的事了,直接介入sdk

(2)從自己的服務端獲取流水號

(3)然後呼叫銀聯sdk,不用跳轉,銀聯sdk直接是內嵌的

(4)支付完成之後會回撥代理方法

支付功能-需要返回哪些引數

公共返回引數

result_code返回碼0為正常

result_msg返回資訊,OK為正常

err_detail具體錯誤資訊

id成功發起支付後返回支付表記錄

不同的支付方式的返回引數有些不同,可以到官方文件去看。

支付寶返回引數說明

1、支付寶的返回有兩種:return的客戶端返回,notify的伺服器通知返回。

支付完成後立刻返回到外部網站的客戶端上,是可見的,返回機制:以GET的方式返回

返回資訊包括提交給支付寶的訂單資訊,可根據這個返回資訊做相應的操作顯示給客戶看。

notify_url:伺服器的返回

伺服器的通知返回是由支付寶的伺服器發起,以POST的方式返回到合作伙伴的網站上。返回資訊包括提交給支付寶的訂單資訊,在返回的檔案中,需要輸出success做為支付寶通知返回資訊成功,若沒有這個success的輸出,那麼支付寶的伺服器會24小時內返回同樣的返回訊息,返回的時間頻率會逐漸減弱,(1分鐘、3分鐘、5分鐘、10分鐘、15。。。。。。。。。。)

notify_url頁面中只能做對資料庫的業務操作

建議:return_url和notify_url可以都設定,前者做資料顯示,後者做更新資料庫

2、 注意的地方,每種返回都是有一個sign和mysign的驗證,作用,驗證引數是否有效和是否是支付寶發出的訊息。還有一個交易狀態的判斷:trade_status是判斷交易狀態是否成功,例如:

返回狀態:

trade_status = "WAIT_BUYER_PAY"等待買家付款

trade_status = "WAIT_SELLER_SEND_GOODS"買家付款,等待買家發貨

trade_status = "WAIT_BUYER_CONFIRM_GOODS"賣家付款,等待買家確認

rade_status = "TRADE_FINISHED"交易完成

基本上會有以上幾種重要的交易狀體需要判斷,還有一些詳細:請以支付寶介面文件為主,當然不是每種介面都有這些交易狀態,虛擬的即時到帳介面是不存在買賣雙方確認的環節的。

service      =   "create_direct_pay_by_user"即時到帳介面的服務名稱

service      =   "trade_create_by_buyer"標準實務雙介面服務名稱

HAS_NO_PRIVILEGE出現這個樣的錯誤,請注意您說開通的介面許可權是否是以上兩種,或者在您整合的介面中是否有用您與支付寶簽約後的ID和key

4.支付的安全處理;

(1)請求基於https

(2)可多次進行資料加密

關於支付方面安全的處理不用我們去管,具體的安全問題是由支付寶、微信等支付三方的自己內部去做的。