支付系统整体架构

摘录于Java架构沉思录公众号

 

支付产品模块是按照支持场景来为业务放提供支付服务。这个模块一般位于支付网关之后,支付渠道之前。它根据支付能力将不同的

支付渠道封装成统一的借口,通过支付网关对外提供服务。所以,从微服务的角度,支付产品本身也是一个代理模式的微服务,它透

过支付网关响应业务放请求,进行一些统一处理后,分发到不同的支付渠道去执行,最后将执行结果做处理后,通过支付网关再回转

给业务方。

 

常见的几种支付产品

1、快捷支付

用户在完成绑定卡之后,在支付的时候,不再需要输入卡号或者身份信息,仅需要输入支付密码就可以完成支付。对于小额度的支付,

甚至可以开通小额免密直接完成支付。这种支付方式,用户体验好,是目前主要的在线支付方式。一般快捷支付产品是通过封装银行

或者第三方支付平台提供的快捷支付接口或者代付接口来实现的。

 

2、网银支付

用户在支付的时候,需要跳转到银行页面来完成支付。在网银页面,需要输入用户卡号和身份信息,一般仅用于PC web上的支付。但

是这种用户体验不好。

 

3、协议支付

协议支付也称代收或者代扣,代收指渠道授权商户可以从用户的银行账户中扣款,一般用于定期扣款,不用于日常消费。比如水电煤气

有线电视。协议支付是通过封装银行、第三方支付提供的代扣或者快捷接口来实现的

 

4、平台支付

使用微信、支付宝等第三方支付平台来完成支付。使用时,一般需要用户预先安装支付平台系统,注册并登录到第三方支付平台,并且

已经在该平台完成绑定卡号等操作。由于微信、支付宝已经被大量使用,用户也产生对这些平台的信任,平台支付往往是电商公司的主要

支付方式

 

5、外卡支付

对于海外支付的需求,还需提供外卡支付支持。国内不少支付渠道都能支付外卡支付,如支付宝全球购等。直接对接PayPal,也是目前使用

最多的外卡支付渠道

 

6、话费支付

对于有包月小额类型的支付,手机话费也是一个不错的选择

 

7、虚币支付

不少公司有自己的虚拟币,这些也可以作为一种支付方式

 

8、账户支付

为用户建立本地账户,支付充值,之后就可以使用该账户来完成支付

 

9、信用支付

如京东的白条、蚂蚁花呗等,使用信用账户进行透支,类似信用卡支付

 

10、代付

和代扣相反,是指平台将钱打给用户

 

模块功能

1、签约和解约

在快捷支付、代扣等产品中,用户在使用前,需要先完成签约。签约可以在渠道侧进行,一般第三方支付采用这种方式,当电商需要接入时,

让第三方给授权。银行和银联的签约一般是在电商侧进行,电商侧负责收集用户的信息,调用银行和银联的接口进行签约。签约后,后续的支付

行为就可以使用签约号来进行,无需输入个人信息。和签约对象,解约则是取消签约关系

 

2、支付

不同支付行为不一样。快捷支付是在电商服务器上发起,请求渠道进行支付;网银支付则是跳转到银行支付网关上进行;

而账户支付、虚币支付,则是在本地进行的

 

3、撤销和退款

有些渠道区分撤销和退款,比如银联、农行等,撤销指取消当天在渠道侧未结算的交易;而退款仅针对已经结算的交易。

 

4、查询签约状态

对于需要签约的交易,可以通过这个接口来查询签约状态

 

5、查询订单状态

通过该接口查询支付清单字体以及退款的订单状态

 

6、预授权

预授权交易用于受理放心持卡人的发卡方确认交易许可。受理方将预估的消费金额作为预授权金额,发送给持卡人的发卡方

 

7、授权信撤销

对已成功的预授信交易,在结算前使用预授权撤销交易,通知发卡方取消付款承诺。预授信撤销交易必须是对原始预授权交易或追加

预授权交易最终承兑金额的全额撤销

 

8、对账

通过FTP或者HTTP方式提供对账文件供商户侧对账

 

9、余额差

查询商户的交易账户的余额

 

业务流程

除了对账、查单外,每个操作实现的主流程,一般包括参数校验、支付路由、生成订单、风险评估、调用渠道服务、更新订单和发送信息

对于一些比较复杂的服务,还会涉及到异步通知处理的步骤

1、执行参数校验

所有的支付操作,都需要对输入执行参数校验,避免接口受到攻击

  1-1、验证输入参数中各字段的有效性、比如用户ID、商户ID、价格、返回地址等参数

  1-2、验证账号状态。交易主体、交易对手等账号的状态是处于可交易的状态

  1-3、验证订单:如果设计到预单,还需要验证订单号的有效性,订单状态是未支付。为了避免用户缓存某个URL地址,还需要校验

  下单时间和支付时间是否超过预定的间隔

  1-4、验证签名。签名是为了防止支付接口被伪造。一般签名是使用分给商户的key来对输入参数拼接成的字符串做md5 hash 或者RSA

  加密,然后作为一个参数随其他参数一起提交到服务器端。

 

2、根据支付路由寻找合适的支付服务

根据用户选择的支付方式确定用来完成该操作的合适支付渠道。用户指定的支付方式不一定是最终的执行支付的渠道。比如用户

选择招行信用卡来执行支付,但我们没有实现和招行的对接,而是可以通过第三方支付,比如支付宝、微信或者银联来完成。支付

路由会综合考虑收费、渠道的可用性等因素来选择最优方案

 

3、评估交易风险

检查本次交易是否有风险。风控接口返回三种结果:阻断交易、增强验证和放行交易

  3-1、阻断交易 说明该交易是高风险需要终止

  3-2、增强验证。说明交易有一定的风险,需要确认是不是用户本人在操作。可以通过发送短信验证码或者其他验证

  用户身份的方式来做校验,验证通过之后,可以继续执行该交易

  3-3、放行交易,即本次交易是安全的,可以继续往下执行

 

4、生成交易订单

将订单信息持久化到数据库中。当访问压力大的时候,数据库写入会成为一个瓶颈

 

5、调用支付渠道提供的服务

所有的支付服务都需要第三方通道来完成执行。一般银行渠道的调用比较简单,可以直接返回结果。一些第三方支付平台、一般会通过异步接口

通知支付结果

 

6、更新订单

对于同步返回的结果,需要在主线程中更新订单的状态,标记为支付成功还是失败。对于异步返回的渠道,需要在异步程序中处理

 

7、发送消息

通过消息来通过相关系统关于订单的变更

 

8、异步通知

上诉流程中,涉及到调用远程接口,其延迟不可控。如果调用方一直阻塞等待,很容易超时。引入异步通知机制,可以让调用方在主线程

中尽快返回,通过异步线程来得到支付结果。对于通过异步来获取支付结果的渠道接口,也需要对应的在异步通知中将结果返回给调用方。

异步通知需要调用方提供一个回调地址,一般以HTTP或者HTTPS方式。如果调用失败,还需要重试,而重试不能过于频繁,需要逐步拉大

每次重试的时间间隔

 

posted @ 2018-08-12 20:49  秋水秋色  阅读(1089)  评论(0编辑  收藏  举报