上篇文章介绍了出款系统的设计思想和整体包括哪些模块(回顾文章——《如何模块化设计出款系统(一)》。今天,笔者将与大家讲讲最上层的出款应用层和出款服务层。
一、出款应用层是做什么的?
什么是出款应用层?
——出款应用层负责面向商户或用户,与商户和用户发生实际交互,是出款服务的最前端入口和出口。
我们按时间顺序来看,前端和用户/商户的交互可分为交易事前(收单前)、交易事中(收单后)和交易事后:
事前是指用户/商户正在进行交易操作,但出款系统未收单,也就是说,信息流未流到出款服务层,还没有生成request id。
事中是指用户/商户正在进行交易操作,且出款系统已收单,也就是说,已经流到了出款服务层,已经生成了request id。
前端入口一般包括三种:
商户门户:指支付系统提供给商户使用的后台,商户可在商户后台发起出款交易,如商户代付、商户提现等。
API:指支付系统给商户提供的交易接口,商户通过接口对接,直接发起交易。
我们一起来看看:这三种入口进来的出款交易,交互流程是怎么样的?
1. 用户前端
面向用户的出款交易主要包括:用户提现、转账到他人账户余额、转账到他人银行卡。
下面以用户提现为例,按交易发生的顺序介绍下交互流程。
收单前:
用户选择提现,进入提现流程。
用户选择提现到哪张银行卡:为了简化用户的操作流程,前端可直接展示用户的已绑卡列表让用户选择。另一方面,合规要求只能提现到本人储蓄卡,因此,可选择的已绑银行卡列表需限制卡类型为储蓄卡。如果用户没有已绑定的储蓄卡,再引导用户绑定储蓄卡。
用户输入提现金额:提现金额不能大于账户可用余额。因此前端需提前告知用户当前账户余额是多少,当用户输入的提现金额超过可用余额,则做相应的提示。
用户确认提现,出款服务层收单。
收单后:用户输入支付密码/指纹/短信验证码等身份校验信息。使用何种强度的验证方式根据风控规则运算得出的用户风险等级决定,风险越高,验证强度越高。
事后:用户查询账单:在账单中可查看提现进度。
2. 商户门户
商户门户是专门面向商户提供服务的后台,商户可在后台发起商户代付和商户提现等。
以商户批量代付为例,交互流程为:
收单前:
商户以文件形式上传批量代付信息,包括账号、户名、金额等。
商户管理员审核交易,出款服务层收单。
收单后:
商户输入支付密码等身份校验信息,身份校验方式也是由风控运营同学的规则决定,目的是对发起交易方身份进行校验。
但是,和个人用户相比,商户有入网审核流程。有问题的商户,在审核环节一般已经被拦截了。
另外,商户在登陆商户后台时,会区分操作员角色(拥有不同操作权限),且需要证书、登陆密码等身份校验后,才能登陆。
事后:商户门户后台查询交易结果和获取对账文件。
3. API
API是指面向商户提供的接口服务,一般包括以下服务:
出款申请
出款结果查询
出款结果异步通知
对账文件获取/推送
接口服务不涉及到前端操作界面交互,但是接口交互时会有技术层面的权限校验,如商户秘钥验证。校验通过后,出款服务层收单,进行业务权限校验,校验通过后就可处理后面的出款流程。
有出款结果后,出款服务层会通过API方式回调通知给商户,商户也可调用查询接口主动查询出款进度。
二、出款服务层是做什么的?
出款应用层往下就是出款服务层,这个层级扮演什么角色呢?
打个比方:出款应用层就好比是面向有需求的访客打开的门口;而出款服务层就像是负责接待访客的管家,迎接来客,并对来客的身份进行检查,没问题后再领进屋子里。事后,管家还得向访客反馈处理结果。
也就是说,出款服务层的作用是:接受前端的出款请求,并根据风控、运营的要求进行身份信息和业务权限检查,校验通过后再发往出款业务层;另一方面,交易事后需返回前端交易结果。
出款服务层的主要职责包括:
收单:前端调用出款服务层的付款申请服务后,会对应生成一个request id,完成收单。这就好比是迎接来客这个环节。
业务权限校验:
对于用户,出于风控及合规要求,需调用用户系统判断用户状态是否正常,如果是冻结状态,则不允许发起出款交易。
对于商户,一方面会判断商户状态;另一方面,会判断业务开通状态。
从运营的角度看:不同业务会收取不同的费用;从账务角度看,不同业务对应不同的记账规则。因此,需调用商户系统,判断商户状态,并校验该商户是否已开通对应的出款业务权限。在后续出款业务层的逻辑中,也需对不同业务类型记不同的手续费和记账规则。
身份校验:
出于风控要求,需对发起交易的用户或商户进行身份校验。对于用户,会调用风控系统进行黑名单检查及风控规则运算。如果命中黑名单规则,则会直接拒绝交易;如果不在黑名单范围,则再根据规则运算结果返回前端,需用户输入何种身份校验方式,例如:指纹,或“指纹+短信验证码”组合验证。
用户输入后,调用底层鉴权服务,进行指纹/支付密码/短信验证码等校验。
对于商户,也是同理。
订单结果对外输出:
用户或商户发起交易后还需要随时了解交易进度,因此出款服务层还承担对外输出订单结果的作用。面向用户,提供订单结果查询服务;面向商户,提供订单结果查询和回调通知服务,以及对账文件获取/推送服务。