出款系统可以分为这几个主要模块:应用层、服务层、业务层、核心交易层、渠道网关层。
出款业务是指,从支付机构的角度来看,资金方向是流出的,从支付机构的客户备付金账户付款到用户/商户的账户,最常见的业务类型包括:个人提现、商户结算、商户代发等。
那么应该如何设计出款系统?出款系统包括哪些模块呢?
一、设计思想
首先先来思考一个问题,在做出款系统设计的时候,应该从哪些角度进行分析?
我们经常说,产品设计时,应当从使用者的角度去思考使用者的需求是什么?在做出款产品设计时也是一样的道理。
那么出款系统的使用者有哪些?其实不仅仅有普通用户,还有不同角色的使用者,包括:
用户:
包括个人用户和商家用户。对于用户来说核心诉求是,快速、简便发起提现/代付/结算请求;资金快速到账。另外,对于个人用户和商户用户来说,都需要能随时了解交易进展和准确、尽快得知最终交易结果;如果交易失败,需要了解具体的失败原因以便更正后能成功提现/代付/结算。
财务:
对于财务来说,核心诉求是,有足够的资金用于当前出款交易;资金安全,避免出现多付款的情况;对于差错交易进行后续差错处理,保证账务无误。
通道运营:
对于通道运营的同学来说,核心诉求是,提高通道的出款成功率,同时降低成本。
风控:
风控同学的核心诉求是,根据发起交易的设备号,使用适当强度方式的校验用户身份;能对达到一定风险值的用户进行出款交易拦截。
因此,在整个出款系统的设计中,需要综合考虑不同角色的诉求进行产品设计。
二、出款系统涉及哪些模块?
我将出款系统分为5个层:应用层、服务层、业务层、核心交易层、渠道网关层。
具体包括以下模块:
出款应用层:
负责面向商户或用户,是出款服务的最前端入口。
出款服务层:
负责与外部应用层进行交互,并对调用方的基本信息进行校验。
这一层对应生成出款请求号-request id。
出款业务层:
负责处理与业务相关的流程。不同的业务类型,如个人提现和商户结算,在流程处理上会有差异,因此需要根据不同业务进行处理。这也是为什么需要拆分出款业务层和出款核心层的原因之一。
这一层对应生成出款订单号-order id。
出款核心层:
负责处理核心出款交易流程,这部分流程和前端业务没有关系,可以理解为是各出款业务最终都必经的主流程。包括出款资金审核、出款对账、出款差错处理等模块。
这一层对应生成出款交易单-transaction id。
渠道网关:
负责连接支付机构出款系统和外部通道。接收内部出款系统的外发渠道请求,包括交易请求和交易结果查询请求等,组装报文后外发到外部通道。T+1日获取通道提供的对账文件。
这一层对应生成渠道流水号-channel id。
整体订单流转流程为:
1. 用户或商户每次发起出款请求,都会对应生成一个request id,即出款请求号;
2. 流到出款业务层之后,一个request id对应生成一个order id, 即出款订单号;
3. 流到出款核心层后生成transaction id,即出款交易单。当原交易因通道异常导致交易失败而重发交易时,一个订单会对应多个交易单;
4. 流到渠道网关后生成channel id,即渠道流水号,一个transaction id对应一个channel id。
在出款系统内部,需要同时关注订单、交易单和渠道流水信息;而用户或商户在前端看到的信息则是订单层面的信息。在产品设计的时候需要注意,用户希望看到的是什么信息,那么订单层面需要将信息进行一定的处理后再面向用户展示。
后面的篇章将按照层级结构分别介绍,每个层级的每个模块扮演的角色是什么?在设计时分别需要考虑哪些因素?