016-11-23 01:43:00

来源: 凤凰牌老熊

导读: 在支付系统中,支付网关和支付渠道的对接是最核心的功能。其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网关分发到对应的渠道模块上。一旦定型,后续就很少,也很难调整。而支付渠道模块是接收网关的请求...

在支付系统中,支付网关和支付渠道的对接是最核心的功能。其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网关分发到对应的渠道模块上。一旦定型,后续就很少,也很难调整。而支付渠道模块是接收网关的请求,调用渠道接口执行真正的资金操作。每个渠道的接口,传输方式都不尽相同,所以在这里,支付网关相对于支付渠道模块的作用,类似设计模式中的wrapper,封装各个渠道的差异,对网关呈现统一的接口。而网关的功能是为业务提供通用接口,一些和渠道交互的公共操作,也会放置到网关中。

  功能概述

  支付系统对其他系统,特别是交易系统,提供的支付服务包括签约,支付,退款,充值,转帐,解约等。有些地方还会额外提供签约并支付的接口,用于支持在支付过程中绑卡。 每个服务实现的流程也是基本类似,包括下单,取消订单,退单,查单等操作。每个操作实现,都包括参数校验,支付路由,生成订单,风险评估,调用渠道服务,更新订单和发送消息这7步,对于一些比较复杂的渠道服务,还会涉及到异步同通知处理的步骤。这里详细介绍这些步骤的实现要点。

  1. 执行参数校验

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

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

  ● 验证账户状态。交易主体、交易对手等账户的状态是处于可交易的状态。

  ● 验证订单:如果涉及到预单,还需要验证订单号的有效性,订单状态是未支付。为了避免用户缓存某个URL地址,还需要校验下单时间和支付时间是否超过预定的间隔。

  ● 验证签名。签名也是为了防止支付接口被伪造。 一般签名是使用分发给商户的key来对输入参数拼接成的字符串做MD5 Hash或者RSA加密,然后作为一个参数随其他参数一起提交到服务器端。

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

  根据用户选择的支付方式确定用来完成该操作的合适的支付渠道。用户指定的支付方式不一定是最终的执行支付的渠道。比如用户选择通过工行信用卡来执行支付,但是我们没有实现和工行的对接,而是可以通过第三方支付,比如支付宝、微信支付、易宝支付,或者银联来完成。那如何选择合适的支付渠道,就通过支付路由来实现。支付路由会综合考虑收费、渠道的可用性等因素来选择最优方案。

  3. 评估交易风险

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

  ● 阻断交易,说明该交易是高风险的,需要终止,不执行第5个步骤;

  ● 增强验证,说明该交易有一定的风险,需要确认下是不是用户本人在操作。这可以通过发送短信验证码或者其他可以验证用户身份的方式来做校验,验证通过后,可以继续执行该交易。

  ● 放行交易,即本次交易是安全的,可以继续往下走。

  4.生成交易订单

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

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

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

  6. 更新订单

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

  7. 发送消息

  通过消息来通知相关系统关于订单的变更。风控,信用BI等,都需要依赖这数据做准实时计算。

  8. 异步通知

  如上述流程,其中涉及到调用远程接口,其延迟不可控。如果调用方一直阻塞等待,很容易超时。引入异步通知机制,可以让调用方在主线程中尽快返回,通过异步线程来得到支付结果。对于通过异步来获取支付结果的渠道接口,也需要对应的在异步通知中将结果返回给调用方。 异步通知需要调用方提供一个回调地址,一般以http或者https的方式。这就有技术风险,如果调用失败,还需要重试。而重试不能过于频繁,需要逐步拉大每一次重试的时间间隔。 在异步处理程序中,订单根据处理结果变更状态后,也要发消息通知相关系统。

  整体架构

  整体软件参考架构如下所示:

原文地址:https://blog.csdn.net/sz_bb/article/details/53300937

支付系统整体设计:整体架构设计以及注意要点(一)相关推荐

  1. Linux系统运维与架构设计之Linux概述

    Linux系统运维与架构设计之Linux概述 Linux系统运维与架构设计 1.1 浅谈计算机系统 1.1.1 计算机硬件系统 现代计算机是基于冯·诺依曼体系结构,由运算器.控制器.存储器.输入设备. ...

  2. 大型网站系统的特点和架构设计

    分布式架构 阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁 优知学院」淘宝技术架构的前世今生(上) 优知学院」淘宝架构的前世今生(下) 揭秘:一位亲历者眼中的淘宝技术架构发展之路 淘宝发展历 ...

  3. 浅谈系统架构设计-从架构设计原理、架构设计原则、架构设计方法展开

    我们工作中一直强调要做架构设计.系分,最近前端同学在追求前端质量提升的时候,也在进行架构设计.前端系分的推广,那到底什么是架构设计和系分?该怎么做架构设计和系分?本文尝试对架构设计进行全面的介绍和分享 ...

  4. [转]去哪儿网机票搜索系统的高并发架构设计

    "高并发"一直是大家感兴趣的话题.2010年~2012年,我曾在Qunar供职,主要负责机票搜索相关的业务,当时我们的搜索系统最高每天承载了亿级用户的高并发访问.那段日子,很苦很累 ...

  5. 支付系统 “订单模型” 该如何设计?

    导读 最近经历了一件事,就是小码农所在的公司因为被某大厂收购之后要进行融合了,其他方面的融合就没必要说了,今天咱们只是聊一下支付系统融合的事情.首先从很多互联网公司的发展经验来看,随着多条业务线的发展 ...

  6. 云运维拓扑图_浅谈:智慧交通云平台网络拓扑设计及架构设计

    众所周知, 智慧交通云平台网络架构设计 支撑平台建设基于以物理分区为基本单元的设计理念,整个云计算中心可分为:核心交换区.管理区.DMZ区.业务应用区以及云存储区. 核心交换区:负责核心网络交换: 管 ...

  7. 支付系统设计白皮书:支付系统的概念与架构

    一.什么是支付系统 自古以来,所有的商业活动都会产生货币的收款与付款行为.在人类漫长的历史长河中,记录收付款行为的方式不断迭代:古代的账房先生通过手工记账,工业社会通过收银机机械记账-- 今天,进入了 ...

  8. 架构设计:架构设计要平衡兼顾多方需求

    "架构设计要平衡兼顾多方需求" 系统建模 定义接口 划分功能模块 套用模式 优化性能 系统的安全性 易用性(usability) 产品支持 发布管理 部署方式 解决以上问题的技术问 ...

  9. Java性能优化:架构设计-分布式架构设计

    分布式架构设计 一.前言 随着微服务的流行,"分布式架构"作为高频词时常出现在开发者面前,我们是否理解分布式架构?它和微服务有什么区别呢?这一小节我们将讲解微服务和分布式架构那些事 ...

  10. 分层设计与领域设计融合架构设计

    目录 文章目录 目录 传统分层架构存在的问题 领域驱动设计 领域驱动设计思想 领域驱动设计面临的问题 分层设计与领域设计的融合 应用服务层和领域服务层 领域划分和微服务化 传统分层架构存在的问题 传统 ...

最新文章

  1. Order笔记-数据库创建
  2. 【本质】你知道C语言编译的过程吗?
  3. Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】
  4. concurrently同时开启多个监听服务
  5. 市值突破3000亿,Fortinet发布2021Q2财报
  6. 4400元起!iPhone 12全系售价曝光:标配数据线但无充电器
  7. 万圣趴的神秘南瓜仙人,送你3本惊喜Python好书
  8. Swarm搭建Docker集群
  9. Atitit eclipse tomcat插件常见问题总结.docx 1.1. tomcat插件调整内存设置在 run run cfg 配置页。。Debug模式共享相同设置 1 1.2. Pub
  10. Matlab图像处理系列3———空间域锐化滤波器
  11. 最棒的Java开发企业级权限管理系统项目实战
  12. aforge 相机标定_c# – Aforge.net相机捕获并将图像保存到目录
  13. java读取movielens数据txt
  14. 用python处理蛋白质互作信息
  15. 千呼万唤始出来的CoordinatorLayout
  16. 修改war包中数据库配置信息
  17. VScode直接执行ts文件
  18. 国内外AI绘画『文生图』大模型效果对比
  19. uefi +gpt 系统安装 和 传统legacy + mbr 的区别
  20. QT5.7操作word

热门文章

  1. 百度地图实现定位功能
  2. Weex动态化方案与双十一实践
  3. hibernate 级联删除
  4. 有关AutoCompleteBox组件的研究[5][Final]_集成搜索引擎搜索建议(Search Suggestion)——Silverlight学习笔记[40]...
  5. 老板也是人:孤独的企业家
  6. 承载网络开启后显示无法连接到Internet,已解决
  7. 编码整洁之道:专业程序员的行为准则(英文版)
  8. javascript面向对象属性函数用法(defineProperty与getOwnPropertyDescriptor)
  9. c结构体里的数组与指针
  10. 深度学习与模式识别之项目整理