首页 > 代码库 > 第三方支付架构设计之—帐户体系
第三方支付架构设计之—帐户体系
第三方支付架构设计之—帐户体系
一, 什么是第三方支付?
什么是第三方支付?相信很多人对这个名字很熟悉,不管是从各种媒体等都经常听到,可以说是耳熟能熟。但,如果非得给这个名词总结出一个概念,却发现很难准确和全面的表述清楚。不过关系不大,我们无法给出一个很准确的概念的时候,我们就列举一下实际生活中我们经常使用第三方支付的例子:支付宝,财付通,微信支付等等,这些就是我们国内目前在第三方支付市场中比较有影响力的第三方支付了。
搜索一下百度,所谓第三方支付,就是一些和产品所在国家以及国外各大银行签约、并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台。
在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖家货款到达、进行发货;买方检验物品后,就可以通知付款给卖家,第三方再将款项转至卖家账户。
从这个概念中,有几个关键点:
1, 需要跟各个银行签约,那么问题是第三方支付跟银行的关系是什么?
2, 用户通过第三方支付平台进行支付,那么资金是如何进入第三方支付平台的?
3, 商户通过接入第三方支付平台进行收款,那么资金最终又是如何结算给到商户的?
因此,我们要充分理解第三方支付平台,得从用户,支付平台,商户,当然还有背后的银行和监管机构等进行全面分析,只有充分理解这些关系,才能对第三方支付的账户体系有充分的理解和掌握,从而充分理解支付中的资金流。
我们知道,随着电子商务在中国的迅速崛起,电子商务必须要解决几个非常关键的问题,那就是:信息流,资金流和物流,信息流一般是通过电子商务平台进行解决,包括用户信息,商品,商户和订单等,而资金流,即支付和结算等相关方面一般是通过第三方支付平台进行解决,第三方支付植入到电商平台中,帮助电商平台解决资金在用户和商户之间的流转,甚至在c2c交易中,第三方支付还起到了中介担保账户的作用;而物流,是解决物品如何送到用户手中的问题,各种物流公司或者电商自建物流网络等都是解决物流相关的解决方案,对信息流和物流,我们这里不进行展开,本章重点侧重资金流的流转。
二, 什么是账户?
从会计学上来看,账户是根据会计科目设置的,具有一定格式和结构,用于分类反馈会计要素增加变动情况及其结果的载体。设置账户是会计核算的重要方法之一。
同会计科目分类相对应,账户按其提供的信息详细程度和统驭关系不同分为总账账户和明细账户,请注意,在设计IT账户系统中,总账户和明细账户是非常重要的概念,后面会重点分析。
而按照账户反映的经济内容不同可分为资产类账户,负债类账户,所有者权益类账户,成本费用类账户,损益类账户。
那么什么是会计要素?主要有6个方面:资产,负债,所有者权益,利润,费用,收入。
账户是有结构和内容的,账户分为左方,右方两个方向,一个登记增加,另外一方登记减少。账户的内容包括了账户的名称,记录经济业务的日期,所依据记账凭证的编号,经济业务摘要,借贷金额和余额等。
那么如何设计一个账户呢?从账户的结构和内容分析,一个账户需要记录账户变动的过程等,即借贷方向均需要进行记录,这里一般是通过账户流水来实现,即出入流水,同时,账户是记录会计要素变动结果的,因此需要根据变动的最终结果进行记录,即账户的余额。
账户 = 账户流水 + 账户余额
在具体实现中,系统对账户流水的操作和余额的操作必须是一个事务,即入流水必然导致账户余额的增加,出流水必然导致余额的减少。
那么有一个问题:借贷方向和账户流水的进出有什么关系?很多人很容易,把账户流入,即增加部分记为借,而把账户流产,即减少部分记为贷,但其实是不严谨的,或者是错误的(下面将重点介绍)。
三,账户的基本内容和结构
在账户的核算中,账户一般简化为“T”字账的形式,即包括账户名称,借方,贷方,发生额,借贷方余额和账户余额等。如下图:
账户的内部对账是:在一个指定的核算周期内,保证余额和流水的一致性。
(如果具体实现是通过db的事务机制,则DB本身就可以保证两者的一致性,如果不是,比如即流水,异步落地余额的情况,则需要按每天根据流水对余额进行调整或者纠正)
账户的外部对账是:保证账户操作的流水跟外部系统相关依赖流水的一致性。
四, 借贷复试记账法
所谓复试记账法就是针对发生的每项经济业务都要以相等金额在相互联系的两个或者两个以上有关账户中进行同时登记的记账方法。而借贷记账法是复试记账法的一种,它是以“资产=负债+所有者权益”为依据,以“借“和”贷”为记账符号,以“有借必有贷,借贷必须相等”为记账规则的一种复试记账方法。
借贷记账法的记账符号就是“借”和“贷”,用来反映经济业务增减变化的方向而已,本身没有特别的意义,在实际的操作中,我们把账户的左方规定记为借方,右方规范记为贷方,在任何一笔经济业务中,都必须同时登记相关账户的借方和贷方。
我们知道,每个账户都有借方和贷方,用来记录其对应经济业务的增减变化情况,那么哪一方登记增减,哪一方登记减少,则是要根据对应账户的经济性质决定的,即账户相对会计主体来说,是属于什么类型的账户。
1, 资产类账户
资产类账户,资产的增加登记账户的借方,资产的减少登记在账户的贷方,期末有余额,一般出现在借方。在一个会计期间,所有借方金额的累加为“借方本期发生额”,所有贷方金额的累加为“贷方本期发生额”。而资产账户的余额=借方期初余额+借方本期发生额-贷方本期发生额。
如,本人在招商银行账户A存入1000元,那么该如何记账呢?首先,我们要分析本人在招行的这个账户的性质,由于这是本人存储在招行的一笔资产,所以该账户对应我这个会计主体来说,是一个资产类账户,因此记账的借贷方向需要按照资产类账户的要求来进行,即增加记为借,减少记为贷。根据分析,本人存入1000到账户A,记账如下:
借:银行存款 1000元 (资产类账户,银行账户增加了1000元)
贷: 库存现金 1000元。(资产类账户,手中现金减少了1000元)
2, 负债类账户
负债类账户的记账规则跟资产类相反,负债增加记为贷,负债减少记为借,期末如有余额,一般在贷方,表明期末有债务实有额,负债类账户的余额计算:
贷方期末余额=贷方期初余额+贷方本期发生额-借方本期发生额。
3, 所有者权益类账户
所有者权益类账户的记账规则跟负债类账户一致:所有者权益增加记为贷,减少记为借。
4, 费用成本类账户
企业在日常经营活动中会发生各种各样的耗费,这些耗费在会计学上称为成本费用,它们是收入的抵减项目,在抵销收入之前,可以视为一种资产,因此成本费用类账户的记账规则跟资产类一样:增加记为借,减少或者转销记为贷,一般借方记录的增加额都要通过贷方转出,所有此类账户在期末转销后无余额,如有余额,出现在借方。
5, 收入类账户
企业取得的收入最终会使得所有者权益增加,因此收入类账户的记账方法跟所有者权益一致:增加记为贷,减少或者转销记为借,通常该账户期末无余额(因为期末收入都会转为所有者权益,如未分配利润等)
至此,一个账户的增加或者减少记为借还是记为贷,是跟该账户反映的经济内容有关系,而不是简单的增加就一定是借,减少就一定是贷,在实际的记账处理中,我们首先需要根据会计主体对记账的账户的经济性质进行分析,然后按照不同账户的记账规则进行处理即可。
五, 第三方支付账户体系介绍
前面我们从会计学的角度分析了账户的概念,结构和借贷记账法等内容,而这些基础知识对我们第三方支付来说是否非常重要的,它是指导我们如何更好的设计第三方支付中非常重要的---账户体系。
第三方支付机构涉及的账户类型是否非常多的,笔者根据主要的场景做了分类,主要有如下几类账户:
1, 用户在各个银行开通的账户。
这个概念非常好理解,我们每个人在相关银行开通的储蓄卡,存折,信用卡等等都是我们在银行开通的账户,在实际的支付中,用户银行账户是资金的输出方,通过银行系统,在用户授权的情况下把资金从用户的银行卡转移到第三方支付在银行开通的收款账户(见下面说明)
2, 第三方支付公司在各个银行开通的账户。
即第三方支付的银行账户,比如支付宝在招商银行设置的收款账户。那么第三方支付公司为啥需要在各个合作银行设置账户呢?其实道理非常简单,第三方支付公司本身毕竟不是银行,本身是无法直接接触和管理资金的,真正的资金流是通过银行系统进行的,用户通过网银或者快捷支付等支付后,用户的资金是少了,那么肯定有一个地方是多的,我们举一个例子:小明用支付宝在某商城A买了一件衣服100元,用自己的银行卡进行网上支付,假如小明的银行卡是招商银行的,并且支付宝和招商银行有合作关系,当发生支付的时候,其实支付宝只做了两个事情:
l 在用户授权下,调用银行接口把钱从用户的银行卡转移到支付宝在招商银行设置的账户上(该账户是支付宝专门接受用户的付款资金的)---由于这步是只发生在银行系统之家的,是真实的资金流。
l 第1步成功后,支付宝会对商户A记入一笔入账:100元(商户A会在支付宝申请一个商户账户,类似支付宝在银行申请一个账户一样)
从会计学的角度分析,支付宝在招商银行设置的账户对支付宝这个会计主体来说,是一笔资产(或者说是银行欠支付宝的钱),该银行账户是资产类账户,而另外一个方面,商户A在支付宝设置的商户账户对支付宝来说是一个负债类账户(因为这是欠商户的钱,后续需要结算给到商户),那么上面的支付流程,会计记账如下:
借: 支付宝招行银行账户 100元 (资产类账户,资产增加,记为借)
贷:商户A支付宝账户 100元 (负债类账户,负债增加,记为贷)
2,第三方支付自有账户体系
这个比较复杂,类似银行账户有对公账户和对私账户,第三方支付公司也有针对商户的B账户和针对个人的C账户。请注意,第三方支付自有账户体系是独立第三方支付在银行申请的账户的,是自有的账户体系,完成资金在第三方支付体系的闭环和结算等,比如财付通用户余额,支付宝余额,微信支付余额等都是第三方支付账户to client的账户。
个人账户,我们称为c账户比较简单,而商户账户由于涉及到结算和提现等操作,按照不同的资金类别设置不同账户的设计原则,商户账户一个商户号其实对应两个账户:b账户和c账户,b账户是商户结算账户,用于交易的收款等,商户本身无法直接操作,是第三方支付进行结算的账户,而商户c账户则是商户可以直接进行操作的账户,如可以进行提现,充值和支付等等。
3, 各个银行在第三方支付公司设置的账户
这个账户是一个总账账户,一般用于记录资金进入第三方账户体系或者资金逃出第三方账户体系的,它一般不记录余额,而只是记录流水,方便跟各个银行进行对账。
六, 各种操作的资金流和记账规则
1, 用户通过银行卡快捷支付进行充值100元。
资金流:资金从用户银行卡进入第三方支付在对应银行的银行账户,同时对对应的第三方c账户记入一笔充值入账。
借: 第三方支付在银行的账户 100元 (资产类账户)
贷:某用户在第三方支付的c账户 100元 (负债类账户)
这个需要重点分析,其实这步操作后,资金进入了第三方支付的自有账户体系中,使得自有账户体系的资金盘子增加了100元,在实际的设计中,为了能够高效跟银行进行对账,每个银行会在第三方支付设置一个对应的账户,我们成为银行的第三方支付账户,比如招行在支付宝的账户,用户通过招行卡支付充值后,除了银行系统本身的记账外,第三方支付会在该账户同步记录一笔流水,使得所有通过招行进入自有账户体系的资金流都可以通过这个流水看到,我们理解为这个账户是一个总账账户,各个用户的c账户是一个分账账户。
2, 用户通过银行卡快捷支付给商户A支付100元
资金流:资金从用户的银行卡进入第三方支付在对应银行的银行账户,同时对对应的商户A的B账户记入一笔支付入账。
借:第三方支付在银行的账户 100元 (资产类账户)
贷:某商户A的B账户 100元 (负债类账户)
3, 用户通过第三方支付余额账户提现100到自己的招行卡
资金流:第三方支付首先把该用户余额的100元先冻结,然后调用银行接口,从自己在银行的账户中转账100元到用户的招行卡上,成功后,对该用户的余额冻结的100元进行解冻扣款。
借:某用户在第三方支付的c账户 100元 (负债类账户)
贷:第三方支付在银行的账户 100元 (资产类账户)
可以看出,该步骤的记账给第一部分的充值时相反的。
4, 自有账户体系的c2c转账
由于没有涉及到用户银行卡的操作,该部分操作没有涉及到真正的资金流变动,只是账务在第三方支付公司自有账户体系的转移而已,即从一个用户的c账户转移到另外一个c账户,由于c账户对第三方支付公司来说,都是负债类账户,因此记账如下:
借: 转出的c账户 100元 (负债类账户,转出表示负债减少,记为借)
贷:收款的c账户 100元 (负债类账户,转入表示负债增加,记为贷)
5, 自有账户体系的b2c支付
跟4一样,没有涉及到银行接口的调用,因此没有发生真正的资金流的流动,账户只是在第三方支付公司的自有账户体系转移而已,即从一个用户的c账户转移到另外一个商户的B账户。
记账如下:
借:支付的c账户 100元
贷:收款的商户B账户 100元。
综上,第三方支付的账户体系还是相当比较简单,一般是资产类账户和负债类账户比较多,会计处理上也比较简单。
第三方支付架构设计之—帐户体系