查看原文
其他

支付公司账务系统的那些事

三炮 Fastpay快付 2019-05-09

最近疲于一些琐事,一直未更新。感谢那些一直在催稿的小哥哥、小姐姐们督促着我(此处应该有笔芯)。


言归正传。账务系统是个什么鬼?单纯来看账务系统可能每个人都有自己的看法,在各自的角度来看也都没啥毛病。接下来炮哥就说说我自己的看法,欢迎交流探讨。


首先,回顾下支付业务的架构图。



在账户系统(想了解账户猛戳 关于支付公司账户体系设计的一些思考 和 再谈账户 )之上有两个入口:账务、账户管理。账务系统作为所有资金操作的引擎,定义了所以资金操作的平台原则,翻译成土话即规定了怎么记账。依据漏斗模型,对于账务系统而言,其抽象程度略低于账户系统又高于交易、产品及场景。


接下来说说账务系统的抽象问题。账户的资金操作抽象成了出和入,账务系统会在账户的基础上包装出收款、出款、转账,以此基础再向交易层会衍生出收单、退款、付款、计费、分账等。对于交易层的每个交易类型都需要映射到账务系统。拿收单举一个栗子:一笔收单交易100元,收款方实付2块钱手续费,我们忽略其前序所有的环节,默认为可以给商户入账。此时根据账务系统的规则,我们需要给商户的待结算账户入账100元(收款);出账2块钱手续费(出款);对应的产品收入账户入账2块钱(收款);对应的渠道收款在途账户入账100元(收款),渠道的手续费暂且忽略。账务系统要解决三次收款一次出款的顺序问题。我们再来看看退款的栗子,同样暂且忽略前序所有环节,即可以给付款方退款,有两种可能性,退款退费和退款不退费,退款退费账务系统需要处理产品收入账户出账2块钱(出款);商户结算账户/待结算账户入账2块钱(收款);商户结算账户/待结算账户出账100元(出款);渠道出款在途账户出账100元(出款)。退款不退费时账务系统要处理商户结算账户/待结算账户出账100元(出款),渠道出款在途账户出账100元(出款)。对于部分退款逻辑同上。


敲黑板划重点:


  1. 对于记账过程是否要反向核实交易状态,个人建议遵循漏斗原则,交易系统确保状态OK后驱动记账。比如收款交易,银行返回成功后请求账务入账。对于出款交易,账户出款后交易请求银行出款,交易系统依据银行返回的状态驱动记账(处理在途资金)。

  2. 对于账务处理过程的一致性问题。抛开业务单从逻辑来看,所有的处理要么全成功,要么全失败。现实很骨干,对于交易高峰期,处理起来很棘手,需要平衡系统性能和交易的完整性。记账规则的重要性此刻就略显重要了,可以遵循先处理客户账,再处理平台账,最后处理渠道账的原则也可以遵循先处理渠道账,再处理客户账,最后处理平台账的原则。不管哪个原则中间环节断了都需要人工介入处理。


相对平台而言,出账的失败率远高于入账。由此我们来看一个相对复杂的情况,收单后进行资金分账,此过程会使用账务的收款、出款、转账,暂且忽略收单过程,重点来看资金分账,资金进入收款方后可能会分给多方,此处假设为A需要分给B10元、C15元、D20元。通过账务依次完成了一对多的转账即A的45元出账、B的10元入账、C的15元入账、D的20元入账。此时发生了退款,假设依据协议需要将已分账出去的钱退回后做退款。那么交易层需要先调用账务的转账(一对一转账),全部转账完成后调用账务退款。展开说下分账的反向处理,即三次一对一的转账,B出账10元,A入账10元;C出账15元,A入账15元,D出账20元,A入账。这么做的目的是中间如果有一笔转账失败,交易系统可以决定重试、退回、终止等,保证了业务的伸缩性。


对于账务抽象出的收款,向上延伸出了收单、充值等,对于出款延伸出了扣费、扣款、;对于转账延伸出了赔付等等。


上文省略了很多细节,如有兴趣交流欢迎加本人微信(微信号:littleSanPao)。


后续会和大家聊聊交易、合规政策等,欢迎关注。如需转载请注明出处,谢谢。

转载声明:本文转载自「三炮的自留地」,搜索「little3pao」即可关注。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存