從零打造聚合支付系統 二 建立領域模型

2021-09-20 01:10:00 字數 2788 閱讀 3867

從零打造聚合支付系統:一、**聚合支付的核心價值

從零打造聚合支付系統:二、建立領域模型

從零打造聚合支付系統:三、應用微服務架構

在針對特定業務進行分析設計時,首要的事情便是建立業務模型(又稱領域模型)。

領域模型,通常是業務人員與軟體工程師溝通的橋梁。

為了避免陷入專業名詞的泥沼中,我並不打算運用嚴格的領域模型語言來描述聚合支付系統的分析設計。儘管如此,但建模的思路的做法依然重要。

關於領域建模的重要性及基本原則,eric evans大神在《領域驅動設計——軟體核心複雜性應對之道》一書中有詳細闡述,有興趣的小夥伴可以閱讀的第一部分。

聚合支付系統位於商戶與支付機構或銀行之間,收斂商戶與支付機構及銀行間的一切互動。

乙個聚合支付系統,首先要具備支付、查詢、退款三個基本功能,對應使用者使用支付的三種基本操作;其次,為了確保各方交易記錄一致,通常要以天為單位對賬,實現業務閉環;最後,根據對賬結果,定期完成資金結算。

建立乙個最小的聚合支付系統,至少應具備以下三個模組(或子系統):

由上面圖可以看出,支付和退款是由商戶主動發起的。商戶呼叫介面時,實際上傳送的是訂單資訊(涉及支付的資訊),聚合支付系統為其生成相應的支付資訊和退款資訊。

支付資訊:支付流水號,支付金額,支付結果,結算日期;

退款資訊:退款流水號,退款金額,退款結果,結算日期;

退款資訊中包含退款金額,是由於實際支付中存在部分退款的需求(比如購買兩件東西有一件退款)

為了吸引更多的商戶接入,努力讓商戶接入變得更簡單。做乙個產品歷來有less is more的設計原則。所以在設計支付流程時,應盡可能讓流程看起來簡單易懂。

比如ping++主頁上標語的,「七行**接入聚合支付」。這看起來非常有吸引力。

通過仔細研究,市面上常用的支付手段,其背後的流程,只有兩種。

與需要授權的原因相反,無需授權操作,是因為不需要在不同介面上來回跳轉。線下購物通常是如此。

查詢與退款由於完全是後台請求,因此流程相對來說則簡單些。

通常來說退款並不能立即確定成功或失敗,因此大部分機構都是採用非同步通知的方式告知退款結果。

聚合支付系統對賬有兩種模式,一種是由商戶主動上傳記錄的,另一種是商戶不上傳交易記錄。其差別如下。

對比項商戶上傳交易記錄

商戶不上傳交易記錄

對賬內容

將商戶交易記錄與支付機構的記錄進行比對

將聚合支付系統的交易記錄與支付機構的記錄進行比對

對賬範圍

可以比對成功交易與失敗交易

只能比對成功交易

適用商戶

有一定研發能力,且對一致性要求較高的大商戶

無研發能力或不願意投入開發成本的

其它可及時發現系統問題(如交易丟失、資訊錯誤等),但需要實現上傳記錄的介面,有後期投入的成本

全權委託聚合支付系統做對賬,不需要後期投入

根據監管部門要求,聚合支付通常要避免「二清」問題。即不允許聚合支付機構在沒有相應資質的前提下,先代商戶收錢,再將分給各個商戶。

資金結算要交給有相應資質的機構來完成,一般會委託給銀行來完成。

為了保證在銀行系統中各個賬戶中的結算金額可靠,遇到不一致時可追溯錯誤,因此,需要在對賬結算模組內建立一套虛擬賬戶體系,與銀行系統中的賬戶一一對應(做同步)。

關於如何建闕金融賬戶體系,可以參考此篇文章《金融結算系統的基礎業務之賬戶體系結構分析》

由於聚合支付系統並不是真的要建立一套完整的賬戶體系,其目的只是與外部系統的賬戶保持同步而己,因此,可將賬戶體系精簡如下。

圖中有如下要點:

至此,搭建乙個最小聚合支付系統的領域模型已經基本完成,以上的知識己經足夠乙個從未涉足支付領域的開發人員進行設計和開發了。

領域建模的精髓在於,模型本身是發展的,隨著對業務理解的深入和業務需求的變化, 模型也會隨之進行變更,逐漸變的完善。

與此同時,還要注意輸出模型要可落地。例如,以上的分析夾雜了一些面向對向分析的手法,因此不適合採非物件導向的語言來實現。

在後面的文章中,我會詳細地描述如何應用微服務架構將系統一步步實現,以及討論為什麼要使用微服務架構。請看下文。

mvc 從0打造自己的框架

入口檔案 定義常量 引入函式庫 自動載入類 啟動框架 路由解析 載入控制器 返回結果 01先從入口檔案開始 1 定義常量,當前框架的根目錄核心檔案在的目錄專案在的目錄define mvc realpath define core mvc.core 2 載入函式庫3 啟動框架02 自動載入類 當我們n...

從0打造自己的mvc框架2

2 4載入控制器 判斷控制器是否存在如果不存在就給出乙個提醒,如果存在就顯示控制器裡的內容 class indexcontroller extends core imooc 效果顯示 2 5模型類 與資料庫建立連線 首先建立乙個model類 namespace core lib class mode...

從0打造自己的mvc框架3 3 3 4

composer 的使用1.首先安裝composer 2.框架根目錄下建立 composer.json name ming php description php framework type framework keywords php php framework require reposito...