• 《支付对账系统怎么设计?》阅读心得


     

      支付是我们常用的一个功能,支付对账系统是整个支付清结算体系中具体基础性意义的一个环节,是确保支付平台与各类第三方支付渠道数据一致性的关键系统,是商户资金结算、资金划拨、资金报表等逻辑准确运行的重要前提。

      对于公司自建支付系统来说,一般会根据业务的复杂程度不同,对接多个支付渠道。不同渠道的账单数据格式也是不一样的。为了实现账单数据的统一格式化,要将各渠道原始的账单文件进行统一标准化转化,同时也需要设计一张相对通用的渠道账单数据表来存储不同渠道账单格式化后的数据。另外,在进行账单数据存储时为了提高效率,需要将标准账单文件格式设计得与表结构一致,这样在完成数据转换后可以直接将文件load/copy到数据库中,这样速度会快很多;而考虑数据规模会增长得超级大,这张表也可以存储在Hive上。

      对于账单的下载逻辑也需要考虑防重逻辑的,即同一个渠道账号的同一天的账单数据不能重复下载和入库,所以除了存储具体的账单数据外,也需要设计一张账单下载记录表,用于存储那个渠道账号哪一天的下载情况,并在账单下载任务启动起根据该表进行防重复下载逻辑判断。这里还需要说明下,在下载原始账单和转化标准账单时由于账单文件读写都是本地磁盘,为了统一集中管理这些账单文件、也为了数据安全需要采用统一文件存储服务。

      对于核心对账逻辑,一般情况下,与第三方支付渠道进行对账时,会以平台订单号作为关联条件,将账单表中的数据与支付平台订单表的数据进行full join得到一个集合全量,得到的集合会是一个交集、两个补集。处于交集部分的数据集说明根据订单号是可以对应上的,但是我们还需要进行订单金额的比对,如果一致则说明无差错,对平的数据集按照结算数据要求取账单数据+平台订单数据业务字段全集,直接生成对账明细表,而不一致的则需要生成差错类型为“金额不一致”的差错数据,并记入对账差错数据表。

      账逻辑执行完成后,会产生一部分对账逻辑执行过程中,系统无法匹配的对账差错数据,这部分数据会在对账完成后记录在对账差错信息表中,差错信息表根据差错类型记录该笔差错的详细信息,除包括渠道类型、金额、交易时间等关键信息外,还会对差错进行分类、定义特定的差错类型编码。根据根据不同情况差错大概可以分为三类:长款、短款、金额错误。其中长款根据对账处理方式的不同可以分为“渠道成功,平台订单不存在”、“渠道成功、平台状态非成功”两种情况。而对于短款来说,就是在当日的账单数据中没有匹配到,差错类型也就是“平台成功,账单数据不存在”。而“金额不一致”的情况相对少见。

      对于长款差错,在判断完支付订单状态为成功后,之所以在判断是否在T-1天或者T-N天是否存在同一笔匹配的短款差错之前,判断是否存在对账明细的情况,允许对于短款差错采取T+1日的处理方式。

      对于短款差错,大部分公司为了解决跨天交易的问题,会要求对短款差错挂账一天,也就是说要求在T+2日对短款进行处理,因为在T+2日时账单和对账出现的长款差错可以正常抵消处理。

      对于金额不一致的差错处理,正常情况下金额不一致一般以第三方渠道账单为准,从账务一致性的角度考虑,可能也需要在流程中加入调账逻辑,具体的流程可根据具体的产品规则设计。

      作者在这篇文章中介绍了支付对账系统,不同渠道的数据格式不一致的解决方法,核心对账逻辑,差错处理逻辑。我通过这篇文章了解到原来支付系统的对账逻辑这么复杂。

     

  • 相关阅读:
    HDUOJ--4565 So Easy!
    简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
    java 快速求素数
    狄斯奎诺(dijkstra 模板)
    2014 蓝桥杯 阶梯报告(含代码 详细讲解)
    HDUOJ---汉洛塔IX
    小错误系列
    HDUOJ-----4510 小Q系列故事——为什么时光不能倒流
    HDUOJ----4509湫湫系列故事——减肥记II
    HDUOJ-----4506小明系列故事——师兄帮帮忙
  • 原文地址:https://www.cnblogs.com/wl2017/p/11046934.html
Copyright © 2020-2023  润新知