支付网关前端
支付网关前端是与业务系统对接并提供支付服务的模块。它是所有支付服务接口的集成前端,将不同支付渠道提供的接口统一呈现给业务方。这样,接入方只需连接支付网关,支付通道的添加和调整对业务方来说是透明的。支付网关前端的设计直接影响整个支付系统的稳定性、功能、性能等非功能需求。
大量的操作需要在支付网关中完成。为了保证性能,这些操作尽可能异步处理。
支付网关前端应保持稳定,尽量减少系统重启等操作对业务侧的影响。支付网关不能免于升级和重启。这可以通过基于LBS(负载)的网关来解决。 LBS在这里有两个作用:一是实现负载均衡,二是隔离支付网关重启对调用的影响。支付网关也以分布式方式部署在多台机器上。重启时,每台服务器都会一一启动。服务器重启时,首先从LBS系统中注销,重启完成后,再重新注册到LBS。这个过程不知道调用者。
为了防止接口被攻击,在安全方面,必须要求业务方接入接口,并提供防篡改机制。防篡改是通过接口参数签名来处理的。目前主流的签名是根据参数名称对接口参数进行排序,然后进行加密、散列。请参考微信签名规范。
交易流程和会计
每笔交易都需要记录并登记在个人和机构账户中。统计和分析还需要根据交易流向更新相关数据。个人和机构账户总额、交易记录、库存处理的更新需要交易处理机制的支持。从性能角度考虑,可以弱化事务处理需求,采用消息机制异步处理事务相关数据。
● 支付网关前面的主流程中,只记录交易流程,即将当前请求保存到数据库中。
● 数据记录完成后,发送MQ。记账、统计、分析都接收MQ来完成数据处理。

● 本地资金支付,如钱包支付,需要分布式事务处理、账户余额扣除、记账、库存扣除等,每次操作失败都必须回滚。阿里有很好的分享,这里就不详细介绍了。
● 当交易量增大时,需要考虑将交易表分表分库。分表分库有两种策略,基于流水号或交易实体ID。后者可以支持用户获取交易记录。我们使用前者。后者可以确保数据库是专用的。风控、信贷、统计所需的数据通过MQ同步到其中。作为支付系统中最有价值的数据,存储应该专用于专用数据库是可以理解的。毕竟存储成本还是便宜的。
风控模块
支付风险控制的重要性怎么强调也不为过。有些系统在风控出现问题时可以绕过风控,但在支付系统中,如果风控出现问题就必须停止交易。总体而言,风控可分为数据采集、数据分析、实时计算、规则配置、实时拦截等模块。风控本身就是一个很大的话题,后面会专门讲。又欠了一笔债。但风控和交易的界面相对简单。对于每一笔交易,风控一般会返回三种结果:拦截、增强验证、通过。通过表示交易没有问题,可以直接发布。拦截是为了阻止此交易。增强验证意味着交易存在疑问,需要用户进一步验证身份才能继续,例如输入手机号码或身份证号码。一般用于身份被盗的场景。人工验证用于对交易存在疑虑的情况,一般用于个人恶意购买的场景。
支付路由
支付路由是一个复杂的话题。对于一个支付系统来说,能支持的支付方式越多越好,不能因为支付方式不支持而切断金融通路。现实中可用的支付方式的数量令人难以置信。用户随时扔掉一张你从未听说过的卡。如果一张银行卡只有少数用户使用,那么为这张卡开发连接是有一点收获的。当前第三方支付的爆发,确实为开发支付系统省去了很多麻烦。然而,一家公司不可能只接受一种第三方支付。如果这个渠道出了问题,或者发生了冲突,链接被屏蔽了,老板还是会欲哭无泪。简而言之,你必须连接多个渠道。对于交易量较大的银行,还应考虑直接联系。
支付路由的作用是定义用户选择的银行卡或其他支付方式以及使用什么渠道来完成支付。