支付「收銀台」系統功能邊界應該怎樣定義?
最近在設計電商網站的支付平台,規劃將支付平台分為收銀台、支付交易、對賬結算、運營管理等服務,其中對收銀台的系統功能邊界不是很清晰。
我原來的理解,收銀台只是作為支付的入口,只包含收銀頁面和支付交易發起前的一些基本校驗。但一位第三方支付的同學的意見是,收銀台對接商戶端,本身不僅須要記錄支付流水,後續也是根據這一塊的流水跟商戶進行對賬清算;支付交易系統對接銀行或其它第三方,有單獨的交易流水,後續用來與銀行對賬清算。 基於第二種理解,如何保證收銀台流水和支付交易系統的交易一致性?如果要支持組合支付(類似於用支付寶餘額+銀行卡購買商品)的場景,下面哪種系統交互設計比較合適?1)客戶確認支付後,收銀台分兩次調用支付交易系統的介面;
2)由支付交易系統封裝組合支付介面;
個人覺得你對「收銀台」的職責理解沒錯。電商網站收銀台是C端用戶支付付款的交互入口(對其他場景用戶可能是B端用戶,例如線下POS收銀員),其作用主要包括(這裡不局限於線上,還包括線下):
1、支付方式選擇:例如微信/支付寶等第三方線上支付、掃碼支付、預付費卡、銀行卡刷卡、會員積分、現金、卡券(優惠券/代金券/禮品券)等
2、會員及優惠信息:包括會員優惠(涉及會員身份確認方式,線上相對容易,線下形式比較多)、促銷活動(現金減免、價格折扣、積分扣減、享受贈品)等形式。
3、金額核算:包括商品數量、價格、總價格、優惠減免金額、減免後需支付金額
4、業務校驗:重點為對摺扣優惠金額、實際支付金額、會員/卡券有效性、會員身份有效性進行校驗
5、支付前訂單確認
一個典型的支付系統包括:
1、支付網關:主要職責是負責接收商戶端的接入及交易請求。收銀台可以作為支付網關一部分,但並不是所有的支付都有收銀台,典型場景為:a、商戶通過伺服器對伺服器的方式直連發起支付請求,收銀台在商戶端;b、代扣類業務;
2、交易系統
3、賬務系統
4、多渠道路由
5、支付渠道網關
6、對賬/清結算
7、風控
8、運營平台、商戶/用戶自助服務平台
9、其他支撐平台
在以上系統中,交易系統是核心,包括驅動賬戶系統記賬、對商戶側的支付請求處理、對上游渠道側的支付請求,都涉及交易系統。看具體設計邏輯,一種方案是用統一的交易系統來處理,另外一種方案是每一個系統有獨立的交易處理模塊(例如對商戶側的、對上游渠道側),個人更傾向於統一的交易系統方案。不論採用哪種設計,最基本的設計原則:對上游或下游的每一次請求,都應當有對應的單獨交易流水,以便於交易回溯、完整性檢查、對賬。
因此你同事的觀點也沒錯,對商戶端、上游渠道都有對應的交易流水訂單,以便於上下游對賬。只不過一般而言,收銀台和交易系統最好分離開。
由於涉及多個系統,分散式事務導致多個系統間的狀態一致性成了大問題,因此一定要有平衡檢查機制來保證內部系統間狀態的一致性,否則對上下游對賬會出現諸多問題。
要保證交易一致性,前一陣有個相關回答,談了一些設計實現原則 https://www.zhihu.com/question/54662446/answer/140793441 ,供參考。
在具體實現上,除了在設計、實現時候要遵循以上原則外,還有一些補救的方案:
1、實時監控程序:對涉及多個系統間的狀態進行實時監測及告警,保證狀態不一致導致的訂單能夠實時發現。
2、內部系統間對賬:在日切時候,類似於賬戶系統的平衡檢查,按照業務系統邏輯,對訂單完整生命周期的狀態、金額、勾稽關係等進行檢查,同時系統間參照上下游對賬邏輯進行對賬。
如果要支持組合支付,強烈建議採用第二種方案,原因有幾個:
1、減少系統間多次交互導致的狀態不一致等問題
2、單一職責原則(SRP:Single responsibility principle):組合支付不單純只是簡單的訂單拆分,還涉及支付手續費計算、退款/退貨、交易補單等邏輯,這些都是典型的交易系統的職責
我支持你的看法,收銀台在設計中,應該更多的考慮是面向用戶端的各種支付方式、優惠、折扣、訂單信息匯總等等,都是面向C端的,設計的核心在於讓用戶能夠快捷、方便、清晰的完成交易,收銀台的設計考核核心是訂單支付率。
至於對賬等業務邏輯是後台邏輯,更多面向的是B端(包括銀行、支付機構、商戶等等),其設計思想更多的是「別出錯」
從產品的角度,兩個模塊的設計要點和需求差異很大,攪在一起反而那個都做不好。
至於一致性的問題,也就是支付中最重要的冥等原則,相關的資料比較多了,但在實際的開發實現中,所有的產品和開發都口口聲聲要做好冥等設計,但幾乎所有公司說起來都是血淚汪汪...
組合支付在我的腦袋中幾乎成了薛定諤的那隻貓,一旦出現組合支付就頭大的要死,組合支付的麻煩不在支付的過程中,而在後續對賬、退單等等差錯處理中,所以,嘿嘿,我給的建議,除了促銷的優惠券之類的,盡量別做組合支付最靠譜:)
用戶通過網銀支付,從發起支付請求到收銀成功,基本的流程是這樣
1、商戶系統發送支付請求到支付交易網關;
2、支付系統做鑒權、交易有效性檢查、風控;
3、系統根據用戶業務場景展示收銀台;
4、用戶在收銀台選擇支付渠道(如果用戶選擇通過網銀支付);
5、用戶輸入卡號、密碼支付;
6、支付成功,返回同步非同步信息;
從上面的描述看,收銀台模塊有三大部分功能:
a、接收交易網關的交易請求;
b、根絕業務場景生成收銀台並展示;
c、向渠道網關發送支付請求;
推薦閱讀:
※如何設計一套完整的訂單系統,或者完整的業務流程?
※為什麼蘋果 App Store 中國區的支付合作夥伴選擇首信易?
※支付行業里二清是指什麼?第三方機構不能接二清嗎?
※互聯網金融App年度成績單出爐:2017,我們的錢都去哪兒了?