偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

干貨:電商支付系統(tǒng)的對賬處理與設計

開發(fā) 開發(fā)工具
對賬是支付系統(tǒng)最頭疼的事情。每一筆交易,都要做到各參與者的記錄能夠吻合,沒有偏差。對賬系統(tǒng)的工作,是發(fā)現有差異的記錄,即軋帳;然后通過人工或者自動的方式,解決這些差異,即平帳。

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

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

  • 交易主體,如果發(fā)起人是個人,必須能夠從個人交易歷史記錄中找到這筆交易。但大部分人不會保留電子記錄,所以一般是提供可以下載的賬單或交易記錄,讓用戶自己對去。
  • 交易對手,一般是商戶。商戶側對賬處理同用戶側,也僅僅提供對賬單。
  • 交易渠道側,這是對賬的重點,一是核實交易流水,二是核實交易傭金,畢竟是租用人家通道做結算的。

那有哪些記錄需要對賬? 目前主要是兩個:一個是交易記錄;一個是退款記錄。 這里以交易記錄的處理為例,退款記錄可以類似處理。

一、對賬處理流程

一般來說,對賬流程涉及到如下步驟: 渠道對賬單下載、本地交易記錄準備、軋賬、平賬。

1.1 渠道對賬單下載

銀行,第三方支付,銀聯(lián)等,基本都會提供對賬單下載的功能。不過也有少數工作做不到位或者太到位的銀行,只提供賬單查詢后臺,不提供對賬單下載功能。 對開發(fā)人員來說,這里有幾個坑:

  • 對賬單格式不一。文本,XML,csv的都有。為了后續(xù)能夠統(tǒng)一處理,在賬單下載完成后,需要進行標準化處理。
  • 下載方式不一,HTTP,HTTPS,FTP的,都有。下載程序需要按照渠道的協(xié)議來處理。
  • 下載時間不一,一般是凌晨1點后,到中午12才能用的也有。如果在預定的時間取不到數據,需要注意重試讀取。
  • 穩(wěn)定性差。FTP服務器出問題那是常有的事。渠道側解決方案往往就是重啟。所以重試機制是必要的。

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

銀行直連的對賬情況

1.2 渠道對賬單標準化

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

  1. 交易時間:這是在微信側的支付完成的時間。 這個時間會成為一個陷阱。
  2. 公眾賬號ID,商戶號,子商戶號,設備號: 這些信息需要做驗證,確保是自己的單子,不要讓微信把老王家的單子也給發(fā)過來了;
  3. 微信訂單號,商戶訂單號: 這兩個是對單的核心。前者是微信側產生的訂單號,在微信支付接口返回值中有。但是萬一收不到這個返回值,那在本地記錄中可能就空了。 后者是我們發(fā)送給微信的訂單號,一般用這個來做對單依據。兩邊的數據中都會有這個值。
  4. 用戶標識,交易類型,交易狀態(tài),付款銀行,貨幣種類,總金額,企業(yè)紅包金額: 這幾個就是對單的核心字段,必須確保雙方是一致的。
  5. 商品名稱,商戶數據包,手續(xù)費,費率:這些是可選驗證。

而某寶的對賬單,是文本格式的,用空格隔開。他們家的就簡單很多,只有商戶訂單號,交易流水號,交易時間,支付時間,付款方,交易金額,交易類型,交易狀態(tài)這些字段。

由于每個渠道的賬單格式都不盡相同, 在得到賬單后,下一步是對賬單做標準化處理,這樣軋帳以及后續(xù)工作就可以統(tǒng)一處理了。 標準化后的賬單數據可以放在文件系統(tǒng)或者數據庫中。這取決于交易數據量。每天百萬以上的量,還是使用文件系統(tǒng),比較合適。數據庫操作相對比較慢,也浪費資源。 基于文件系統(tǒng)的標準化涉及如下內容:

文件格式標準化 統(tǒng)一使用csv或者json或者xml格式。如果是使用hadoop或者spark來對賬,使用csv是個不錯的選擇。

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

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

1.3 本地交易記錄準備

本地交易記錄的準備,總的來說有如下方法:

  • 啥都不做,直接用原始數據。鑒于大部分系統(tǒng)使用的是mysql,這也意味著在MySQL上做對賬。對賬時需要大量的數據查找工作,必然會影響線上業(yè)務。在數據規(guī)模較大,比如超過100萬時,就不太合適了。
  • 當然,還有一個選擇是使用備庫來執(zhí)行對賬,這樣既簡單,也不影響線上業(yè)務。這是典型的空間換時間的做法。
  • 如果業(yè)務大到需要分表分庫才能處理,那對賬數據準備也不一樣。使用分庫也不現實,因為分庫一般是按照主體id,而不是渠道id,來分庫,這樣對賬就需要在多個庫上進行,效率反而降低了。而對分表分庫建立從庫也非常耗費資源。這種情況下,需要同步一份數據到(hdfs)文件系統(tǒng)中,或者NOSQL數據庫上。

由于交易記錄是支付系統(tǒng)核心數據,有大量的應用,如信用、風控等,都需要交易記錄數據。這些應用對交易記錄的需求還不完全一致,為了提升性能, 交易記錄會使用異步的方式來將數據投遞給使用方。 交易記錄在入庫時,投遞消息到消息系統(tǒng)中。使用方監(jiān)聽這個消息,一旦收到新消息,則從交易記錄庫中查詢數據,獲取數據并更新到庫中。關于此類數據同步的文章不少,這里就不詳細介紹。

1.4 軋帳

軋帳是按照客戶訂單號來比較本地交易記錄和渠道交易記錄是否一致。從算法角度,是計算兩個數組的差異。在單機運行時,可以采用的算法不少,這里不詳細介紹。 我們推薦采用mapreduce來軋帳,這有個優(yōu)勢,可以按照訂單號將渠道提供的記錄和本地記錄shuffle到同一個reduce處理上,這樣就可以很容易進行數據比對。 軋帳中***的坑,莫過于切分點的問題。比如以整0點為切分點,那存在一個問題,本地23:59發(fā)起的交易,到了渠道側,可能會在00:01處理,這一筆交易變成第二天的帳了。實際處理中,一筆交易在渠道側處理,花上幾分鐘都有可能。 對于切分點附近無法確認的帳,做一個時間窗,在時間窗內的數據,留待第二天對賬時繼續(xù)處理。

1.5 平帳

發(fā)現兩邊不一致的數據,那應該如何處理?數據量不大時,記錄起來,人工甄別就行。但如果數據量很大,每天上千條,人工處理就成本太高了。這個沒有統(tǒng)一的處理方法,需要根據有問題的數據,做個分析,然后做自動處理。 針對交易記錄的對賬的處理,主要有如下情況:

  • 長款: 本地未支付,支付渠道已支付。這主要是本地未正確接收到渠道下發(fā)的異步通知導致。 一般處理是將本地狀態(tài)修改為已支付,并做響應的后續(xù)處理,比如通知業(yè)務方等。
  • 短款:本地已支付,但是支付渠道中無記錄;或者本地無記錄,支付渠道有記錄。在排除跨日因素外,這種情況非常少見,需要了解具體原因后做處理。
  • 金額不一致: 本地已支付,支付渠道已支付,但是金額不同,這個需要人工核查。

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

  • 本地未退款,支付渠道已退款,則以支付渠道為準,修改本地為已退款狀態(tài),并出發(fā)后續(xù)處理。
  • 本地已退款、支付渠道已退款,但是金額不同,需要人工核查;
  • 本地已退款,但是支付渠道無記錄;或者支付渠道有記錄,但是本地沒有。 在排除跨日因素外, 這種情況非常少見,需要了解具體原因后做處理。

二、對賬架構

基于微服務的對賬系統(tǒng)實現的一個參考架構如下:

2.1 對賬單下載

對賬單下載組件每天定時觸發(fā),從支付通道服務器上下載對賬單。 目前主要有HTTP(S)和FTP兩種對賬單下載方式。 技術選型上,HTTP(S)用apache httpclient即可實現鏈接池和斷點續(xù)傳, FTP也可以使用Apache Commons Net API。 不管是哪一個,都需要設置重試次數和鏈接超時間。重試次數和間隔的設置需要小心,重試太頻繁,容易把服務器打死.;時間間隔太大,又會阻塞后續(xù)處理步驟。5~10分鐘是一個合適的重試間隔區(qū)間。鏈接超時指在服務器出現問題時,連接在指定時間內獲取不到數據即自動斷開。這個很容易被忽略。我們有一次系統(tǒng)出問題,是渠道側的FTP假死后重啟,導致我們的客戶端掛住,一直在等待重新鏈接。此外,注意,有些對賬單下載是支持分頁下載的。

2.2 對賬單轉換

將對賬單轉換為標準格式的賬單,為對賬Mapreduce任務執(zhí)行提供支持。每個渠道的對賬單格式不一,需要分別開發(fā)轉換程序。 轉換程序主要就兩個操作: 解析源文件、轉換成標準格式并輸出。

2.3 軋賬MR

如上所述,軋賬MapReduce程序在Hadoop上運行,以交易號為Key,核對渠道訂單和本地交易記錄之間的差異,輸出差異記錄。***將差異記錄導入到差異表中。

總之,對賬工作,即復雜也不復雜。需要細心,對業(yè)務要有深入的了解,并選擇合適的架構。

【本文為51CTO專欄作者“鳳凰牌老熊”的原創(chuàng)稿件,轉載請通過微信公眾號“鳳凰牌老熊”聯(lián)系作者本人】

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2024-04-18 08:18:10

電商優(yōu)化單線程

2017-02-28 17:19:04

支付清結算電商側

2017-04-25 09:06:51

2023-11-28 12:39:40

支付對賬領域

2010-06-02 19:47:41

2024-10-14 14:28:19

支付系統(tǒng)設計

2016-08-18 23:37:24

2017-02-27 19:19:53

移動支付新業(yè)態(tài)聚合支付

2021-08-27 21:50:53

公域流量電商

2013-10-15 10:12:02

2023-04-13 10:12:07

交易平臺架構

2013-01-09 13:58:00

銀行移動電商移動互聯(lián)網

2022-03-15 17:35:20

電商系統(tǒng)架構

2012-10-26 15:11:56

云計算Puppet

2025-04-25 08:34:52

2025-01-02 09:06:43

2015-07-22 10:54:23

電商平臺源碼

2015-06-03 18:25:28

跨境電商rackspace

2021-10-22 19:21:33

華為云

2011-12-08 20:41:21

移動支付
點贊
收藏

51CTO技術棧公眾號