您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
咱们聊聊对账系统该如何设计?
账单,数据,渠道咱们聊聊对账系统该如何设计?
发布时间:2020-12-06加入收藏来源:互联网点击:
咱们聊聊对账系统该如何设计?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
对账是金融领域中的名词,对应的学科为大家熟知的会计学。在金融领域中,不仅银行、基金、第三方支付机构需要对账,其他任何涉及金融交易的公司/机构都需要对账,比如商户业务、信贷业务等。
对账是指对前一个清算周期的交易信息进行核对,以确认交易信息的一致性和正确性的过程。这是普遍认可的一个概念,可以用一句话总结:确保单个周期内,信息流和现金流的一致。
通过对账可以保证账证一致、账账一致、账实一致,三者一致的正确、真实、完整为后续的佣金、分润等计算提供基础。对账的准确性也为系统、人工平账提供了差错信息,确保平账后达到财务一致。
总之,对一个公司来说,通过对账,可以正确地反映企业的财务状态,及时发现差错,确保业务健康发展。
对账大部分涉及两方对账,极少情况下会有三方对账的情况。三方对账本身的系统逻辑比较复杂,特别是三方平账时的差错处理更加复杂,这里不作讨论。
对于没有虚拟账户,只有交易通道类的对账,有两种对账类型:总分对账和明细对账。
总分对账即根据不同的交易通道,把每个交易通道的进出或者单独的交易类型进行汇总,按照不同交易通道、不同交易类型进行总对总对账,确保和每个交易通道的进出是一致的,确保每个通道不会有长款或短款的情况。
对大部分系统来说,总分对账没有差错就不用进行明细对账了。
如果发现总分对账有差错,就需要进行明细对账,将具体差错信息找出来。明细对账,顾名思义就是将发生的每一笔交易的详细信息和交易通道的对账文件进行逐笔核对,找出是否有不一致的交易。
回答于 2019-09-11 08:43:50
对电商系统来说,每一笔交易,在所有相关主体侧都要能对得上:
交易主体,如果发起人是个人,必须能够从个人交易历史记录中找到这笔交易。但大部分人不会保留电子记录,所以一般是提供可以下载的账单或交易记录,让用户自己对去。
交易对手,一般是商户。商户侧对账处理同用户侧,也仅仅提供对账单。
交易渠道侧,这是对账的重点,一是核实交易流水,二是核实交易佣金,毕竟是租用人家通道做结算的。
那有哪些记录需要对账? 目前主要是两个:一个是交易记录;一个是退款记录。
对账处理流程
一般来说,对账流程涉及到如下步骤: 渠道对账单下载、本地交易记录准备、轧账、平账。
渠道对账单下载
银行,第三方支付,银联等,基本都会提供对账单下载的功能。不过也有少数工作做不到位或者太到位的银行,只提供账单查询后台,不提供对账单下载功能。
对开发人员来说,这里有几个坑:
对账单格式不一。文本,XML,csv的都有。为了后续能够统一处理,在账单下载完成后,需要进行标准化处理。
下载方式不一,HTTP,HTTPS,FTP的,都有。下载程序需要按照渠道的协议来处理。
下载时间不一,一般是凌晨1点后,到中午12才能用的也有。如果在预定的时间取不到数据,需要注意重试读取。
稳定性差。FTP服务器出问题那是常有的事。渠道侧解决方案往往就是重启。所以重试机制是必要的。
技术选型上,HTTP(S)用apache httpclient即可实现链接池和断点续传, FTP也可以使用Apache Commons Net API。 但不管是哪一个,都需要设置重试次数和链接超时间。重试次数和间隔的设置需要小心,重试太频繁,容易把服务器打死.;时间间隔太大,又会阻塞后续处理步骤。5~10分钟是一个合适的重试间隔区间。
链接超时指在服务器出现问题时,连接在指定时间内获取不到数据即自动断开。这个很容易被忽略。我们有一次系统出问题,是渠道侧的FTP假死后重启,导致我们的客户端挂住,一直在等待重新链接。
渠道对账单标准化
找个例子大家看看, 比如微信的对账单,他是csv格式的,包括如下信息:
交易时间:这是在微信侧的支付完成的时间。 这个时间会成为一个陷阱。
公众账号ID,商户号,子商户号,设备号: 这些信息需要做验证,确保是自己的单子,不要让微信把老王家的单子也给发过来了;
微信订单号,商户订单号: 这两个是对单的核心。前者是微信侧产生的订单号,在微信支付接口返回值中有。但是万一收不到这个返回值,那在本地记录中可能就空了。 后者是我们发送给微信的订单号,一般用这个来做对单依据。两边的数据中都会有这个值。
用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额: 这几个就是对单的核心字段,必须确保双方是一致的。
商品名称,商户数据包,手续费,费率:这些是可选验证。
微信对账单
而某宝的对账单,是文本格式的,用空格隔开。他们家的就简单很多,只有商户订单号,交易流水号,交易时间,支付时间,付款方,交易金额,交易类型,交易状态这些字段。
某宝对账单
由于每个渠道的账单格式都不尽相同, 在得到账单后,下一步是对账单做标准化处理,这样轧帐以及后续工作就可以统一处理了。 标准化后的账单数据可以放在文件系统或者数据库中。这取决于交易数据量。每天百万以上的量,还是使用文件系统,比较合适。数据库操作相对比较慢,也浪费资源。
基于文件系统的标准化涉及如下内容:
文件格式标准化:统一使用csv或者json或者xml格式。如果是使用hadoop或者spark来对账,使用csv是个不错的选择。
文件存储统一化:文件目录,文件名都需要遵循统一命名规范。
为了加快处理速度,我们使用hdfs作为文件系统,有利于后续的对账的处理。
本地交易记录准备
本地交易记录的准备,总的来说有如下方法: – 啥都不做,直接用原始数据。鉴于大部分系统使用的是mysql,这也意味着在MySQL上做对账。对账时需要大量的数据查找工作,必然会影响线上业务。在数据规模较大,比如超过100万时,就不太合适了。
当然,还有一个选择是使用备库来执行对账,这样既简单,也不影响线上业务。这是典型的空间换时间的做法。
如果业务大到需要分表分库才能处理,那对账数据准备也不一样。使用分库也不现实,因为分库一般是按照主体id,而不是渠道id,来分库,这样对账就需要在多个库上进行,效率反而降低了。而对分表分库建立从库也非常耗费资源。这种情况下,需要同步一份数据到(hdfs)文件系统中,或者NOSQL数据库上。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |