按照嘉宾的要求,本文不对外公开。如果你是意外看到这篇文章,请勿将链接发送给其他人。
一、虚拟账户
现在跟第三方支付对接,大部分的实体资金到账时间都是T+1,这种信息流和资金流时间不一致的方式,就需要设计对应的虚拟账户体系和对账清算的套路。首先是虚拟账户体系,可以设计会员账户和平台账户,会员账户可分为买家或卖家账户或者不区分也行,平台账户就是对接的平台在系统中开立的虚拟户。然后是子账户的概念,子账户主要目的是用来记账户的余额和资金的状态。我们考虑到资金的两种形态,是否现金,是否冻结,根据这两个指标,将一个子账户分为4种余额形态,如下图;一个会员账户只有一个子账户,一个平台账户可分为多个子账户如自有资金,手续费,营销费用等子账户。
二、虚拟账户模块功能
由于系统是分布式的服务,将虚拟账户抽为一个原子服务,主要提供以下的服务
- 信息查询,如资金变动明细,余额查询;
- 开户销户功能;
- 资金变动,如出入金记账,资金冻结解冻帐务相关;
三、对账流程
主要谈一下如何进行虚拟帐户入金的流程,入金是通过调用第三方支付进行的,当有用户进行充值操作,第三方返回成功后,会在用户的在途账户记录充值金额。 接下来是对账方面的工作:
- 内部会有一个定时任务,日终跑批,从流水表计算出前一日内部的对账数据,如总笔数,总金额,明细信息并入库;
- T+1日业务人员在管理台进行对账,系统会从第三方支付拉取对账文件,解析入库,这是外部的对账信息;
- 系统会比对内部和外部的对账信息,主要是总笔数总金额,确认准确后,该平台的对账标志位会记为已对账;
- 对账后是划账,T+1日第三方会把资金划转到银行内部户,我们这边对账准确后,会把一个平台的总金额划转到平台的专户,对账标志位记为已划账;
- 划帐后是清算,清算就是将前一日涉及到在途资金的交易,把在途资金更新为现金,清算结束后,整个流程结束;
- 还有一些异常处理的流程,如掉单,账期错误等情况,不属于主流程,以后有机会再分享;
Q&A
Q:在途可用、在途冻结,的定义及区别是什么?
A:
定义:在途就是未实际到账的资金,冻结的概念就是不可用;比如你买个东西花了100,冻结100,到确认收货时才会把金额扣减;
区别:比如你今天充值100元,这100元记在在途可用,你用这100购买一个商品,在途可用减100,在途冻结加100;
Q:a用户当天充值完以后,马上发起转账给b的交易,在途资金会转移给b吗?
A:都在虚拟账户里,在途转是可以的,不过b要提现的话需要做一些处理,比如直接拒绝或垫资;
Q:只对总账,如果不一致怎么处理
A:总分不一致的话,有异常处理机制可以运营人员手工处理,不一致的情况有很多;
Q:银行的支付不涉及对接三方的手续费吗?
A:手续费有的,银行会有跨行转账接口,每月计费后从平台一般户扣;
Q:既然是银行为什么还设计一套虚拟账户的东西?
A:银行也是有互金业务的,托管类,资金存管类都需要虚拟账户;
Q:T+1对账的话,这样划分虚拟账户,那么在清算时间过后用户充值的金额,是归到哪类?
A:充值时间跟清算时间没什么关系,每日清算的是前一日24点前的充值;
Q:对于日切不一致是怎么处理的呢?
A:运营手动处理
Q:商户和银行日切时间不同,这样以哪个时间为准;
A:日切不一致,以支付公司为准,改帐期,重新走对账流程;
Q:账户是对应会计科目的吗?在途可用是记在哪个科目下的?
A:这套虚拟账户体系是我抽象出来的,没有对应具体的会计科目,有需要的话可以在子账户拓展;
Q:请问跑批用了哪些技术框架?
A:跑批用自己搭建的分布式定时任务,类似elastic job;
Q:①job有没有遇到过自动任务假死,不是业务的,查进程假死的文档;②job没有修复假死的这个问题吗? A:①这个没有,进程堵住的问题可能是用法不对;
Q:在途的钱会出现垫资的场景吗? 谁垫?
A:会有垫资,一般要出金才会用到,商户出;
Q:不知道系统是否会做账户余额与交易明细的对账?
A:明细对账有异常情况才会对;
Q:人工介入对账,人工还会参与调账吗?调账有没有什么管控机制?
A:调账可以有啊,需复核,记调账流水;
Q:你们这个系统会比三方日切晚吗? 如果账期不一致 手工调的话每天运营处理麻烦吗?感觉每天能把汇总信息对上的利率会比较小吧?
A:账期不一致的情况不多,每个商户每天2,3笔最多,如果是大型系统就可以考虑其他方式了;
Q:先跟三方对汇总信息,如果不一致 就以三方为准调明细的账期 最后清算是将三方的钱收到内部过度户,然后根据对账信息调整在途和现金户,是这样吗?
A:是的,不过有其他的异常情况,不一定是账期问题,套路差不多;
Q:问下你们有考虑过系统对帐么?如果是大帐未平,去查帐时候很费事,从第三方取账单进行对比;
A:账期不一致,掉单,对手行退票,对账文件下载异常等等 异常情况很多啊,以后有机会再分享异常处理机制
Q:请问在途资金结转为普通资金是如何处理的呢,特别是这种经过几次转账以后的在途资金,系统如何定位并且发起结转的呢?
A:在途转现金,一般都是遍历前日交易做处理,可以根据业务设计一个数据结构,比如hashmap,key是虚拟账户客编,value是在途金额变动model,可以的,前日0点到24点的交易就行;当日发生的交易,不管在清算前还是后,都是隔日再清算;这个主题的前提是T+1,如果是T0,就是不同的情况;我们现在转账只允许现金转,如果要在途也能转,清算需要对应作修改;
A2:日切导致的落帐,我们现在的做法是下日再对,因为有可能是银行日切导致的也有可能是本系统导致的;
本文档来自支付产品技术交流群的聊天记录整理,由志愿者整理并发布到本网站。如需要及时收到来自支付产品技术交流群的最新消息,请扫码关注“凤凰牌老熊”的微信公众号。 本群面向支付行业的有经验(2年以上)的产品经理、软件工程师、架构师等,提供交流平台。如想加入本群,请在本文评论中留言(不公开),说明所在的公司、负责的工作、入群分享的主题和时间。