文档章节

第三方支付架构设计之—帐户体系

村长杨京京
 村长杨京京
发布于 2016/09/01 15:35
字数 6464
阅读 183
收藏 3

第三方支付架构设计之—帐户体系

一,      什么是第三方支付?

        什么是第三方支付?相信很多人对这个名字很熟悉,不管是从各种媒体等都经常听到,可以说是耳熟能熟。但,如果非得给这个名词总结出一个概念,却发现很难准确和全面的表述清楚。不过关系不大,我们无法给出一个很准确的概念的时候,我们就列举一下实际生活中我们经常使用第三方支付的例子:支付宝,财付通,微信支付等等,这些就是我们国内目前在第三方支付市场中比较有影响力的第三方支付了。

       搜索一下百度,所谓第三方支付,就是一些和产品所在国家以及国外各大银行签约、并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台。

在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖家货款到达、进行发货;买方检验物品后,就可以通知付款给卖家,第三方再将款项转至卖家账户。

 从这个概念中,有几个关键点:

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元。

综上,第三方支付的账户体系还是相当比较简单,一般是资产类账户和负债类账户比较多,会计处理上也比较简单。

 笔者在上一篇blog<<第三方支付架构设计之—帐户体系>>中已经稍微全面的阐述了第三方支付架构设计中的账户体系,在该体系中,其实涉及了各种各样的账户:银行侧账户(包括用户在银行侧的账户:用户借记卡,信用卡,商户在银行侧的清算账户,结算账户等),第三方支付自有账户(跟银行侧账户比较类似,包括用户在第三方支付公司的账户和商户在第三方支付公司的账户)等。

          我们知道,第三方支付本身是不直接接触实际资金的,所有的资金流必须走银行系统进行,因此这里涉及到的实际资金流的时候就会把交易请求转接到银行系统进行,

银行侧账户我们大家相对比较了解,本章暂时先放一下,后续介绍快捷支付的时候,我们会进一步详细的讨论。

         本章我们重点会放在第三方自有账户体系中,大家知道,第三方支付公司都会建立自己的账户系统,比如国内主流的第三方支付公司:支付宝,财付通等,都有自己的账户体系,具体在产品上表现为:支付宝余额,财付通余额,这是比较官方to c的账户,还有其他二级账户如:理财通余额,积分子账户,微信钱包余额,红包余额等,另外还有to B的商户账户,我们常说的商户接入需要申请商户号就是这个道理。

         那么,这里有个问题:第三方支付搭建自有账户体系的必要性和目的是什么?让用户直接使用银行的账户本身不就是可以了吗?这里没有简单的答案,但笔者认为有几个方面的因素是非常重要的:

     1,资金沉淀。

     通过建立自有账户体系,对用户的资金进行沉淀,这本身是一个比较大的资金池,用户通过充值,支付等把资金转入了第三方支付公司在相关银行的清算账户-客户备付金账户,同时,在自有账户体系记录了一笔虚拟资金的入账,即增加等额的余额。

通过自有账户体系对用户资金进行管控,当然该账户的资金会受到监管,第三方支付公司也能够获取对应资金的利息收入,并且这些资金如何进行盘活目前也是第三方支付公司在不断思考和需要突破的核心问题:如是否可以进行授信支付?贷款?

    2,产品粘性需要。

     在支付行业,特别是互联网金融,两个东西是非常关键,甚至是致命的:账户和入口。账户沉淀了用户的资金,是交易的基础,所谓交易是解决资金在不同账户之间进行流动的问题,为了有效的控制资金在账户之间转移的原则性和业务规则,在设计上引入了订单,因此,从这个角度看,交易的核心处理对象是订单和账户。只有用户的资金在你的系统里面,用户才会持续的使用你的服务,否则用户的转移成本基本是0。

    3,系统闭环需要。

     我们知道,在架构设计当中,有一个非常重要的方法论:系统闭环和自愈能力。所谓系统闭环就是说通过划分边界定义各个系统,其中相对可控的是属于内部系统,不可控的或者可控性更弱的属于外部系统,而我们总是希望更多的纳入到可控系统中,这样,我们就能进一步拥有对系统进行持续优化,快速问题定位,治标到治标的系统演进,使得系统更有效的,更低成本的,更高健壮的,更安全的,更可管理的,更高性能的服务我们的业务。

而通过创建自有账户,把用户的资金转移到自有账户体系,后续的支付和交易等均基于自有账户体系进行,就能够达到上面说的目标:系统闭环,提升支付的成功率和性能,改善用户体验。

二,自有账户体系的分类

      类似银行侧账户体系,银行侧账户有对私和对公账户,也就是说是个人和企业账户是否分开的,类似的,第三方支付公司的自有账户体系也是分为个人账户和商户号。

     个人账户:个人账户主要是面向to Client的账户体系,如财付通余额,用户通过注册财付通后系统分配给用户的一个账户,该账户支持充值,支付,提现,转账等功能。

这里有个特点:第三方支付个人账户的资金是没有利息收入的,一般也没有账户管理费的概念。

    商户号: 第三方支付公司面向商户to Business的账户体系,对商户号的管理相对复杂,也是第三方支付公司的收费对象,为了进行收费等账户管理手段的实施,参考银行账户体系(一般包括清算账户和清算账户),商户号其实对应了两个账户,一个是B账户,另外一个是C账户,B账户可以认为是清算账户,用户支付后资金后首先会在B账户记录入账流水(一般无需即余额),通过结算到对应的C账户-扣除平台手续费后入账到C账户,而C账户则是商户可以直接操作的账户,如进行提现到银行卡等。

 

三,自有账户体系的支付流程

       1,用户充值进入自有账户体系:

       2,用户提现逃离自有账户体系:

       3,C2C转账:

       用户直接相互转账到对方的余额。

       流程:

       1,转出方账户: 扣除资金

       2,转入方账户: 增加资金

       实现方式上可以考虑通过强事务保障1和2的原子性

 

       4,C2B支付:

       最常见的支付;

 

       5,B2C转账:

       商户打款,中间账户;

 

      6,C2B2C支付:

       淘宝的担保交易模式。

 

  --- 待细化...

 

本文转载自:http://blog.csdn.net/tenfyguo/article/details/43350755

村长杨京京
粉丝 161
博文 876
码字总数 904789
作品 0
杭州
程序员
私信 提问
开源的 PHP 电子商务系统--Magento

Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。 特点 Magento设计得非常灵活,具有模块化架构体系和丰富...

匿名
2008/09/06
273.9K
23
Magento的网友评论

1.介绍 Magento是一套专业开源的电子商务系统。 2.特点 Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。 Magento 是一款新的专业开源电子商务平台,...

红薯
2009/12/11
929
22
启赟金融 CTO 马连浩:跨境支付系统架构

10年支付行业老兵 马连浩, EGO 上海分会会员、启赟金融的技术合伙人& CTO。 我在 2017 年加入启赟金融(以下简称“iPayLinks”),之前先后在理光中国、盛大网络、新浪支付和中国平安、利得基...

赵新龙
2017/12/25
0
0
数据库下半场财付通京东金融正面交锋!

  【IT168 评论】移动金融市场现在基本被三大互联网厂商分割:支付宝(阿里巴巴)、财付通(腾讯)、京东金融(京东)。能让这三大企业都凑齐的场合恐怕不多,更别说正面交锋了。在SACC大会《数据...

it168网站
2017/10/23
0
0
互联网账户体系开发,驻场时间3个月左右800元一天

需要3-5名满足本需求所述的能力要求的中级java开发工程师驻场开发。驻场时间3个月左右。 岗位职责: 1、从事第三方支付平台的设计与研发; 2、参与产品功能和架构的设计,核心代码的开发; ...

wapdm
2016/03/31
4
3

没有更多内容

加载失败,请刷新页面

加载更多

Java8

package com.shi.lambda;import java.util.Arrays;import java.util.List;import org.junit.Test;import com.shi.model.Employee;/** * 初始化案例 * @author xiaosh......

小小小施爷
23分钟前
1
0
c# 动态编译代码

有时候做计算一些东西时候,算法一直变更,写在程序需要一直调整,因此算法写在cs文件,然后动态调用内部的方法去计算判断,只需变更cs文件即可。 static void Main() { Stopwatch watch = n...

朝如青丝暮成雪
23分钟前
3
0
好程序员技术分享html5和JavaScript的区别

好程序员技术分享html5和JavaScript的区别,HTML5广义上讲是前端开发学科的代名词,包含HTML5、CSS3及JavaScript三个重要的部分,是运行在浏览器上应用的统称。如PC端网站、管理系统、手机网...

好程序员IT
26分钟前
2
0
tomcat 与 spring boot 设置虚拟路径

tomcat 设置虚拟路径 <Context path="/uploadDir" docBase="/data"/>path是请求访问的路径docBase是服务器存储文件的路径,Linux 根目录下 data spring boot 虚拟路径设置 registry.addRe......

kdy1994
29分钟前
1
0
var ,let ,const 的区别和共同点

一、let和var区别 1.关于变量提升,var能变量提升,let不能 // 关于var 如下所示console.log(a); //输出undefined,此时就是变量提升var a = 2; console.log(a); //2 //相当于下面...

MrBoyce
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部