1. 程式人生 > >架構設計-支付寶、京東、美團、去哪兒的支付系統架構整體設計詳解!!!

架構設計-支付寶、京東、美團、去哪兒的支付系統架構整體設計詳解!!!

支付產品模組是按照支付場景來為業務方提供支付服務。這個模組一般位於支付閘道器之後,支付渠道之前。 它根據支付能力將不同的支付渠道封裝成統一的介面,通過支付閘道器來對外提供服務。所以,從微服務的角度,支付產品本身也是一個代理模式的微服務,它透過支付閘道器響應業務方請求, 進行一些統一處理後,分發到不同的支付渠道去執行,最後將執行結果做處理後,通過支付閘道器再回傳給業務方。

支付產品在支付系統參考架構圖中之位置,請看下圖所示:


產品分類


在不同的公司由於接入渠道和應用的差異,對支付產品分類略有不同。綜合支付場景和流程,支付產品可以分為如下幾類:


支付產品是由支付系統對支付渠道進行封裝而對業務方提供的支付能力。整體上來說,可以提供如下支付產品:

1. 快捷支付

使用者在完成綁卡之後,在支付的時候,不需要再輸入卡或者身份資訊,僅需要輸入支付密碼就可以完成支付。對於小額度的支付,甚至可以開通小額免密,直接完成支付。 這種支付方式不會打斷使用者的體驗,是目前主要的線上支付方式。一般快捷支付產品是通過封裝銀行或者第三方支付平臺提供的快捷支付介面或者代付介面來實現的。

2. 網銀支付

使用者在支付的時候,需要跳轉到銀行網銀頁面來完成支付。在網銀頁面,需要輸入使用者的卡號和身份資訊。這種支付方式會中斷使用者當前的體驗,一般僅用於PC Web上的支付。 網銀支付是封裝銀行提供的網銀支付來實現。

3. 協議支付

協議支付也稱代收或者代扣,代收指渠道授權商戶可以從使用者的銀行賬戶中扣款,一般用於定期扣款,不用於日常消費。比如水電煤氣、有線電視費。協議支付是通過封裝銀行、第三方支付提供的代扣或者快捷介面來實現。

4. 平臺支付

使用微信、支付寶等第三方支付平臺來完成支付。使用時,一般需要使用者預先安裝支付平臺系統(手機上),註冊並登入到第三方支付平臺,並且已經在該平臺上完成綁卡等操作。 由於微信、支付寶已經被大量使用,使用者也產生對這些平臺的信任,平臺支付往往是電商公司的主要支付方式。

5. 外卡支付

對於由海外支付的需求,還需要提供外卡支付支援。 國內不少支付渠道都能支援外卡支付,如支付寶全球購等。直接對接Paypal,也是目前用的最多的外卡支付渠道。 關於外卡支付,以後會有專文介紹。

6. 話費支付

對於有包月小額型別的支付,手機話費也是一個不錯的選擇。目前也有一些平臺可以支援話費支付,比如虹軟、聯動優勢等。

7. 虛幣支付

不少公司會有自己的虛擬幣,比如京豆、Q幣等。這些虛幣也可以作為一種支付方式。

8. 賬戶支付

也成為餘額支付、零錢支付等。 指為使用者建立本地賬戶, 支援充值,之後可以使用這個賬戶來完成支付。

9. 信用支付

如京東的白條,螞蟻花唄等,指使用信用賬戶進行透支,類似信用卡支付。

10. 代付

和代扣相反,代付是平臺將錢打給使用者。

每一種支付方式的詳細功能將在後續的各個章節中介紹。 這裡先簡要介紹支付產品模組的通用功能。

模組功能


支出產品根據其支付能力,對外提供不同的功能。整體上來說,一般支付產品需要提供如下介面:

1. 簽約和解約

在快捷支付、代扣等產品中,使用者在使用前,需要先完成簽約。簽約可以在渠道側進行,一般第三方支付採用這種方式,當電商需要接入時,讓第三方給授權。 銀行和銀聯的簽約一般是在電商側進行, 電商側負責收集使用者的資訊,呼叫銀行和銀聯的介面進行簽約。簽約後,後續的支付行為就使用簽約號來進行,無需再輸入個人資訊。 和簽約相對應,解約則是取消簽約關係。

2. 支付

支付是少不了的操作。 不同產品中支付行為不一樣。快捷支付是在電商伺服器上發起,請求渠道進行支付;網銀支付則是跳轉到銀行支付閘道器上進行; 而賬戶支付、虛幣支付,則是在本地進行的。

3. 撤銷和退款

有些渠道區分撤銷和退款,比如銀聯、農行等,撤銷指取消當天在渠道側未結算的交易; 而退款僅針對已經結算的交易。有些渠道則不作區分。

4. 查詢簽約狀態

對於需要簽約的交易,可以通過這個介面來查詢簽約狀態。

5. 查詢訂單狀態

通過這個介面來查詢支付清單狀態以及退款的訂單狀態。

6. 預授權

預授權交易用於受理方向持卡人的髮卡方確認交易許可。受理方將預估的消費金額作為預授權金額,傳送給持卡人的髮卡方。

7. 預授權撤銷

對已成功的預授權交易,在結算前使用預授權撤銷交易,通知髮卡方取消付款承諾。預授權撤銷交易必須是對原始預授權交易或追加預授權交易最終承兌金額的全額撤銷。

8. 預授權完成交易

對已批准的預授權交易,用預授權完成做支付結算。

9. 預授權完成撤銷

預授權完成撤銷交易必須是對原始預授權完成交易的全額撤銷。預授權完成撤銷後的預授權仍然有效。

10. 對賬

通過FTP或者HTTP方式提供對賬檔案供商戶側對賬。

11. 餘額查詢

查詢商戶的交易賬戶的餘額,避免由於餘額不足導致交易失敗。 注意,不是客戶的餘額。 當然,不是所有的銀行或者第三方支付都提供這個介面。

業務流程


上述操作,除了對賬、查單外,每個操作實現的主流程,一般會包括引數校驗,支付路由,生成訂單,風險評估,呼叫渠道服務,更新訂單和傳送訊息這7步,對於一些比較複雜的服務,還會涉及到非同步同通知處理的步驟。

1. 執行引數校驗

所有的支付操作,都需要對輸入執行引數校驗,避免介面受到***。

  • 驗證輸入引數中各欄位的有效性驗證,比如使用者ID,商戶ID,價格,返回地址等引數。

  • 驗證賬戶狀態。交易主體、交易對手等賬戶的狀態是處於可交易的狀態。

  • 驗證訂單:如果涉及到預單,還需要驗證訂單號的有效性,訂單狀態是未支付。為了避免使用者快取某個URL地址,還需要校驗下單時間和支付時間是否超過預定的間隔。

  • 驗證簽名。簽名也是為了防止支付介面被偽造。 一般簽名是使用分發給商戶的key來對輸入引數拼接成的字串做MD5 Hash或者RSA加密,然後作為一個引數隨其他引數一起提交到伺服器端。如支付閘道器設計所介紹,簽名驗證也可以在閘道器中統一完成。

2. 根據支付路由尋找合適的支付服務

根據使用者選擇的支付方式確定用來完成該操作的合適的支付渠道。使用者指定的支付方式不一定是最終的執行支付的渠道。比如使用者選擇通過工行信用卡來執行支付,但是我們沒有實現和工行的對接,而是可以通過第三方支付,比如支付寶、微信支付、易寶支付,或者銀聯來完成。那如何選擇合適的支付渠道,就通過支付路由來實現。支付路由會綜合考慮收費、渠道的可用性等因素來選擇最優方案。

3. 評估交易風險

檢查本次交易是否有風險。風控介面返回三種結果:阻斷交易、增強驗證和放行交易。

1) 阻斷交易,說明該交易是高風險的,需要終止,不執行第5個步驟;

2) 增強驗證,說明該交易有一定的風險,需要確認下是不是使用者本人在操作。這可以通過傳送簡訊驗證碼或者其他可以驗證使用者身份的方式來做校驗,驗證通過後,可以繼續執行該交易。

3) 放行交易,即本次交易是安全的,可以繼續往下走。

4. 生成交易訂單

將訂單資訊持久化到資料庫中。當訪問壓力大的時候,資料庫寫入會成為一個瓶頸。

5. 呼叫支付渠道提供的服務

所有的支付服務都需要第三方通道來完成執行。一般銀行渠道的呼叫比較簡單,可以直接返回結果。一些第三方支付,支付寶,微信支付等,會通過非同步介面來告知支付結果。

6. 更新訂單

對於同步返回的結果,需要在主執行緒中更新訂單的狀態,標記是支付成功還是失敗。對於非同步返回的渠道,需要在非同步程式中處理。

7. 傳送訊息

通過訊息來通知相關係統關於訂單的變更。風控,信用BI等,都需要依賴這資料做準實時計算。

8. 非同步通知

如上述流程,其中涉及到呼叫遠端介面,其延遲不可控。如果呼叫方一直阻塞等待,很容易超時。引入非同步通知機制,可以讓呼叫方在主執行緒中儘快返回,通過非同步執行緒來得到支付結果。對於通過非同步來獲取支付結果的渠道介面,也需要對應的在非同步通知中將結果返回給呼叫方。 非同步通知需要呼叫方提供一個回撥地址,一般以http或者https的方式。這就有技術風險,如果呼叫失敗,還需要重試。而重試不能過於頻繁,需要逐步拉大每一次重試的時間間隔。 在非同步處理程式中,訂單根據處理結果變更狀態後,也要發訊息通知相關係統。


支付系統架構整體設計


每個公司根據其業務和公司發展的不同階段,所設計的支付系統也會有所不同。我們先看看網際網路公司的一些典型的支付系統架構。

支付寶


我們先看看業內最強的支付寶系統。架構圖如下:

相關推薦

即時物流的分散式系統架構設計

本文根據美團資深技術專家宋斌在ArchSummit架構師峰會上的演講整理而成。 背景 美團外賣已經發展了五年,即時物流探索也經歷了3年多的時間,業務從零孵化到初具規模,在整個過程中積累了一些分散式高併發系統的建設經驗。最主要的收穫包括兩點: 即時物流業務對故障和高延遲的容忍度極低,在業

Java架構-即時物流的分散式系統架構設計

背景 美團外賣已經發展了五年,即時物流探索也經歷了 3 年多的時間,業務從零孵化到初具規模,在整個過程中積累了一些分散式高併發系統的建設經驗。最主要的收穫包括兩點: 即時物流業務對故障和高延遲的容忍度極低,在業務複雜度提升的同時也要求系統具備分散式、可擴充套件、可容災的能力。即時

【好文分享】即時物流的分散式系統架構設計

文章概要   美團外賣已經發展了五年,即時物流探索也經歷了 3 年多的時間,業務從零孵化到初具規模,在整個過程中積累了一些分散式高併發系統的建設經驗。最主要的收穫包括兩點: 即時物流業務對故障和高延遲的容忍度極低,在業務複雜度提升的同時也要求系統具備分散式、可擴充套件、

【備戰春招/秋招系列】Java面經總結終結篇 (附答案)

該文已加入開源專案:JavaGuide(一份涵蓋大部分Java程式設計師所需要掌握的核心知識的文件類專案,Star 數接近 14 k)。地址:github.com/Snailclimb/…. 系列文章: 【備戰春招/秋招系列1】程式設計師的簡歷就該這樣寫 【備戰春招/秋招系列2】初出茅

架構設計-支付京東哪兒支付系統架構整體設計

支付產品模組是按照支付場景來為業務方提供支付服務。這個模組一般位於支付閘道器之後,支付渠道之前。 它根據支付能力將不同的支付渠道封裝成統一的介面,通過支付閘道器來對外提供服務。所以,從微服務的角度,支付產品本身也是一個代理模式的微服務,它透過支付閘道器響應業務方請求, 進行一些統一處理後,分發到不同

支付開放平臺創建應用用戶授權及應用授權

htm 基礎 業務 day word tin 如果 comment from 學習 · 分享 銀盒子技術團隊分享平臺 支付寶開放平臺創建應用、用戶授權及應用授權 支付寶開放平臺創建應用、用戶授權及應用授權 一、創建應用 1、登錄螞蟻金服開放平臺(o

最全BAT演算法面試130題:阿里百度騰訊京東今日頭條

【百度、阿里、騰訊、京東、美團、今日頭條】等公司都會必考關於演算法的面試題目,今天總結演算法和題目如下: 演算法基礎: 第一:複雜度估算和排序演算法(上) 1) 時間複雜度和空間複雜度 2)認識對數器 3)氣泡排序 4)選擇排序 5)插入排序 6)如何

2018的初冬阿里京東滴滴面試

最近有很多朋友去目前主流的大型網際網路公司面試(阿里巴巴、京東、美團、滴滴),面試回來之後會發給我一些面試題。有些朋友輕鬆過關,拿到offer,但是有一些是來詢問我答案的。 我特意整理了一下,有很多問題不是靠幾句話能講清楚,所以乾脆找朋友錄製了一些視訊,用來回來這些面試題。很多問題其實答案很簡單

【小程式社群】小程式社群提供微信小程式和支付寶小程式相關的資訊開發教程開發指南小程式DEMO等資源。小程式開發社群是國內微信小程式和支付寶小程式開發的領先社群,這裡有最新的功能最全的DEMO最多的教程和最

小程式社群 小程式社群提供微信小程式和支付寶小程式相關的資訊、開發教程、開發指南、小程式DEMO等資源。小程式開發社群是國內微信小程式和支付寶小程式開發的領先社群,這裡有最新的功能、最全的DEMO、最多的教程和最...

2018的初冬,派臥底阿里京東滴滴帶回來的面試題及答案

最近有很多朋友去目前主流的大型網際網路公司面試(阿里巴巴、京東、美團、滴滴),面試回來之後會發給我一些面試題。有些朋友輕鬆過關,拿到offer,但是有一些是來詢問我答案的。   我特意整理了一下,有很多問題不是靠幾句話能講清楚,所以乾脆找朋友錄製了一些視訊,用來回來這些面試題。很多問題其實

2018的初冬,派臥底阿裏京東滴滴帶回來的面試題及答案

zookeep 高並發 來看 class 分布式 title 美團 height 幾句話 最近有很多朋友去目前主流的大型互聯網公司面試(阿裏巴巴、京東、美團、滴滴),面試回來之後會發給我一些面試題。有些朋友輕松過關,拿到offer,但是有一些是來詢問我答案的。 我特意整

最新大型網際網路公司面試(阿里巴巴京東滴滴)試題

大型網際網路公司面試(阿里巴巴、京東、美團、滴滴),面試回來之後會發給我一些面試題。有些朋友輕鬆過關,拿到offer,但是有一些是來詢問我答案的。我特意整理了一下,有很多問題不是靠幾句話能講清楚,所以乾脆找朋友錄製了一些視訊,用來回來這些面試題。很多問題其實答案很簡單,但是背

滴滴阿里京東的 Dubbo / JVM / Spring 面試題及答案(1)

一、阿里巴巴面試題 二、京東面試題 三、美團面試題 四、滴滴面試題 五、總結 目前網際網路公司面試考點為: 1.效能調優、演算法資料機構 2.高併發下資料安全、介面冪等性、原子性等 3.分散式下協同、已經鎖的處理 4.資料庫

支付小程式灰度測試版本回滾能力新上線

小程式又有一新能力上線啦~ 為了讓開發者們靈活管理小程式版本,減少小程式新版本釋出時出現缺陷對線上使用者體驗造成影響,開發者在釋出新版時,可先進行灰度測試。 同時可逐步擴大灰度範圍,當灰度測試

仿微信支付等簡潔的驗證碼密碼輸入框。

簡潔驗證碼輸入框,能自定義輸入框個數和樣式。How to use<com.dalimao.corelibrary.VerificationCodeInput android:layout_width="wrap_content" android:layout_height

自定義動畫下拉重新整理,可仿京東

效果 功能 支援ListView,RecycleView,ScrollView,WebView 一行程式碼指定是否支援上拉載入,下拉重新整理 自由定製重新整理時頭部和尾部的動畫效果 使用方式 首先,是引入庫 compile 'com.reoo

利用支付的團隊編寫的 HttpProtocolHandler StringRequestEntity 呼叫微信 支付引發的 body不是UTF8編碼的

HttpProtocolHandler 程式碼修改後的程式碼如下 package com.whb.common.util.httpclient; import java.io.File; import java.io.IOException; import java

Android 支付收益(折線)圖收益圖

話不多說,先上圖 最近看了一個博文,個人覺得不錯,大家能在開發中獲取會用到這樣的東西,所以我把這位大神的文章給貼上過來,希望這個大哥看見之後,不要見怪哈!這是他的部落格地址 http://blog.csdn.net/xiangzhihong8/arti

最全BAT演算法面試100題:阿里百度騰訊京東今日頭條

第一:複雜度估算和排序演算法(上) 1) 時間複雜度和空間複雜度 2)認識對數器 3)氣泡排序 4)選擇排序 5)插入

最全BAT算法面試100題:阿裏百度騰訊京東今日頭條

分享 下一個 向量 估算 解決 重復數 後繼 最全 find 第一:復雜度估算和排序算法(上)1) 時間復雜度和空間復雜度 2)認識對數器 3)冒泡排序 4)選擇排序 5)插入排序 6)如何分析遞歸過程的時間復雜度 7)歸並排序 8)小和問題 第二:復雜度估算和排序算法(下