首先,聊一下我我的對於交易支付系統的理解,從用戶的角度來講,交易支付是密不可分的行爲,可是對於系統來講,交易支付應該是兩個系統,有些系統建設時,甚至是沒有交易系統的,直接由業務系統調用本地支付模塊,或者第三方支付完成支付。這種設計在流量不大的狀況,可能沒什麼問題,可是隨着公司業務發展、規模擴大,這種方式無疑不利於後期的系統維護和擴展。而交易系統自己做爲一個底層系統,應該統一抽象出完整的交易能力,供公司其餘業務調用。統一業務收口,通常由交易系統、或者是收單系統負責,這裏插一句,收單指的簽約銀行向商戶提供的本外幣資金結算服務,這裏的收單是一個泛指含義。收單系統和交易系統的區別是,收單更多的是關注業務上的要素,而交易系統則更多去關心交易這件事。工具
下圖是我本身XJB畫的,0.0 ...加密
總體上看的話,一個完整的交易支付體系,包含了三個層次:設計
上面是整個交易支付系統的相關組件,不一樣的業務能夠根據本身不一樣的業務來進行相應調整,可是核心系統不可或缺:3d
面向支付業務的話:交易核心、收銀臺、支付核心、渠道網關cdn
面向資金業務:帳務系統、清結算系統、會計系統等blog
其餘還會有一些基礎組件,在此再也不贅述。開發
這邊會重點介紹一下支付業務相關的基礎組件(由於本人一直從事這方面相關開發),後續也會介紹一些資金相關的系統建設(我會盡可能去了解哈~)。it
首先先說交易系統,交易系統對外提供交易能力,大的交易能力能夠抽象爲:充值、轉帳、提現、退款,四種大的交易類型下,又能夠區分出不一樣的子交易類型,具體和業務相關聯。抽象出交易能力的好處是,將業務和交易剝離,我就見過在交易邏輯中耦合大量業務邏輯的系統,不只代碼維護起來十分的困難,並且也不便於後期擴展,從領域設計的角度來講,交易域更關心交易相關的要素,而對外屏蔽業務相關。這樣的好處是:面對於頻發性的業務改動,交易系統始終提供統一的交易能力,能夠適配各個業務的擴展。io
同時,爲了交易數據總體的關聯,建議統一訂單模型抽象,整條鏈路關聯到一個交易單上,該交易單全鏈路惟一,而且能關聯到全部的交易、支付、用戶等信息。這樣就初步搭建起一個交易系統。class