支付流程簡單邏輯分析
常用的支付方式有:
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)可多次進行資料加密
關於支付方面安全的處理不用我們去管,具體的安全問題是由支付寶、微信等支付三方的自己內部去做的。