⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 网络 「网络」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

前言

账户体系和会计的设计是整个支付系统的底层基础,是支付系统在基础支付服务的基础上,为个人用户及企业商户提供的对于资金收、付、管的服务。本文所说的账户体系定义所有的操作均以交易的形式发生,但从金融核心系统的发展来看,将由以交易驱动转变为以用户为中心的按照产品进行管理的账户体系。

一. 交易模型

前文说道,本文所说的账户体系定义所有的操作均以交易的形式发生,即账户的变动均基于交易而发生。对于账户的处理,需要依据业务,结合相应的产品体系,建立交易模型。

如下:

  • **产品:**如B2C网银、B2B网银、快捷支付、代收代付、身份验证、账户验证。
  • **交易类型:**在产品的基础上,拆分出来的粒度更小的交易,如B2C网银支付可以拆分为收单、结算。
  • **账户体系:**基于交易发生的账户变动,如C1用户转账至C2用户。
  • **账户体系:**根据不同的交易类型对于会计科目进行设置,每笔交易会形成相应的会计分录,用于记账。一般需支持一借一贷和一借多贷,即每笔交易都会至少生成一组会计分录。

下面以B2C网银收单为例说明:

假设条件:

  1. 用户使用中国银行深圳分行B2C网银向企业商户下单购买商品。
  2. 支付公司结算至企业商户余额户。

二. 账户体系

账户按照所有权可以区分为个人账户、企业账户、内部账户。个人账户是面向个人用户开设的电子账户,如余额户记录用户在支付平台的余额,企业账户是面向商户开设的账户,如待清算户,基本户。内部账户是支付公司为自身业务开展的需求而为自己设立的账户,如备付金账户、长款户、短款户。除此之外,支付系统还可以根据业务需要设置各种不同的账户类型。

所有的账户都记录着两方面的信息

(1)账户的基本信息

  • 账户号
  • 账户类型
  • 余额
  • 币种
  • 账户状态
  • 开户时间

除此之外还可以设置对账户的权限进行控制,如:

  • 是否允许充值
  • 是否允许提现
  • 是否允许余额为负

(2)账户的流水信息

包括开户以来的所有账户变动变动信息,何时存入资金,何时取出资金,何时发生账户金额冻结等。

账务流水

账务流水包括一个账户所有状态变化的过程信息。账户管理系统对外提供了开户,记账、账户信息变更、账户信息查询等一系列接口服务。

如下表:

账户用例(仅记录商户侧)

(1)开户

商户A是一家电商平台,接入支付系统快捷支付,支持借记卡和贷记卡;对于手续费征收,经协商,采取收支两线,并预存手续费10000元,交易手续费费率为1%;同时因为该商户资质较好,交易时采取D0实时结算。

商户开户,根据商户交易特点,需开通以下账户:

  • 待结算户:用户在商户交易完成后,资金进入该账户。
  • 基本户:商户的余额户,可体现,交易结算后,资金进入该账户。
  • 手续费户:专门用来存放手续费的账户。

开户后各账户余额如下:

(2)收单交易

某用户上午9点在A电商平台上使用快捷支付购买1000元的手机,交易完成后,A商户待结算户增加1000元

手续费按照1%标准征收,由商户支出,故该笔交易手续费为:1000*1%=10元,计入手续费户,手续费剩9990元。

支付公司设置D0结算时间节点为每天下午4点。下午4点后,待结算户资金结转至基本户。

账户变动如下:

(3)提现

A商户在下午4:30时,发起提现600元,商户提现手续费按笔征收,每笔2元。

商户提现600后,基本户剩400元,同时每笔需付出手续费2元,手续费户剩余9988元。

账户变动如下:

三. 会计核算体系

按会计科目所反应经济内容的不同一般可分为资产类科目、负债类科目、资产负债共同类科目、所有者权益类科目、损益类科目。

资产类科目余额方向在借方,负债类科目余额方向在贷方,资产负债共同类科目根据实际情况可借方可贷方。

会计科目分为总账科目和明细类科目。

  1. 总账科目,又称一级科目,是总括反应会计要素的科目,如银行存款、应收账款。
  2. 明细类科目,是对总账科目所包含的内容的细化所形成的科目。在明细科目中,根据需要设计二级科目、三级科目。其中,没有下级的科目称之为叶子科目。注:只有叶子科目下才可以开账户。

常见会计科目:

(1)资产类科目

  • 银行存款
  • 应收账款
  • 在途调拨

(2)负债类科目

  • 个人账户余额户
  • 公司(商户)账户余额户
  • 应付账户

(3)共同类(主要是待清算)

  • 待清算充值款项
  • 待清算提现款项
  • 待清算支付款项

会计科目与账户的对应关系见下图:

四. 业务流程

1. 总体交易流程

(1)业务系统

  • 交易网关:处理个人或者企业用户的充转提业务
  • 资金调拨等系统:进行资金调拨时,调用账户记账;长短款的处理。
  • 其他系统:其他业务系统的账户记账请求

(2)账户系统

记录每笔交易的交易收付记录

(3)会计系统

按照企业会计分录流水记账,记账采用复式记账法。

(4)清结算算系统

  • 交易清分,算出给每个账户打多少钱,同时从每个账户收多少钱;
  • 交易结算出款:调用银行/通道代付接口,自动出款。
  • **对账:**核算通道与支付系统的应收应付。注:对账业务流程最好不要跟清算、结算勾连在一起,跟上游通道对账与给商户付多少钱最好不要业务先后关系。

2. 账户、会计处理流程

来自支付系统交易,一笔交易至少会在账户系统中产生一条账户流水记录(明细账),同时会在会计系统中根据业务的需要产生一套或者多套会计分录流水,账户余额与会计余额相对应。概括之,账户系统是提供对外客户的账户支持,客户的查询余额,账务明细均来自于此;会计系统是为了内部核算管理的需要而设立的,所有的银行资金清算与结转都需要会计系统的支撑,内部户与外部户的资金核算管理也需要会计系统,两个系统相互依赖,账户系统是会计系统的前置。

记账过程如下:

  • 在前端支付订单产生之后,支付系统按照订单内容封装成各类交易,并组成交易报文,通过银行通道提交到银行进行支付;在银行完成支付交易指令的处理后通知到支付系统,支付系统根据银行报文内容通知到商户订单的处理结果之后,交易处理过程即告完成。
  • 为提高交易性能,交易必须与账务分离,以提高交易处理性能和效率,从而有针对性的分块解决复杂业务逻辑。因此,在支付交易处理完成之后,前端交易处理系统根据业务场景将交易分实时和非实时记账的方式,将成功的交易以流水的形式提供给账户系统。整个交易过程,在支付核心送账户系统时其实已完成。
  • 账务的处理分为账户系统处理和会计系统处理,账户是会计的前置。交易流水到达账户系统之后,账户系统为每笔交易分配账务流水号,账务流水号的形成,需要账户前置调用计费服务,算出商户的交易手续费。账户流水形成后,若是非实时记账,则直接通知业务系统记账完成,之后再开始记录分户账和更新余额,若是实时记账,则系统开始记分户账与生成账户余额,余额更新完毕后,通知业务系统记账完成。
  • 账户系统记账完毕后,将定时以批量文件的方式送会计记账,同理,会计记账也将为每笔交易分配会计流水,对于会计记账,需支持一借一贷、一借多贷和多借一贷的记账模式。会计记账也分为记分户明细账和更新会计余额。
  • 会计记账完毕后,每日日终时,进入日终批处理过程,日终批处理是对日间没有处理完毕,以及不需要在日间处理的任务进行批量处理。在记账中,日终批处理主要指业会核对,即账户系统余额与会计系统余额间的核对。

至此,整个记账处理过程才算真正结束。

文章目录
  1. 1. 前言
  2. 2. 一. 交易模型
  3. 3. 二. 账户体系
    1. 3.1. 所有的账户都记录着两方面的信息
    2. 3.2. 账务流水
    3. 3.3. 账户用例(仅记录商户侧)
  4. 4. 三. 会计核算体系
  5. 5. 四. 业务流程
    1. 5.1. 1. 总体交易流程
    2. 5.2. 2. 账户、会计处理流程