中小型研发团队架构实践之企业支付网关

2018 年 1 月 12 日 聊聊架构 杨丽、张辉清
作者|杨丽、张辉清
编辑|雨多田光
一、企业支付网关介绍

企业支付网关由统一支付服务、统一支付通知、统一支付后台三部分组成,我们今天主要介绍前两个部分。企业支付网关独立出来非常有必要,它是企业做大后金融事业部的基础,当前价值如下:

  • 1、集中研发工作:集中研发封装公司使用的各种支付方式,如支付宝、财付通、预付款等,同时统一各应用系统的支付调用方式。

  • 2、集中运维工作:集中发布、监控、维护、安全等工作。

  • 3、集中财务工作:集中各支付方式的对账、统计、日志追踪、异常处理等结算运营工作。

二、统一支付服务
2.1 统一支付接口

以上接口有支付、代扣、分润、退款、退分润、补差、转账、冻结、解冻、预付款。支付接口服务仅负责生成和返回支付链接,由调用的业务应用来负责 URL 跳转。

2.2 分层架构设计

  • 按照公司统一应用分层架构,把第三方支付放在 DataLayer 里的同时,每种支付方式都是一个独立的组件,里面的 Model 放在各自组件中,不放在 EntityLayer 层,因为不涉及到跨层对象访问;

  • BusinessLayer 核心类有 xxxLogic、xxxHelper、xxxVerify,如 AlipayLogic、AlipayHelper、AlipayVerify,采用统一的接口编写;

  • Notify 采用 RESTful 接口,同时允许外网访问,并可指定 IP 安全设置,如仅允许淘宝相关的 IP 访问,这个可以在网络层进行设置,为了高可用,部署时也可用金融级硬件或集群。

2.3 业务逻辑代码

1、PaymentFacade:提供对外访问的门面。

2、ThirdPaymentFactory:根据请求的支付类型,创建相应的支付业务逻辑处理类。

3、关键点:面向接口编程。

public class ThirdPaymentFactory{
  public static IPaymentService Create(PayChannels channels)
  {
      if (channels.ToString().ToLower() == "alipay")
      {
          return new ThirdPayment.AlipayLogic();
      }
      if (channels.ToString().ToLower() == "alipayptp")
      {
          return new ThirdPayment.AlipayPTPLogic();
      }
      if (channels.ToString().ToLower() == "tenpay")
      {
          return new ThirdPayment.TenpayLogic();
      }
      if (channels.ToString().ToLower() == "tenpayptp")
      {
          return new ThirdPayment.TenpayPTPLogic();
      }       
      //...           
      throw new NotImplementedException();           
  }
}
public class PaymentFacade : IPaymentService
{
  public TradePayResponse TradePay(TradePayRequest request)
  {
      IPaymentService paymentService = ThirdPaymentFactory.Create(request.payChannels);
      return paymentService.TradePay(request);
  }
  public TradeRefundResponse TradeRefund(TradeRefundRequest request)
  {
      IPaymentService paymentService = ThirdPaymentFactory.Create(request.payChannels);
      return paymentService.TradeRefund(request);
  }
 //…
}
2.4 具体接入情况

我们的各支付方式接口封装情况具体如下:

  • 1、支付宝支付接口封装:包含支付、代扣、分润、无密退款、补差、转账、冻结、解冻。

  • 2、财付通支付接口封装:包含支付、分润、退分润、退款。

  • 3、预付款支付接口封装:包含支付、分润、退款、余额查询。

  • 4、微信支付接口封装:包含支付、退款。

三、统一支付通知

统一支付通知包括同步回调和异步通知。支付流程是这样的:用户完成支付后,第三方支付平台会分别回调企业支付网关的同步回调处理服务和异步通知处理服务;企业支付网关接收到回调信息后,会调用业务应用系统的接口进行支付后处理。

统一第三方支付通知的接入有利于安全、可靠性以及满足功能方面的需求,如统一处理支付接口的数据签名,提高支付服务器的物理级别安全,记录支付相关的安全审计日志,支付通知重试等等,让业务系统更简单,更专注自己的业务处理。

统一支付通知的实现与第三方支付的通知接口有些类似,只是减少了不必要的安全验证,我们以两个问题来探讨这点。企业支付网关是如何通知业务调用方的呢?调用方即业务应用系统在支付时将一个同步回调地址 ReturnUrl 和一个异步通知地址 NotifyUrl,传给企业支付网关即可,这与第三方支付一样,只是内网的支付后处理 Restful 接口仅需处理业务逻辑,无需关心安全验证和支付日志。

企业支付网关为什么有了同步回调,还需要引入异步通知机制呢?这是为了提高可靠性。如果同步通知处理服务失败,那么第三方支付平台的服务器会不断重发给异步通知处理服务,但是重发又不能过于频繁,以支付宝为例:企业支付网关的异步通知处理服务执行完成后必须打印输出 success 字符,否则支付宝服务器会不断重发,直到超过 24 小时,在 24 小时内完成 6 到 10 次通知重发(通知频率:5s、2m、10m、15m、1h、2h、6h、15h)。我们的统一支付为了统一重试机制,先接到通知后,立即返回成功,然后内部再统一建立自己的重试机制、异常清单、补尝与人工处理等。

作者介绍

杨丽,拥有多年互联网应用系统研发经验,曾就职于古大集团,现任职中青易游的系统架构师,主要负责公司研发中心业务系统的架构设计以及新技术积累和培训。现阶段主要关注开源软件、软件架构、微服务以及大数据。

张辉清,10 多年的 IT 老兵,先后担任携程架构师、古大集团首席架构、中青易游 CTO 等职务,主导过两家公司的技术架构升级改造工作。现关注架构与工程效率,技术与业务的匹配与融合,技术价值与创新。


本专题已经更新了这些文章,点击蓝字跳转阅读

More

那么贵的技术会议,真的能学到东西吗?

重大革新!Dubbo 3.0来了

其它

随着互联网业务的飞速发展,系统动辄要支持亿级流量压力,架构设计不断面临新的挑战。海量系统设计、容灾、健壮性,架构师要考虑多方面的需求做出权衡。不如来听听国内外知名互联网公司的架构师分享架构设计背后的挑战与问题解决之道。

QCon 北京 2018 目前 8 折报名中,立减 1360 元,有任何问题欢迎咨询购票经理 Hanna,电话:15110019061,微信:qcon-0410。

登录查看更多
0

相关内容

大数据安全技术研究进展
专知会员服务
90+阅读 · 2020年5月2日
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
29+阅读 · 2020年4月12日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
阿里巴巴全球化架构设计挑战
InfoQ
35+阅读 · 2019年11月25日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
5G时代:北京移动业务支撑系统 DevOps 实践
DevOps时代
15+阅读 · 2019年6月13日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
蚂蚁金服微服务实践(附演讲PPT)
开源中国
17+阅读 · 2018年12月21日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
一个人的企业安全建设之路
FreeBuf
5+阅读 · 2017年7月7日
Neural Image Captioning
Arxiv
5+阅读 · 2019年7月2日
Foreground-aware Image Inpainting
Arxiv
4+阅读 · 2019年1月17日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年3月6日
Arxiv
11+阅读 · 2018年1月11日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
大数据安全技术研究进展
专知会员服务
90+阅读 · 2020年5月2日
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
29+阅读 · 2020年4月12日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
相关资讯
阿里巴巴全球化架构设计挑战
InfoQ
35+阅读 · 2019年11月25日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
5G时代:北京移动业务支撑系统 DevOps 实践
DevOps时代
15+阅读 · 2019年6月13日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
蚂蚁金服微服务实践(附演讲PPT)
开源中国
17+阅读 · 2018年12月21日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
一个人的企业安全建设之路
FreeBuf
5+阅读 · 2017年7月7日
相关论文
Neural Image Captioning
Arxiv
5+阅读 · 2019年7月2日
Foreground-aware Image Inpainting
Arxiv
4+阅读 · 2019年1月17日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年3月6日
Arxiv
11+阅读 · 2018年1月11日
Arxiv
5+阅读 · 2015年9月14日
Top
微信扫码咨询专知VIP会员