支付渠道参数如何设计成路由化配置
轉載自??支付渠道參數如何設計成路由化配置
今天我們來探討在搭建支付系統時一個比較關鍵的問題:渠道參數路由化配置如何設計?
在開發支付系統的時候,我們經常會涉及到對接多個支付渠道,除常見的支付寶、微信外可能還會根據不同的業務場景對接很多其他的支付渠道,如apple pay、銀聯甚至一些海外支付渠道如Adyen、Stripe等。
此外,根據公司業務類型的擴展,以及業務范圍不斷向不同國家、區域的延伸,面臨法律、稅收、區域產業政策等不同因素的影響,同一個支付渠道也會根據業務類型、國家、區域等因素的不同而申請不同的支付商戶號以關聯不同的法律主體。
這些問題在公司發展的早期,業務比較簡單的情況下一般是不會遇見,但是一旦隨著公司業務的快速發展這些問題就會逐步顯現出來,而大多數創業公司在早期開發支付系統的時候是很少考慮這些問題的,一方面是時間成本問題,另外一方面也是初創公司真正擁有支付系統研發經驗的工程師比較稀缺,而前期的考慮不足往往也會造成后期支付系統在支撐業務快速發展的過程中顯得舉步維艱,維護成本及業務適配復雜度變得十分高昂。
?
那么上述情況會究竟造成什么樣的問題呢?
從上圖雜亂的關系圖中可以看到,不同的業務線擁有不同的業務,不同的業務及業務線在又擁有不同的支付方式以及不同的支付渠道商戶號,如果業務涉及海外,還會根據不同的國家在具體支付方式選擇上有不同的要求及規則。
而這樣的場景也并不是從公司初創開始就這么復雜,而是隨著業務發展日積月累產生的,在早期構建支付系統的時候如果不加以考慮,隨著業務的快速發展系統就會始終處于一個被動改造的境地,最終代碼中充斥著各種個性化邏輯場景,導致維護成本高昂且極容易出錯導致線上Bug,并且也會導致支付數據緯度混亂,影響對賬、清結算等其他系統邏輯。
那么怎么設計才能讓渠道管理更加具有擴展性呢?
?
業務模型的定義
根據上述因素,我們可以進行下抽象,具體來說各業務線對于支付平臺來說可以理解為商戶(Merchant),在對接支付系統的時候可以為不同的Merchant開通不同的支付商戶ID及接口對接參數;同一個業務線也會有不同的業務,而業務可能比較獨立也可能會與其其他業務存在交叉關系,為了更好的厘清關系,我們對同一個商戶下的不同業務設計成兩個維度:應用(App)、業務類型(BusiType)。
另外比較關鍵的概念就是渠道(Channel)了,可以為對接的不同支付渠道定義Channel編碼進行區分,根據渠道合作方式的不同,有些海外渠道也會存在子渠道(SubChannel)的情況,這種情況一般是主渠道提供技術接口,而具體不同的子渠道直接對Merchant進行資金清結算。
不同的渠道也會根據收單場景及不同的交易類型(TradeType),如支付、退款、轉賬、紅包等,提供不同的支付方式(PayMethod),這些支付方式在國內的情況主要是支付公司根據市場情況的不同而定義的特定支付產品,例如“支付寶App支付”針對移動端App應用的支付場景,“微信小程序支付”針對微信小程序應用的支付場景。
而海外支付渠道則可能會根據不同國家的業務發展情況而定,例如Adyen在香港具備本地收單資質,那么如果希望通過Adyen在香港開展業務,除了可以通過Visa/Master收單外,也可以對接Adyen的ideal(本地化收單)方式。
這里的情況不同渠道表現方式會有所不同,但從我們搭建支付系統的角度看,都可以統一定義為支付方式(PayMethod)。
采用上述幾個概念設計渠道參數配置規則,基本上就能確保支付系統在后續的發展過程中向上能夠優雅地適配業務發展的不同要求,向下可以從容擴展不同的渠道了。并且通過這些定義可以有效地區分支付數據的維度,使得后續的對賬清結算處理更加便捷。
考慮到海外情況及渠道接口版本升級問題,可以再加上國家(Country)、接口版本(Version)兩個要素。
?
配置模型設計
通過上述業務模型的定義,在系統實現時我們需要設計一套配置表,并在渠道對接編碼時按照配置邏輯進行接口參數路由動作,從而讓系統具備渠道管理的配置能力。
基于上述配置模型,我們就可以在業務與渠道參數配置上實現相對靈活的配置與路由了。假設,如果我們在完成微信渠道支付接口的對接并滿足了業務A的支付需求,如果業務B也需要采用微信進行支付,并且申請的是獨立于業務線A的支付商戶信息,那么此時我們只需要完成渠道參數配置表的配置,并且在開通業務線B商戶ID及應用ID后進行路由規則設置,系統即可完成支持,而不需要進行硬編碼的改造。
?
安全風險及其他
采用配置化方案設計,可以讓支付系統更好地適配后期業務發展帶來的復雜性,但是我們也需要考慮到操作風險,根據以往經驗,不受控的便捷往往會帶來危險,試想下如果因為配置錯誤,原本應該收到B賬戶的錢,被收到了A賬戶,而這兩個賬戶主體完全不同,這種情況不僅會導致資金問題、也會影響支付系統后面的邏輯,例如退款問題等。所以,我們在采用這樣方案的同時,也需要制定嚴格的操作規程,在配置系統上設計更為嚴格的審查流程。
此外,渠道參數屬于敏感信息,在配置上也需要采取必要數據安全措施(如加密),另外,因為這類參數是屬于低頻變更、高頻使用的配置數據,為了系統效率我們往往也采用緩存機制,做好緩存與持久層數據的一致性及緩存數據的安全性也至關重要。
?
后記
在支付系統設計的早期,如果我們能適度的對配置化模型加以考慮,雖然,會在一定程度上增加研發成本,但隨著業務發展,這種成本相較于后期對業務適配改造的成本來說,則是可以忽略的。因為,支付系統對于任何互聯網公司來說,都是很關鍵的業務系統,并且一旦上線就處在了高速運轉的模式之下,開著車更換輪子的成本往往比造一輛車的成本更高。
并且,從一些公司的實際情況來看,很多都是在處于無法維護或維護成本異常高昂的情況下,重新花費了很大的精力及成本重建了支付系統。做好支付系統涉及很多細節,這里只是介紹了其中一個比較關鍵的細節內容,希望能對大家有用~
總結
以上是生活随笔為你收集整理的支付渠道参数如何设计成路由化配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ftp空间怎么登录不了(ftp空间怎么登
- 下一篇: Java 多文件上传