支付系統(tǒng)設(shè)計:對賬處理(二)

轉(zhuǎn)載:http://www.woshipm.com/it/459445.html

可以說,對賬是支付系統(tǒng)最頭疼的事情。每一筆交易,都要做到各參與者的記錄能夠吻合痪伦,沒有偏差侄榴。對賬系統(tǒng)的工作,是發(fā)現(xiàn)有差異的記錄网沾,即軋帳癞蚕;然后通過人工或者自動的方式,解決這些差異辉哥,即平帳桦山。

對電商系統(tǒng)來說,每一筆交易醋旦,在所有相關(guān)主體側(cè)都要能對得上:

交易主體恒水,如果發(fā)起人是個人,必須能夠從個人交易歷史記錄中找到這筆交易饲齐。但大部分人不會保留電子記錄钉凌,所以一般是提供可以下載的賬單或交易記錄,讓用戶自己對去箩张。

交易對手甩骏,一般是商戶窗市。商戶側(cè)對賬處理同用戶側(cè)先慷,也僅僅提供對賬單。

交易渠道側(cè)咨察,這是對賬的重點论熙,一是核實交易流水,二是核實交易傭金摄狱,畢竟是租用人家通道做結(jié)算的脓诡。

那有哪些記錄需要對賬? 目前主要是兩個:一個是交易記錄媒役;一個是退款記錄祝谚。

對賬處理流程

一般來說,對賬流程涉及到如下步驟: 渠道對賬單下載酣衷、本地交易記錄準(zhǔn)備交惯、軋賬、平賬穿仪。

渠道對賬單下載

銀行席爽,第三方支付,銀聯(lián)等啊片,基本都會提供對賬單下載的功能只锻。不過也有少數(shù)工作做不到位或者太到位的銀行,只提供賬單查詢后臺紫谷,不提供對賬單下載功能齐饮。

對開發(fā)人員來說捐寥,這里有幾個坑:

對賬單格式不一。文本沈矿,XML上真,csv的都有。為了后續(xù)能夠統(tǒng)一處理羹膳,在賬單下載完成后睡互,需要進行標(biāo)準(zhǔn)化處理。

下載方式不一陵像,HTTP就珠,HTTPS,F(xiàn)TP的醒颖,都有妻怎。下載程序需要按照渠道的協(xié)議來處理。

下載時間不一泞歉,一般是凌晨1點后逼侦,到中午12才能用的也有。如果在預(yù)定的時間取不到數(shù)據(jù)腰耙,需要注意重試讀取榛丢。

穩(wěn)定性差。FTP服務(wù)器出問題那是常有的事挺庞。渠道側(cè)解決方案往往就是重啟晰赞。所以重試機制是必要的。

看一下第三方支付的對賬單情況:


銀行直連的對賬情況:


技術(shù)選型上选侨,HTTP(S)用apache httpclient即可實現(xiàn)鏈接池和斷點續(xù)傳掖鱼, FTP也可以使用Apache Commons Net API。 但不管是哪一個援制,都需要設(shè)置重試次數(shù)和鏈接超時間戏挡。重試次數(shù)和間隔的設(shè)置需要小心,重試太頻繁晨仑,容易把服務(wù)器打死.褐墅;時間間隔太大,又會阻塞后續(xù)處理步驟寻歧。5~10分鐘是一個合適的重試間隔區(qū)間掌栅。

鏈接超時指在服務(wù)器出現(xiàn)問題時,連接在指定時間內(nèi)獲取不到數(shù)據(jù)即自動斷開码泛。這個很容易被忽略猾封。我們有一次系統(tǒng)出問題,是渠道側(cè)的FTP假死后重啟噪珊,導(dǎo)致我們的客戶端掛住晌缘,一直在等待重新鏈接齐莲。

渠道對賬單標(biāo)準(zhǔn)化

找個例子大家看看, 比如微信的對賬單磷箕,他是csv格式的选酗,包括如下信息:

交易時間:這是在微信側(cè)的支付完成的時間。 這個時間會成為一個陷阱岳枷。

公眾賬號ID芒填,商戶號,子商戶號,設(shè)備號: 這些信息需要做驗證,確保是自己的單子空繁,不要讓微信把老王家的單子也給發(fā)過來了殿衰;

微信訂單號,商戶訂單號: 這兩個是對單的核心。前者是微信側(cè)產(chǎn)生的訂單號盛泡,在微信支付接口返回值中有闷祥。但是萬一收不到這個返回值,那在本地記錄中可能就空了傲诵。 后者是我們發(fā)送給微信的訂單號凯砍,一般用這個來做對單依據(jù)。兩邊的數(shù)據(jù)中都會有這個值拴竹。

用戶標(biāo)識,交易類型,交易狀態(tài),付款銀行,貨幣種類,總金額,企業(yè)紅包金額: 這幾個就是對單的核心字段悟衩,必須確保雙方是一致的。

商品名稱,商戶數(shù)據(jù)包,手續(xù)費,費率:這些是可選驗證殖熟。

而某寶的對賬單局待,是文本格式的斑响,用空格隔開菱属。他們家的就簡單很多,只有商戶訂單號舰罚,交易流水號纽门,交易時間,支付時間营罢,付款方赏陵,交易金額,交易類型饲漾,交易狀態(tài)這些字段蝙搔。

由于每個渠道的賬單格式都不盡相同, 在得到賬單后考传,下一步是對賬單做標(biāo)準(zhǔn)化處理吃型,這樣軋帳以及后續(xù)工作就可以統(tǒng)一處理了。 標(biāo)準(zhǔn)化后的賬單數(shù)據(jù)可以放在文件系統(tǒng)或者數(shù)據(jù)庫中僚楞。這取決于交易數(shù)據(jù)量勤晚。每天百萬以上的量枉层,還是使用文件系統(tǒng),比較合適赐写。數(shù)據(jù)庫操作相對比較慢鸟蜡,也浪費資源。

基于文件系統(tǒng)的標(biāo)準(zhǔn)化涉及如下內(nèi)容:

文件格式標(biāo)準(zhǔn)化:統(tǒng)一使用csv或者json或者xml格式挺邀。如果是使用hadoop或者spark來對賬揉忘,使用csv是個不錯的選擇。

文件存儲統(tǒng)一化:文件目錄端铛,文件名都需要遵循統(tǒng)一命名規(guī)范癌淮。

為了加快處理速度,我們使用hdfs作為文件系統(tǒng)沦补,有利于后續(xù)的對賬的處理乳蓄。

本地交易記錄準(zhǔn)備

本地交易記錄的準(zhǔn)備,總的來說有如下方法: – 啥都不做夕膀,直接用原始數(shù)據(jù)虚倒。鑒于大部分系統(tǒng)使用的是mysql,這也意味著在MySQL上做對賬产舞。對賬時需要大量的數(shù)據(jù)查找工作魂奥,必然會影響線上業(yè)務(wù)。在數(shù)據(jù)規(guī)模較大易猫,比如超過100萬時耻煤,就不太合適了。

當(dāng)然准颓,還有一個選擇是使用備庫來執(zhí)行對賬哈蝇,這樣既簡單,也不影響線上業(yè)務(wù)攘已。這是典型的空間換時間的做法炮赦。

如果業(yè)務(wù)大到需要分表分庫才能處理,那對賬數(shù)據(jù)準(zhǔn)備也不一樣样勃。使用分庫也不現(xiàn)實吠勘,因為分庫一般是按照主體id,而不是渠道id峡眶,來分庫剧防,這樣對賬就需要在多個庫上進行,效率反而降低了辫樱。而對分表分庫建立從庫也非常耗費資源峭拘。這種情況下,需要同步一份數(shù)據(jù)到(hdfs)文件系統(tǒng)中,或者NOSQL數(shù)據(jù)庫上棚唆。

由于交易記錄是支付系統(tǒng)核心數(shù)據(jù)暇赤,有大量的應(yīng)用,如信用宵凌、風(fēng)控等鞋囊,都需要交易記錄數(shù)據(jù)。這些應(yīng)用對交易記錄的需求還不完全一致瞎惫,為了提升性能溜腐, 交易記錄會使用異步的方式來將數(shù)據(jù)投遞給使用方。 交易記錄在入庫時瓜喇,投遞消息到消息系統(tǒng)中挺益。使用方監(jiān)聽這個消息,一旦收到新消息乘寒,則從交易記錄庫中查詢數(shù)據(jù)望众,獲取數(shù)據(jù)并更新到庫中。關(guān)于此類數(shù)據(jù)同步的文章不少伞辛,這里就不詳細介紹烂翰。

軋帳

軋帳是按照客戶訂單號來比較本地交易記錄和渠道交易記錄是否一致。從算法角度蚤氏,是計算兩個數(shù)組的差異甘耿。在單機運行時,可以采用的算法不少竿滨,這里不詳細介紹佳恬。 我們推薦采用mapreduce來軋帳,這有個優(yōu)勢于游,可以按照訂單號將渠道提供的記錄和本地記錄shuffle到同一個reduce處理上毁葱,這樣就可以很容易進行數(shù)據(jù)比對。 軋帳中最大的坑曙砂,莫過于切分點的問題头谜。

比如以整0點為切分點骏掀,那存在一個問題鸠澈,本地23:59發(fā)起的交易,到了渠道側(cè)截驮,可能會在00:01處理笑陈,這一筆交易變成第二天的帳了。實際處理中葵袭,一筆交易在渠道側(cè)處理涵妥,花上幾分鐘都有可能。 對于切分點附近無法確認的帳坡锡,做一個時間窗蓬网,在時間窗內(nèi)的數(shù)據(jù)窒所,留待第二天對賬時繼續(xù)處理。

平帳

發(fā)現(xiàn)兩邊不一致的數(shù)據(jù)帆锋,那應(yīng)該如何處理吵取?數(shù)據(jù)量不大時,記錄起來锯厢,人工甄別就行皮官。但如果數(shù)據(jù)量很大,每天上千條实辑,人工處理就成本太高了捺氢。這個沒有統(tǒng)一的處理方法,需要根據(jù)有問題的數(shù)據(jù)剪撬,做個分析摄乒,然后做自動處理。 針對交易記錄的對賬的處理残黑,主要有如下情況:

本地未支付缺狠,支付渠道已支付。這主要是本地未正確接收到渠道下發(fā)的異步通知導(dǎo)致萍摊。 一般處理是將本地狀態(tài)修改為已支付挤茄,并做響應(yīng)的后續(xù)處理,比如通知業(yè)務(wù)方等冰木。

本地已支付穷劈,支付渠道已支付,但是金額不同踊沸,這個需要人工核查歇终。

本地已支付,但是支付渠道中無記錄逼龟;或者本地?zé)o記錄评凝,支付渠道有記錄。在排除跨日因素外腺律,這種情況非常少見奕短,需要了解具體原因后做處理。

針對退款的對賬處理匀钧,主要有如下情況:

本地未退款翎碑,支付渠道已退款,則以支付渠道為準(zhǔn)之斯,修改本地為已退款狀態(tài)日杈,并觸發(fā)后續(xù)處理。

本地已退款、支付渠道已退款莉擒,但是金額不同酿炸,需要人工核查;

本地已退款涨冀,但是支付渠道無記錄梁沧;或者支付渠道有記錄,但是本地沒有蝇裤。 在排除跨日因素外廷支, 這種情況非常少見,需要了解具體原因后做處理栓辜。

總之恋拍,對賬工作,即復(fù)雜也不復(fù)雜藕甩。需要細心施敢,對業(yè)務(wù)要有深入的了解,并選擇合適的架構(gòu)狭莱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末僵娃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腋妙,更是在濱河造成了極大的恐慌默怨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骤素,死亡現(xiàn)場離奇詭異匙睹,居然都是意外死亡,警方通過查閱死者的電腦和手機济竹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門痕檬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人送浊,你說我怎么就攤上這事梦谜。” “怎么了袭景?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵唁桩,是天一觀的道長。 經(jīng)常有香客問我浴讯,道長朵夏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任榆纽,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奈籽。我一直安慰自己饥侵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布衣屏。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膳殷。 梳的紋絲不亂的頭發(fā)上别智,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音钻弄,去河邊找鬼佃却。 笑死,一個胖子當(dāng)著我的面吹牛窘俺,可吹牛的內(nèi)容都是我干的饲帅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瘤泪,長吁一口氣:“原來是場噩夢啊……” “哼灶泵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起对途,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赦邻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后实檀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體深纲,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年劲妙,在試婚紗的時候發(fā)現(xiàn)自己被綠了湃鹊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡镣奋,死狀恐怖币呵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侨颈,我是刑警寧澤余赢,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站哈垢,受9級特大地震影響妻柒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耘分,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一举塔、第九天 我趴在偏房一處隱蔽的房頂上張望绑警。 院中可真熱鬧,春花似錦央渣、人聲如沸计盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽北启。三九已至,卻和暖如春拔第,著一層夾襖步出監(jiān)牢的瞬間咕村,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工蚊俺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留懈涛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓春叫,卻偏偏與公主長得像肩钠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暂殖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 《非銀行支付機構(gòu)網(wǎng)絡(luò)支付業(yè)務(wù)管理辦法》條款釋義 - 中國支付網(wǎng) - 中國支付行業(yè)第一門戶網(wǎng)站2016年7月1日...
    菜菜苔閱讀 7,569評論 1 44
  • 背景 目前app線上涉及若干和支付有關(guān)的業(yè)務(wù)价匠,并且存在如下情況:1、一個業(yè)務(wù)支持多種支付方式2呛每、一種支付方式同一個...
    追夢3000閱讀 4,912評論 0 5
  • 為什么要對賬踩窖? 對賬其實是對一定周期內(nèi)的交易進行雙方確認的過程,一般都是在第二天第三方支付公司對前一日交易進行清分...
    安東的漫長歲月閱讀 3,552評論 0 9
  • 2017-5-10寫作的基本態(tài)度 觀瀾 寫作是表達自己觀點的一種方式晨横,或許可以讓別人贊同你的觀點和立場洋腮,也有人會不...
    觀瀾2017閱讀 522評論 0 0
  • 我們最大的虛偽不敢面對一敗涂地的生活,還騙自己說不屑那些功成名就手形,假裝自己甘之若飴卑微的活著啥供。
    樂曦閱讀 152評論 0 0