关于java:完整的支付系统整体架构

4次阅读

共计 5140 个字符,预计需要花费 13 分钟才能阅读完成。

整顿于网络

从产品分类、模块性能和业务流程,理解领取产品服务的设计。

领取产品模块是依照领取场景来为业务方提供领取服务。这个模块个别位于领取网关之后,领取渠道之前。它依据领取能力将不同的领取渠道封装成对立的接口,通过领取网关来对外提供服务。所以,从微服务的角度来说,领取产品自身也是一个代理模式的微服务,它透过领取网关响应业务方申请,进行一些对立解决后,散发到不同的领取渠道去执行,最初将执行后果做解决后,通过领取网关再回传给业务方。领取产品在领取零碎架构图中的地位,如下图所示:

产品分类

在不同的公司因为接入渠道和利用的差别,对领取产品分类略有不同。综合领取场景和流程,领取产品能够分为如下几类:

领取产品是由领取系统对领取渠道进行封装而对业务方提供的领取能力。整体上来说,能够提供如下领取产品:

1. 快捷领取

用户在实现绑卡之后,在领取的时候,不须要再输出卡或者身份信息,仅须要输出领取明码就能够实现领取。对于小额度的领取,甚至能够开明小额免密,间接实现领取。这种领取形式不会打断用户的体验,是目前次要的在线领取形式。个别快捷领取产品是通过封装银行或者第三方领取平台提供的快捷领取接口或者代付接口来实现的。

2. 网银领取

用户在领取的时候,须要跳转到银行网银页面来实现领取。在网银页面,须要输出用户的卡号和身份信息。这种领取形式会中断用户以后的体验,个别仅用于 PC Web 上的领取。网银领取是封装银行提供的网银领取来实现。

3. 协定领取

协定领取也称代收或者代扣,代收指渠道受权商户能够从用户的银行账户中扣款,个别用于定期扣款,不用于日常生产。比方水电煤气、有线电视费。协定领取是通过封装银行、第三方领取提供的代扣或者快捷接口来实现。

4. 平台领取

应用微信、支付宝等第三方领取平台来实现领取。应用时,个别须要用户事后装置领取平台零碎(手机上),注册并登录到第三方领取平台,并且曾经在该平台上实现绑卡等操作。因为微信、支付宝曾经被大量应用,用户也产生对这些平台的信赖,平台领取往往是电商公司的次要领取形式。

5. 外卡领取

对于由海内领取的需要,还须要提供外卡领取反对。国内不少领取渠道都能反对外卡领取,如支付宝寰球购等。间接对接 Paypal,也是目前用的最多的外卡领取渠道。

6. 话费领取

对于有包月小额类型的领取,手机话费也是一个不错的抉择。目前也有一些平台能够反对话费领取,比方虹软、联动劣势等。

7. 虚币领取

不少公司会有本人的虚构币,比方京豆、Q 币等。这些虚币也能够作为一种领取形式。

8. 账户领取

也称为余额领取、零钱领取等。指为用户建设本地账户,反对充值,之后能够应用这个账户来实现领取。

9. 信用领取

如京东的白条,蚂蚁花呗等,指应用信用账户进行透支,相似信用卡领取。

10. 代付

和代扣相同,代付是平台将钱打给用户。

模块性能

领取产品依据其领取能力,对外提供不同的性能。整体上来说,个别领取产品须要提供如下接口:

1. 签约和解约

在快捷领取、代扣等产品中,用户在应用前,须要先实现签约。签约能够在渠道侧进行,个别第三方领取采纳这种形式,当电商须要接入时,让第三方给受权。银行和银联的签约个别是在电商侧进行,电商侧负责收集用户的信息,调用银行和银联的接口进行签约。签约后,后续的领取行为就应用签约号来进行,无需再输出个人信息。和签约绝对应,解约则是勾销签约关系。

2. 领取

领取是少不了的操作。不同产品中领取行为不一样。快捷领取是在电商服务器上发动,申请渠道进行领取;网银领取则是跳转到银行领取网关上进行; 而账户领取、虚币领取,则是在本地进行的。

3. 撤销和退款

有些渠道辨别撤销和退款,比方银联、农行等,撤销指勾销当天在渠道侧未结算的交易;而退款仅针对曾经结算的交易。有些渠道则不作辨别。

4. 查问签约状态

对于须要签约的交易,能够通过这个接口来查问签约状态。

5. 查问订单状态

通过这个接口来查问领取清单状态以及退款的订单状态。

6. 预受权

预受权交易用于受理方向持卡人的发卡方确认交易许可。受理方将预估的生产金额作为预受权金额,发送给持卡人的发卡方。

7. 预受权撤销

对已胜利的预受权交易,在结算前应用预受权撤销交易,告诉发卡方勾销付款承诺。预受权撤销交易必须是对原始预受权交易或追加预受权交易最终承兑金额的全额撤销。

8. 预受权实现交易

对已批准的预受权交易,用预受权实现做领取结算。

9. 预受权实现撤销

预受权实现撤销交易必须是对原始预受权实现交易的全额撤销。预受权实现撤销后的预受权依然无效。

10. 对账

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

11. 余额查问

查问商户的交易账户的余额,防止因为余额有余导致交易失败。留神,不是客户的余额。当然,不是所有的银行或者第三方领取都提供这个接口。

业务流程

上述操作,除了对账、查单外,每个操作实现的主流程,个别会包含“参数校验,领取路由,生成订单,危险评估,调用渠道服务,更新订单和发送音讯”这 7 步,对于一些比较复杂的服务,还会波及到异步告诉解决的步骤。

1. 执行参数校验

所有的领取操作,都须要对输出执行参数校验,防止接口受到攻打。验证输出参数中各字段的有效性验证,比方用户 ID、商户 ID、价格、返回地址等参数。验证账户状态 ,交易主体、交易对手等账户的状态是处于可交易的状态。 验证订单 ,如果波及到预单,还须要验证订单号的有效性,订单状态是未领取。为了防止用户缓存某个 URL 地址,还须要校验下单工夫和领取工夫是否超过预约的距离。 验证签名,签名也是为了避免领取接口被伪造。个别签名是应用分发给商户的 key 来对输出参数拼接成的字符串做 MD5 Hash 或者 RSA 加密,而后作为一个参数随其余参数一起提交到服务器端,签名验证也能够在网关中对立实现。

2. 依据领取路由寻找适合的领取服务

依据用户抉择的领取形式确定用来实现该操作的适合的领取渠道。用户指定的领取形式不肯定是最终的执行领取的渠道。比方用户抉择通过工行信用卡来执行领取,然而咱们没有实现和工行的对接,而是能够通过第三方领取,比方支付宝、微信领取、易宝领取,或者银联来实现。那如何抉择适合的领取渠道,就通过领取路由来实现。领取路由会综合思考免费、渠道的可用性等因素来抉择最优计划。

3. 评估交易危险

查看本次交易是否有危险。风控接口返回三种后果:阻断交易、加强验证和放行交易。阻断交易 ,阐明该交易是高风险的,须要终止,不执行第 5 个步骤; 加强验证 ,阐明该交易有肯定的危险,须要确认下是不是用户自己在操作。这能够通过发送短信验证码或者其余能够验证用户身份的形式来做校验,验证通过后,能够继续执行该交易。 放行交易,即本次交易是平安的,能够持续往下走。

4. 生成交易订单

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

5. 调用领取渠道提供的服务

所有的领取服务都须要第三方通道来实现执行。个别银行渠道的调用比较简单,能够间接返回后果。而一些第三方领取,支付宝,微信领取等,则会通过异步接口来告知领取后果。

6. 更新订单

对于同步返回的后果,须要在主线程中更新订单的状态,标记是领取胜利还是失败。对于异步返回的渠道,须要在异步程序中解决。

7. 发送音讯

通过音讯来告诉相干零碎对于订单的变更。风控,信用 BI 等,都须要依赖这数据做准实时计算。

8. 异步告诉

如上述流程,其中波及到调用近程接口,其提早不可控。如果调用方始终阻塞期待,很容易超时。引入异步告诉机制,能够让调用方在主线程中尽快返回,通过异步线程来失去领取后果。对于通过异步来获取领取后果的渠道接口,也须要对应的在异步告诉中将后果返回给调用方。异步告诉须要调用方提供一个回调地址,个别以 http 或者 https 的形式。这就有技术危险,如果调用失败,还须要重试。而重试不能过于频繁,须要逐渐拉大每一次重试的工夫距离。在异步处理程序中,订单依据处理结果变更状态后,也要发消息告诉相干零碎。

领取零碎架构整体设计

每个公司依据其业务和公司倒退的不同阶段,所设计的领取零碎也会有所不同。咱们先看看互联网公司的一些典型的领取零碎架构。

1. 支付宝

这个整体架构上并没有不同凡响之处。在模块划分上,这个图显示的是最顶层的划分,也无奈告知更多细节。但支付宝架构文档有两个搞领取平台设计的人必须认真琢磨的要点。一个是 账务解决,在记账方面,波及到内外两个子系统,内部子系统是单边账,满足线上性能需求;外部子系统走复式记账,满足财务需要,如记账、对账战争账。

另一个是 柔性事务处理,利用音讯机制来实现跨零碎的事务处理,防止数据库锁导致的性能问题。

2. 京东金融

京东金融是在网银在线的根底上倒退起来的。网银在线的原班技术人员有不少来自易宝公司,在京东收买之后,又引入了支付宝的人才,因此从架构上受这两个公司的影响很大。

3. 去哪儿

这些架构文档全副来自互联网公开材料,对于架构是否实在反映理论零碎状况,须要大家自行判断。咱们仅是以这些文档为根底,剖析领取零碎应有的软件架构。

参考架构

一般来说,领取零碎典型架构会蕴含如下模块:

领取零碎从架构上来说,分为三层;

  • 撑持层:用来反对外围零碎的根底软件包和基础设施,包含运维监控零碎、日志剖析零碎等。
  • 核心层:领取零碎的外围模块,外部又分为两个局部:领取外围模块以及领取服务模块。
  • 产品层:通过核心层提供的服务组合起来,对最终用户、商户、经营管理人员提供的零碎。

1. 撑持零碎

撑持零碎是一个公司提供给领取零碎运行的基础设施。次要包含如下子系统:

  • 运维监控:领取零碎在运行过程中不可避免的会受到各种外部和内部的烦扰,光纤被挖断、黑客攻击、数据库被误删、上线零碎中有 bug 等等,运维人员必须在第一工夫内对这些意外事件作出响应,又不可能一天 24 小时盯着。这就须要一个运维监控零碎来帮助实现。
  • 日志剖析:日志是领取零碎统计分析、运维监控的重要依据。公司须要提供基础设施来反对日志对立收集和剖析。
  • 短信平台:短信在领取零碎中有重要作用,如身份验证、平安登录、找回明码、以及报警监控,都须要短信的反对。
  • 平安机制:平安是领取的生命线。SSL、证书零碎、防刷接口等,都是领取的必要设施。
  • 统计报表:领取数据的可视化展现,是公司进行决策的根底。

近程连贯治理、分布式计算、音讯机制、全文检索、文件传输、数据存储、机器学习等,都是构建大型零碎所必须的根底软件,这里不再一一具体介绍。

2. 领取外围零碎

领取外围零碎指用户执行领取的外围流程,包含:

  • 用户从领取利用启动领取流程;
  • 领取利用依据利用和用户抉择的领取工具来调用对应的领取产品来执行领取;
  • 领取路由依据领取工具、渠道费率、接口稳定性等因素抉择适合的领取渠道来落地领取;
  • 领取渠道调用银行、第三方领取等渠道提供的接口来执行领取操作,最终落地资金转移。

3. 领取服务零碎

反对领取外围零碎所提供的性能,服务零碎又分为根底服务零碎、资金零碎、风控和信用零碎。

根底服务零碎 提供撑持线上领取零碎运行的根底业务性能:

  • 客户信息管理:包含对用户、商户的实名身份、根本信息、协定的治理;
  • 卡券治理:对优惠券、代金券、折扣券的制作、发放、应用流程的治理;
  • 领取通道治理: 通道接口、配置参数、费用、限额以及 QOS 的治理;
  • 账户和账务零碎:治理账户信息以及交易流水、记账凭证等。这里的账务个别指对接线上零碎的账务,采纳单边账的记账形式,外部账记录在会计核算零碎中。
  • 订单零碎:个别订单零碎能够独立于业务零碎来实现的,这里的订单,次要指领取订单。

资金零碎 指围绕财务会计而产生的后盾资金核实、调度和治理的零碎,包含:

  • 会计核算:提供会计科目、外部账务、试算均衡、日切、流水注销、核算和归档的性能。
  • 资金治理:治理公司在各个领取渠道的头寸,在余额有余时进行打款。对第三方领取公司,还须要对备付金进行治理。
  • 清理分润:对于有分润需要的业务,还须要提供清分清理、对账解决和计费分润性能。

风控系统 是领取零碎必备的根底性能,所有的领取行为必须做危险评估并采取对应的措施;信用零碎 是在风控根底上倒退的高级性能,京东的白条,蚂蚁花呗等,都是胜利的案例。

4. 领取利用

撑持零碎、外围零碎和服务零碎,在每个互联网公司的架构上都是大同小异的,都是必不可少的模块。而领取利用是每个公司依据本人的业务来构建的,各不相同。

总体来说,能够依照应用对象分为针对最终用户的利用、针对商户的利用、针对经营人员的经营治理、BI 和风控后盾。

近期热文举荐:

1.Java 15 正式公布,14 个新个性,刷新你的认知!!

2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!

3. 我用 Java 8 写了一段逻辑,共事直呼看不懂,你试试看。。

4. 吊打 Tomcat,Undertow 性能很炸!!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0