产品架构图
产品层
通过核心层提供的服务组合起来,对最终用户、商户、运营系统提供服务的系统。
支付系统的支撑系统、核心系统每家公司的架构都大同小异,而且都是必不可少的模块。而每家公司的支付业务、运营策略各自不同,所以,上面的应用层各自不同。通常我们可以按照使用对象划分为:针对最终用户应用、针对商户应用、针对运营人员应用、针对分控人员应用...
支付流程图
资金流处理
核心层
支付系统的核心模块,内部又分为两个部分: 支付核心模块以及支付服务模块
支付应用
支付核心层通过支付应用对上册提供服务,用户从这里启动支付流程。
支付网关
在支付系统中,支付网关和支付渠道的对接是最核心的功能。其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网关分发到对应的渠道模块上。一旦定型,后续就很少,也很难调整。而支付渠道模块是接收网关的请求,调用渠道接口执行真正的资金操作。每个渠道的接口,传输方式都不尽相同,所以在这里,支付网关相对于支付渠道模块的作用,类似设计模式中的wrapper,封装各个渠道的差异,对网关呈现统一的接口。而网关的功能是为业务提供通用接口,一些和渠道交互的公共操作,也会放置到网关中
支付网关工作流程:
- 商户侧应用发起支付请求。注意,这个请求一般是从服务器端发起的。比如用户在手机端提交“立即支付”按钮后,商户的服务器端会先生成订单,然后请求支付网关执行支付
- 支付请求被发送到支付(API)网关上。网关对这个请求进行一些通用的处理,比如QPS控制、验签等,然后根据支付请求的场景(网银、快捷、外卡等),调用对应的支付产品
- 支付产品对用户请求进行预处理,包括执行参数校验、根据支付路由寻找合适的支付通道、评估交易风险、生成订单、调用通道落地执行支付、响应通道的结果并将交易结果通知到商户侧
- 支付产品调用支付通道执行支付。这个请求并不是直接落地到通道上,而是通过支付通道前置来封装,由支付通道前置来完成和通道的交付。 支付产品是按照可以提供的支付服务来设计的
- 支付通道前置,(以下在不引起混淆的情况下,都简称支付通道)负责和支付通道之间的通讯,调用支付通道接口完成最终的支付操作数
设计原则
如上所述,支付网关、支付产品和支付渠道的职责分工为:
- 按照支付能力来划分支付产品。
- 同一支付能力的公共支付流程,在支付产品中实现。 支付产品提供的是和渠道无关的、和支付能力流程相关的功能。
- 在各支付产品中,其和支付能力无关的公共功能,在支付网关上实现。
按照这个分工,在支付网关上实现的主要功能:
- API路由。在聚合支付场景下,当有多个支付产品可以提供支持时,使用支付网关可以让接入方对接时无需考虑支付产品的部署问题。
- 接口安全: 熔断、限流与隔离。 这对支付服务来说尤为重要。 这是微服务架构的基本功能,本文不做描述。
如下功能,是在支付产品中提供:
- 风控拦截: 风控是和支付产品有关,不同产品的风控措施、处理对策也是不同的,所以风控是在产品层实现。
- 支付路由: 路由也是和产品有关。不同产品路由策略也不同。
- 参数校验: 这也是和支付产品相关的,不同的产品接口其参数也不同。
- 支付流程: 生成交易记录、落地渠道执行支付、同步和异步通知等操作。
如下功能,可以在产品层或者网关层实现:
- 身份验证: 确认付款方、收款方、渠道是否有执行当前操作的权限。 在那一层实现取决于这些信息是否有提炼为公共行为。
- 验签: 对接口参数进行签名并验证其签名。这是为了避免接口被盗刷和篡改的必要手段。如果对各个接口采用统一的签名规则,则可以在网关层实现。
支付产品
在不同的公司由于接入渠道和应用的差异,对支付产品分类略有不同。支付产品是由支付系统对支付渠道进行封装而对业务方提供的支付能力。
快捷支付
用户在完成绑卡之后,在支付的时候,不需要再输入卡或者身份信息,仅需要输入支付密码就可以完成支付。对于小额度的支付,甚至可以开通小额免密,直接完成支付。 这种支付方式不会打断用户的体验,是目前主要的在线支付方式。一般快捷支付产品是通过封装银行或者第三方支付平台提供的快捷支付接口或者代付接口来实现的。网银支付
用户在支付的时候,需要跳转到银行网银页面来完成支付。在网银页面,需要输入用户的卡号和身份信息。这种支付方式会中断用户当前的体验,一般仅用于 PC Web 上的支付。 网银支付是封装银行提供的网银支付来实现。账户支付
也称为余额支付、零钱支付等。 指为用户建立本地账户, 支持充值,之后可以使用这个账户来完成支付。
支付路由
用户在前端选择一种支付方式,比如使用招行借记卡来支付后,系统不一定就是调用招行的接口来执行支付。支付宝、百付宝等第三方支付平台以及银联等,都支持招行借记卡支付。 这种将支付方式落地到具体的支付接口的模块,就是支付路由。
支付路由在支付系统中的核心作用,除了本职工作路由外,还承担如下职责:
- 省钱,省钱,省钱,这是支付路由选择支付通道的最主要的规则。 哪个通道省钱,基本会优先考虑这个通道。
- 提升支付产品的QOS。这体现在系统的可靠性、稳定性、性能和可用性上。通过屏蔽掉无法连接、不稳定、性能低的通道来提升这些指标。
- 支持营销。通过优先选择有优惠活动的通道,可以帮助业务提升付费客户量。
- 降低运营成本。一个设计良好的支付路由,可以大大降低运营投入。
架构图
支付渠道
包括银行渠道和第三方支付(微信、支付宝、通联、易宝)渠道
用户管理
包括对用户、商户的实名身份、基本信息、协议的管理
资金管理
管理公司在各个支付渠道的头寸,在余额不足时进行打款。 对第三方支付公司,还需要对备付金进行管理
清算分润
对于有分润需求的业务,还需要提供清分清算、对账处理和计费分润功能
会计财务
提供会计科目、内部账务、试算平衡、日切、流水登记、核算和归档的功能
核算
账户账务
管理账户信息以及交易流水、记账凭证等。这里的账务一般指对接线上系统的账务,采用单边账的记账方式。 内部账记录在会计核算系统中
风控
风控包括,账户风险、交易风险、资金风险、套现风险、操作风险、合规风险、洗钱风险,每一块都是一个课题。
基础层
用来支持核心系统的基础软件包和基础设施, 包括运维监控系统、日志分析系统等
运维监控
支付系统运行的基础设施受到外界的干扰(压力、bug、掉电、黑客攻击...)造成系统不稳定,需要能够被及时响应,这就需要一个运维监控系统来协助完成。日志分析
日志是支付系统统计分析、运维监控的重要依据。需要提供基础设施来支持日志统一收集和分析短信平台
短信在支付系统中有重要作用: 身份验证、安全登录、找回密码、以及报警监控,都需要短信的支持实时计算
全文检索
数据存储