大家好,我是老三,好久不见,最近比较忙碌,状态也不是太好,很久没有输出。
最近在做对账系统的调研和设计,给大家分享一些对账系统的知识。
什么是对账?
有个男人叫小帅,娶了个老婆,叫小美,早上,小美给小帅二十块钱买早餐,小帅买了包子、油条、豆浆回来,并说钱已经花完了,小美不信,拉着小帅到了早餐铺,拉着老板的账单对了一下,发现还剩两块钱……
这就是一个简单的对账场景,我们再看看电商的大概支付链路:
- 用户在电商平台下单,支付
- 支付服务向外部支付渠道发起支付请求
- 支付渠道扣减用户余额,或者请求银行扣款
- 完成支付后,支付服务同步支付状态,电商平台开始履约(发货)
- 到这就完了吗?还没有,支付渠道还要做清结算,把交易的余额结算到商户账户
可以看到,涉及到的系统还是比较多的,对电商内部而言,可能涉及到支付、订单、风控、履约,对于外部而言,电商和第三方渠道,支付渠道和银行。内部部之间,想不出差错那简直得图灵、冯诺依曼诸神保佑,所以,对账系统,是交易最后也是非常重要的一环,
通过对账,能找到各个内、外部系统之间不一致的交易,并通过差错处理,厘清账务,防止资损。
如何对账?
电商系统内部的对账相对简单一些,不管是通接口、还是数据聚合,都可以跨服务、跨库地核对交易数据。
我们这里主要讨论电商平台和三方渠道的对账:
对的是哪些账?
对于电商公司而言:
- 面对用户,希望“不少收一分钱,不多收一分钱”,和用户之间能做到钱货两清,这就要求电商平台的应收应付和三方渠道的实收实付一致,也就是
业务对账
。 - 面对三方渠道,希望能做到清算的一致性,也就实收扣除服务费的金额一致,还有结算的一致性,也就是三方渠道到商户账户结算金额一致,也就是
资金对账
。
这篇文章我们主要讨论业务对账。
通过什么对账?
通过什么对账呢?
对于电商平台内部,需要把各个服务的交易相关数据聚合起来,一般是通过拉的方式:
- binlog订阅
- 订阅消息
- 定时任务
对于外部的对账数据,各个支付渠道一般会提供对账单,不同渠道的对账单格式上不太一样:
- 微信对账单,txt格式
- 支付宝对账单,csv格式
- Paypal对账单,csv格式
对账文件当然是不能直接使用的,需要把三方渠道的对账单,清洗成对账系统用到的数据:
那对账文件是如何获取的呢?一般主要有两种方式:
- http接口下载
- ftp服务器下载
那对账文件是什么时间生成的呢?国内的支付渠道一般对账单生成时间是T+1。
对账的时机?
什么时候开始对账?对账一般分为两种:离线对账
和实时对账
。
我们这篇文章主要讲的就是离线对账,在对账单下载解析完成之后,开始对账,也就是所谓的T+1。例如支付宝,6点生成对账单,可以定时6:30去下载和解析对账单,解析落库之后,就可以开始进行对账。
实时对账呢,一般是对交易的状态进行监听(mq、binlog),监听到状态的变化,就开始核对。
对账逻辑是什么样的?
看看离线对账的逻辑:
那么对账是以什么为基准呢?是本系统的订单,还是支付渠道的订单?
为了尽可能保证准确性,一般是双向的,也就是基于本系统订单,比较三方对账单,也基于三方对账单比较本系统对账单,进行复核。
通常要核对的是这几个点:
- 支付记录是否在两边都存在
- 支付记录状态是否一致
- 支付记录的金额是否一致
如果没有问题,那这比流水就对平了,反之就是发生了差错:
- 错帐:支付状态不一致;支付金额不一致
- 短款:电商平台有支付信息,支付渠道没有
- 长款:仅支付渠道有支付信息
怎么处理差错?
对于常见的有规律的差错单,我们可以设计一些规则来自动处理,比如跨日交易问题,可以查看前一日的交易记录,或者后一日的交易记录,查看是否能够对平。还有其它的一些汇率换算等等问题,都可以尝试对平。
对于对不平的账,就需要标记错帐,进行人工处理,例如发生了掉单,可以给用户退款;例如用户未退款,可以尝试拦截发货。
支付对账架构如何设计?
我们来看看一些对账系统的架构设计:
- 美团
- 有赞对账架构设计
- 阿里商旅对账架构
- 小黑十一点半大佬画的对账架构设计
可以看到,主要就是那些东西,数据存储(DB、缓存、大数据)、数据订阅(binlog、mq、rpc)、task等等。
小结
这篇文章给大家分享了一些对账系统的知识,老三对于对账系统,目前也只是调研和设计阶段,大家有什么意见可以和我交流,后续会给大家分享更多电商、支付相关的东西,点赞、关注不迷路!
对账参考和学习资料:
[1].《支付架构实战》
[3].支付对账系统怎么设计?
[5].对账系统从入门到精通
[7].[美团配送资金安全治理之对账体系建设
[8].有赞业务对账平台的探索与实践
转载:https://blog.csdn.net/sinat_40770656/article/details/127632093