计费系统是三方支付机构重要的子系统,三方支付机构最核心的收入来源是赚取手续费差值(手续费差值=收取的商户手续费-渠道收取的手续费),合理收取商户的手续费是支付机构得以存活的保障。要保证收取商户的手续费比渠道收取的手续费略高,但也不能太高,太高会给商户造成资金上的压力,在行业内失去党争力。所以计费系统要解决的核心问题是,既要保证收取的手续费能够让支付机构很好的活下去,又要保证不能给商户造成太大的压力,失去价格的竞争优势。但大部分支付机构初期的计费规则都较为简单,通常按百分比收取交易手续费。
业务简介
在支付机构成立之初,更多的工作重心放在了如何引流,如何留存商户,要保证支付的高效、结算的快速,所以大部分支付机构在系统建设初期都未对计费系统的整体规划足够重视。后期由于业务模式的演变、产品线的扩大,计费策略越来越复杂。例如,市场营销活动、合作商户个性化需求等,导致只能不停对计费系统打补丁。计费系统的先天不足导致记账、成本板算、分账、分润等诸多重要业务根本上的混乱。银行、基金等传统金融机构对计费系统的要求较低,计费策略都较为简单。而三方支付偏互联网的服务属性,要求其支付机构支持各种灵活的计费策略。
设计好的计费系统首先要弄清楚两个概念:渠道手续费和支付机构手续费。
- 渠道手续费
三方支付机构通过银联/网联与银行进行交互,每一笔支付订单,只要经过银联/网联,都会收取相应的手续费,我们称之为渠道手续费。渠道手续费通常根据行业的不同会收取不同的手续费,比如教育、医疗这些服务行业通常按照 0.2% 的费率进行收取,像电商、游戏这些行业通常按照 0.6% 的费率来收取。
2.支付机构手续费
商户通过支付机构进行交易,支付机构也会收取相应的手续费,这部分费用我们称之为支付机构手续费。支付机构的收入大多来自收取的手续费,但是渠道也会收取支付机构的手续费,所以支付机构的利润主要是支付机构收取的手续费和渠道手续费的差值。例如一笔交易的金额为1000元,支付机构按照0.6%的费率收取手续费,这笔订单会收取 6 元的手续费,渠道按照 0.2% 的费率进行收取,这笔订单会收取 2 元的手续费,最终支付机构的利润为 6元—2元=4元。
支付机构无法控制渠道手续费,所以这部分不在支付机构计费系统的考虑范围之内。支付现构能够决定的是收取商户的手续费,所以主要针对支付机构手续费来设计计费系统。
我们先总结一下三方支付计费子系统架构设计方法论。采用 5W1H 框架来思考计费子系统的架构。
Why:为何收费?
我们开车经过高速公路时要收取一定的高速费,高速费用于高速公路的日常维护,从而保证行车的安全与便捷。三方支付机构提供的支付渠道和高速公路是一个概念,交易通过支付渠道顺利完成支付动作,也要缴纳一定的渠道维护费,有了渠道维护费,支付机构可以更好地提供支付能力,接入更多的银行,兼容更多的支付方式,保证支付的便捷与安全。
What:什么费用?
除了收取渠道的手续费,支付机构根据自身的特点可以给商户提供相应的服务,然后赚取对应的服务费,比如利用支付机构的收银台能力提供广告服务以收取广告费,还可以给商户提供一些营销策略,收取营销服务费。以广告费为例,商户在三方支付平台的 PC 端和手机 APP 上发布宣传广告,三方支付机构会收取一定的广告费用。而此笔广告费用的多少取决于三方支付机构的知名度和使用客户的覆盖度,在三方支付机构收益中占据较低的比例。三方支付机构期用还有另一个重要盈利点——服务费,主要包括理财相关业务的服务费、代缴费业务中与三方支付机构以外的三方合作商户收取部分的服务费用两种表现形式,即三方支付机构为客户解决不同的支付方案,除了提供支付业务,还有其他一系列的增值业务。而这种模式已经渐渐成为各个三方支付机构的核心利润点。
When:何时收费?
收费的模式有很多种,可以定义多样的计费策略,比如先用后付、先付后用、实时收费、周期计费等。还以高速费类比,我们每次上高速的时候是不会收费的,下高速的时候根据路程计算费用,把高速费交给收费人员,这就是一种典型的实时计费的模式。实时收费的特点就是实时计算费用、收取费用。后来发现人工收费很耗费时间和资源,并且容易造成交通拥堵,随着科技的发展, ETC 就应运而生,可以先把钱充在 ETC 相关的银行卡里,经过收费站后不需要人工介入,直接从 ETC 相关的银行卡预存的费用中扣除即可,这就是先付后用的计费方式。在计费体系里还有类似京东商城的先用后付,可以先让商户使用支付渠道进行交易,在结算的时候收取相应的费用。
Who:谁来收/付费?
收付问题是三方支付机构解决的最核心的问题,同样计费也绕不开这个问题,手续费谁来收、谁来付要提前定义清楚,收取的手续费应该从哪个账户出、到哪个账户去,在设计系统的时候也是重中之重。付费的主体是商户,收费的主体是三方支付机构,在账户体系中,三方支付机构有自己的账户,商户也会有自己的各类账户,在收取费用的时候通常将费用从商户的余额账户流转到三方支付机构的余额账户。
Where:在哪儿收费?
我们经过高速路口收费站的时候收费员或 ETC 收取的费用是根据行驶里程来计算的,我们需要缴纳根据行驶里程计算得出的费用。同样三方支付机构手续费的收取也要经历两步:计算+收取。在订单支付完成之后,需要计算应该收取的费用是多少,在结算的时候按照计算的费用收取即可。广告费、营销费通常是在活动之前预存相关的费用,实际活动的时候使用的费用在预存账户中扣除即可。
How:如何计费?
计算费用需要有相关的依据,通常商户入驻三方支付机构的时候会签订对应的计费包,根据商户的从业类目签订不同的计费包。例如,从事教育行业的商户可以签订费率为0.38%的计费包,从事电商行业的商户可以签订费率为0.6%的计费包,一个商户可以签订多个计费包。收取费用的时候根据交易的类型来确定计费包(比如教育产品可以使用教育计费包),然后根据计费包的费率来计算应收费用。另外,三方支付机构为了吸引商户,通常也会做一些优惠活动,计算费用的时候也需要考虑相关优惠活动。
系统设计
设计原则
根据计费系统的业务特点,设计计费系统的时候可以考虑按以下几方面的因素。
非核心功能解耦:非核心功能解耦指的是不在核心流程中的功能单独处理,避免影响主流程,如工具类、查询类等旁支功能。解耦带来的好处多种多样,首先是故障异常的解耦,解耦出来的模块其稳定性、性能甚至逻辑问题都不会干扰核心流程,其次是当真正的故障来临时,这些非核心功能都可以做到一键降级。计费系统不在支付主链路上,三方支付机构首要的任务是保证支付的高效,所以计费系统的数据可以通过消息队列的形式来获取,做到异步化,不耦合在支付流程中。
防御性编程:防御性编程是一种系统设计思想,它是为了保证对程序的不可预见的使用不会造成程序功能上的损坏。具体在日常系统设计上有两部分,首先对所有外部依赖保持高度不信任,所有三方依赖都需要有降级兜底方案,尤其是涉及核心功能的依赖,如数据库。在计费时,我们对大量的核心依赖都有降级兜底方案,如计费规则的存储有三层降级兜底方案,从内存到缓存再到数据库。其次是在日常的编码过程中,需要确保每个函数的健壮性,对于入参,不能做预设时应及时返回错误。墨菲定律告诉我们不应该心存侥幸,对于日常的编码工作,要将稳定性时常放在心上。
计费策略
电商通常会有很多营销玩法,以吸引客户,比如满减、打折等。三方支付机构同样会采取一些计费策略来吸引商户入驻和留存商户。这里介绍两种计费策略:阶梯计费和预付费。
阶梯计费就是对费率划分一些等级,达到某个等级就享受什么样的费率折扣。阶梯计费会根据交易额设置费率,比如月支付金额在100万元以下享受的手续费费率是0.65%,100万元到500万元享受的手续费费率是0.6%,500万元以上享受的费率是0.38%。
预付费是让商户提前缴存一定的费用到三方支付机构,三方支付机构给商户开设专门的计费账户,商户缴存的费用统一保存在计费账户中,之后的每笔交易产生的手续费都会从计费帐户中扣除。针对预存手续费,三方支付机构会给予一定的优惠策略,以吸引商户预存资金。这样样做对三方支付机构来说,一来可以提前变现,二来可以留存商户。
架构设计
设计原则中提到计费系统并不在支付主链路中,所以尽量做到和支付解耦,如果计费系统出现问题,则不影响客户正常支付交易的完成。
计费系统的数据来源主要是支付核心和结算系统,支付核心完成支付交易后,会发送支付成功消息给计费系统。发送支付成功消息就是为了和支付业务解耦,计费系统通过监听异步消息来计算应该收取的手续费,这样实现了异步化,极大地提升了支付效率。同时计费系统也要提供 RPC 接口供清结算系统调用,在计算广告费、营销费的时候由清结算系统和计费系统直接交互,目的是防止超出预算,涉及实时资金处理的业务不能做成异步消息处理。
计费系统提供消费消息的功能,获取计费消息之后,会进行参数校验等操作,如果操作的过程中由于系统异常导致流程无法进行,则会把消息重新放入消息队列,等待下次重试。同时为了防止一笔支付单重复收费,计费系统也要进行幂等判断,通常根据支付单号来进行幂等判断。一笔支付单号只能收取一笔手续费。同时计费系统提供计费规则的维护、费用的计算、费用计算结果通知的功能。计费规则在商户入驻的时候进行签约,然后生成计费包供商户使用,计费规则的管理包括计费产品的定义、计费协议的定义、计算手续费规则的定义和存储等。计费系统收到支付消息之后会根据商户签订的计费规则计算手续费,计算费用是计费系统最核心的功能,根据规则计算好费用之后,需要通知清结算系统费用计算的结果,以便后续进行正常的结算。手续费计算的结果也会被记录起来,以便后续查询时使用。
三方支付机构针对每一笔订单收取的手续费并不是真正的收益,因为三方支付机构还需要给渠道支付相应的费用。如果要计算三方支付机构具体通过手续费盈利的情况,则可以把渠道给的对账单中的费用和三方支付机构收取的费用进行核对,这样就能够知道单笔支付交易的盈利情况,进而分析出针对商户的盈利情况,最终得出通过手续费实现盈利的情况。