在第一篇文章中提到,聚合支付系统(第三方支付或第四方聚合支付)在整个支付交易场景下中所处位置和作用,如下图所示。
在上图过程中,聚合支付系统每天要处理的通用流程包括:
下单支付:用户提交订单后,聚合支付系统完成从用户银行(或其他)账户中扣款并输出支付结果;
日切:每天固定时间(例如23:00),系统对当天所有交易进行汇总统计,切换系统交易日期;
对账:一般在交易日第二天,聚合支付系统从支付渠道方下载对账文件,进行对账;
清算:对账后的交易,进行相关手续费,分润计算,并将商家的待清算款付款给商家(有支付牌照的情况下)。
针对上面4种主要的业务场景,会用4篇文章逐一进行介绍,描述这些业务场景在聚合支付系统内部的处理流程和细节。
下图为通用的电商平台下单支付场景下,聚合支付系统中各模块信息流转过程。
聚合支付下单支付流程
以用户在某电商平台(或外卖平台)中下单购物为例,首先用户将商品添加至购物车中,在购物车界面确认下单;
下单后由订单中心模块生产业务订单,包含业务订单编号,商品信息,收货地址,下单时间,订单状态等主要信息;
点击”去支付“后生成业务订单
业务订单创建后,在支付应用”收银台“中,引导路由决定展示哪些可供选择的支付方式,用户选择支付方式,点击”确认支付“后,订单中心生成相应的支付订单;
此处暂省去风控中心交易合法性校验,以及营销中心的优惠活动或者代金券等业务,在后续其他章节讲述。
点击”确认支付“后生成支付订单
根据用户所选择支付方式,支付网关将支付订单发送给相应支付产品模块,支付产品在支付路由模块中,根据支付方式,订单金额,手续费规则,通道稳定性等因素,选择最终落地的支付渠道;
确认落地的支付渠道后,支付渠道模块向渠道测发起支付申请,同步收到渠道测返回的渠道方订单ID等信息(根据支付方式不同这里的返回会有区别,例如APP支付有预创建订单ID,扫码支付或银联快捷支付等方式没有预创建订单ID);
注意此处同步收到的返回信息,不能做为支付的结果信息。
跳转至渠道方支付页面,或者通过SDK唤起相关支付APP,输入支付密码等鉴权信息,提交至支付渠道方后台;
渠道方支付页面(或APP)显示支付结果,点击”返回XXX“回到聚合支付系统应用页面;
前端页面(或APP)上显示的支付结果,不能做为聚合支付系统的支付结果,要以回调结果或主动查询结果为准。
支付渠道模块等待渠道测的回调信息,支付结果以渠道测回调信息中的结果为准;
如果一定时间(例如10秒)内没收到渠道测回调信息,支付渠道模块需要发起主动查询,轮询订单支付结果。
支付渠道将支付结果通知支付网关,支付网关调用账户账务模块进行记账操作(只记单边账,流水账);
流水账记账成功后,更新支付订单状态,支付订单状态更新后,更新业务订单状态;
同时通知会计系统,进行会计记账(复式记账);
以上为聚合支付系统中,通用的下单支付流程介绍。
在微信APP内完成支付后,如果前端界面用户选择”返回XXX“,回到聚合支付系统应用(例如饿了么)内,系统后台却没收到渠道测回调信息,支付渠道模块需要发起主动查询订单支付结果。
在微信APP内完成支付后,如果前端界面用户没有选择”返回XXX“,而是通过例如任务管理器切换等方式,回到聚合支付系统应用(例如饿了么)内,此时应弹出提示框:”您是否已完成支付“,若用户选择是,则主动向渠道测查询,若用户选择否,则无需查询(用户认为支付失败时倾向于相信用户,后续流程来保证避免重复支付)。
用户在聚合支付系统应用(例如饿了么)内确认支付时,应先查询该支付订单是否有对应的预创建订单ID,如果有,应先向渠道侧查询预创建订单支付状态,根据渠道侧预创建订单支付状态更新支付订单状态,不再唤起微信APP发起支付流程。
关于支付流程中账务处理及会计记账部分,将在后续分享账户设计及记账相关内容时做详细描述。