关闭

支付网关设计精要(Ping++ 联合创始人 赵宇)

标签: 支付网关设计出入境订单
1342人阅读 评论(0) 收藏 举报
分类:

博主说:本篇文章是根据「Ping++ 支付设计大会」上 Ping++ 联合创始人赵宇的现场演讲整理而成,着重介绍了如何设计支付网关,并以出入境类比订单流程,形象生动,读之获益匪浅。

正文

  说到支付网关,首先需要了解网关的定义。网关的作用是实现网络之间的通讯链接,包含两个基本功能:网间连接和协议转换。

  同理,商户业务系统中的支付板块实现的就是商户业务系统与银行支付系统之间的链接,所起到的作用是类似的,可以被看作为一个网关。因此,我们今天要讲的支付网关设计,其实就是商户业务系统的支付板块设计。

1

  在电子支付还没有普及的时候,商户支持一家银行是通过对接这家银行提供的一个系统接口来完成的。然后随着支付行业的不断发展,商户已经不满足于支付环节只支持一个银行或者两个银行了。

  此时商户的支付系统需要同时对接多个银行,并处理好由此导致的很多衍生问题,例如对账、清算等。而且开发一套这样的系统所需的人力成本和时间成本也是商户所不愿意接受的。

  此时,第三方支付机构诞生了,他们来开发运营一套系统,代替商户实现同时对接多个银行系统的功能,然后通过统一的接口提供给商户使用。所以这一个阶段第三方支付机构的系统就是支付网关。

  支付网关所具备的基础功能除了实现商户业务系统与银行系统之间的链接,还包括很多其它的支付业务相关基础功能,包括:订单管理、渠道管理、风控管理、路由配置、帐务管理、清算管理、商户管理和用户管理等。

  随着线上支付的进一步发展,第三方支付机构越来越多,这时候商户需要解决的问题已经不再是如何接入多家银行,而是如何接入多家支付机构。此时商户对支付系统的需求也发生了变化,网关的位置也进一步前移,对商户的支付系统提出了更高的要求。现在也有一个角色愿意为商户来实现类似功能,那就是类似 Ping++ 这样的聚合支付服务提供商。

  从商户的角度讲,此时的支付网关和传统支付网关区别在于,关注点会更少,商户只需要关注订单、渠道、风控、账务管理和路由配置即可。

  为了更清楚的解释说明,我用一趟出境自由行之旅来演示一笔订单在上述各个模块之间的流转过程。通常一笔订单的处理涉及到四个环节,有创建订单、报文签字、支付路由、结果确认。为了更好的配套,我们还加入了商户入网。

2

  渠道入网申请是订单和渠道管理的首要环节,就好比出境游首先要有护照。

  当然并不是说有了护照就可以去任意国家和地区。不同的地区需要不同的护照类型(护照,港澳通行证等)。同样,使用不同的支付渠道,也需要分别进行入网申请。这里,尤其需要了解的一点是,支付渠道不等于支付产品。无论支付宝或者微信支付,在不同的前端场景下,比如 App 支付、网页支付,都有相应的支付产品。

  所以,并不是说商户要用微信支付就只需要接入微信支付的一个接口。微信的开放平台和微信的公众平台就需要申请两个独立的支付权限,经常有客户误把开放平台的 ID 配到公众平台,导致报错。

3

  有了护照以后,我们还需要办理签证才能出国。此时是需要提供一些必要信息的,例如往返机票信息,目的地酒店信息等。这也与创建支付订单同理,我们需要提供一笔订单所需的必要要素。这个环节,需要注意以下两点:

第 1 点:订单号

  如果自己做支付系统,订单号是第一个要考虑到的问题。当我们同时做多个支付产品对接的时候,首先需要注意订单号的格式,不同支付产品渠道对订单的格式要求不一样,特别是银行端的格式更特殊一些。

  其次还要注意订单号的唯一性。在实际操作的时候,订单号的唯一性不仅和技术实现有关,还和业务流程有关,例如同一订单是否支持多次支付等。这里我们建议区分业务订单和支付订单两个维度。通过业务订单和支付订单的一对多映射来解决唯一性问题。

第 2 点:订单有效期

  订单有效期可以分为两个部分:支付有效期和退款有效期。

  支付有效期是可以商户自定义的,需要注意的是不同渠道的参数使用方法不一样,有的是相对时间,有的是绝对时间。

  而退款有效期是由渠道规定的,不同机构的退款有效期不一样。这样我们在业务设计的时候需要取一个最小值。对于超出渠道退款有效期的订单而业务上又要允许退款,那么为了保证订单信息的正确性,必要的时候必须使用专门的逻辑来处理。

4

  支付宝手机支付和微信支付/银联移动支付的接口区别可以用签证类型很好的类比。

  支付宝手机支付发起是由商户在后台将所有东西按照渠道的要求进行处理、准备,然后直接前端通过控件调起支付宝的 App 发起支付。这非常像我们的落地签,自己准备好必要材料,飞机落地以后对方海关才进行查验。

  而微信支付和银联移动支付等渠道则必须先进行后台请求,请求通过后,再由前端发起支付动作。这就和标准的签证非常类似了,资料不符合要求前,是拿不到签证的,也就无法进行后续操作。

  这就是不同支付渠道在业务逻辑上有差异的地方,不同渠道的订单落地顺序、落地内容,以及后续的状态更新等在支付网关设计时都需要相应考虑。

5

  出境查验相当于报文签名。出境查验的时候,我们需要检查护照和签证的合法性。签名的作用类似,一是防篡改,二是防抵赖。这个环节,需要弄清楚两个概念:对称加密 AES 和非对称加密 RSA。可以区分公私钥就基本上没有问题了。

6

  出行要注意安全,同理,支付系统也要考虑到风控管理。通常我们把风控管理分为两个层面,一个是账户资金风险控制,另外一个是业务风险控制。

  账户资金风险控制这环是由支付机构来负责的,因为如果支付机构的支付安全层面出现问题,将导致用户信息泄露、资金损失以及非法交易等一系列问题。所以这些机构都花了足够的精力去做账户风险控制,这样的后果就是,商户首先是无法接触到消费者的个人支付敏感要素的。当然,我们就可以投入更多的精力在业务风险的领域。

  业务领域的风险控制更多需要考虑业务漏洞导致的风险。互联网产品常见业务风险包括恶意刷单、套现、薅羊毛。我们防止这几类风险的常见方式是通过对一些关键要素的采集,比如交易帐户、支付帐户、交易频次、交易金额、交易时间、交易地点等,然后基于相应的风控规则进行判断,最后根据判断结果来做相应处理。

7

  这是支付最后的环节。很多商户经常困惑是通过异步通知,还是通过主动查询来确定最终支付结果?这两个方案我们认为是并存的,一个是保证效率,一个是保证可用性。我们建议客户根据自己的业务特点对两个机制进行有效的配合使用。

  同时,我们需要注意的是并不是所有的支付机构都具备异步通知逻辑;也并不是所有的退款都有异步通知,比如微信退款。所以,支付网关要在这个环节来进行同一化处理,确保后端业务系统对接的规则一致性。

8

  最后讲一下对账,对账管理一般分为渠道对账和内部对账。渠道对账要保证清算资金、支付订单状态的一致性,内部对帐必须保证交易单、支付单、财务明细的一致性。

  通常来说,对账主要包含以下几步:获取对帐单,对账单数据格式化,交易金额和订单状态一致性核查,以及差错处理。

  差错有两种常规类型:长款和短款。站在商户维度来说,长款就是商户多收到钱。一般来说,订单状态不正确和重复支付都会导致长款。短款就是商户少收到钱,这种情况一般概率较低,大多出现在第三方机构与银行系统之间的业务对接环节。

  订单的差错处理,我们强烈建议人工介入,不要自动处理。因为这个涉及到资金的进出,必须要谨慎处理。

9

  经常会有商户问,我们需不需要做支付路由。实际上,在目前支付网关需要对接的是不同支付产品,当该支付产品的入口是唯一的时候,是无法进行支付路由设计的,最直接的例子就是微信和支付宝。但现在不少银行都成了微信和支付宝的代理商,支持他们的线下或者线上支付产品。在这个前提下,是可以做一定的支付路由处理的。

  通常来说,支付路由主要是基于:成本,稳定性和流量均衡这几点来考虑进行设计的。而且,支付路由不单单是一个支付请求的路由设计,对于后续支付结果的处理,资金的对账等都需要仔细分析处理。

  最后总结一下,我们通过一个订单的处理过程,基本介绍了一个支付网关涉及到几个板块,包括:财务管理、业务管理、路由管理、渠道管理和风控管理。但仅有这些还是不够的,作为支付网关来讲,我们还要做接入管理,进行流量控制和准入控制。需要做基础平台支撑,进行系统状态监控,提供内部运维管理。只有这样,才可以算是一个相对完备的支付路由,如下图所示。

10


转载声明:本文转自微信公众号「PingPlusPlus」,支付网关设计精要

1
0
查看评论

第三方支付平台:BeeCloud和Ping++对比

前言最近刚忙完手头上关于web的活,于是找了点感兴趣的事情研究一下。之前有朋友说想要研究一下第三方支付,当时我给的说法是直接用企业资质去支付宝、微信或是银联申请官方的接口。
  • xuexiiphone
  • xuexiiphone
  • 2016-05-12 15:00
  • 5731

ping++支付那点事情

最近自己做了一个ping++的支付,其中遇到了一些问题,跟大家分享一下,         先简单的介绍一下ping++,也就是一个聚合的支付平台,对于开发者来说,比较实用,便捷,有了这个聚合平台,就不需要去看各个第三方支付平台的...
  • baidu_25026917
  • baidu_25026917
  • 2017-03-09 14:13
  • 1293

支付网关的设计

支付网关的设计 支付圈 在支付系统中,支付网关和支付渠道的对接是最核心的功能。其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网关分发到对应的渠道模块上。一旦定型,后续就很少,也很难调整。而支付渠道模块是接收网关的请求,调用渠道接口执行真正的资金操作。每个渠...
  • ganjing222
  • ganjing222
  • 2016-12-29 09:59
  • 3424

.Net免费公开课视频+资料+源码+经典牛逼 汇总篇【持续更新】

.Net免费公开课视频+资料+源码+经典牛逼 汇总篇【持续更新】 博主推荐一:WP8.1最经典培训教程 博主点评:经典Windows Phone8.1 Runtime API培训最经典教程,此教程由传智播客蒋坤老师录制的一整套WP8.1入门级视频教程,讲授内容非常广、深入而且非常适合入门学习...
  • kasama1953
  • kasama1953
  • 2016-08-12 16:30
  • 3566

pingxx付款流程

在themes/js/libs/questiondetails.js中,旁观者用户点击语音后进入identityService.saveUserToPayMent接口。首先声明一个charge对象,当price大于0时,拿到服务器IP地址, 定义一个map charge,在charge中放入orde...
  • qq_32578191
  • qq_32578191
  • 2016-09-26 18:28
  • 653

java ping++支付

支付工具类: /** * ━━━━━━神兽出没━━━━━━ *   ┏┓   ┏┓ *  ┏┛┻━━━┛┻┓ *  ┃       ┃ *  ┃   ━   ┃ *  ┃ ┳┛ ┗┳ ┃ *  ┃       ┃ *  ┃   ┻   ┃ *  ┃    ...
  • u011072139
  • u011072139
  • 2016-08-22 17:11
  • 8815

支付渠道网关系统的实践之路

业务的快速增长,要求系统在快速迭代的同时,保持很好的扩展性和可用性。其中,交易系统除了满足上述要求之外,还必须保持数据的强一致性。对系统开发人员而言,这既是机遇,也是挑战。本文主要梳理大众点评支付渠道网关系统在面对这些成长烦恼时的演进之路,以及过程中的一些思考和实践。 在整个系统的演进过程中,核心...
  • yuanlaishini2010
  • yuanlaishini2010
  • 2017-01-14 16:26
  • 1895

Ping++ 支付接口对接

一、请求charge对象 package com.bra.modules.util.pingplusplus; import com.bra.common.utils.SystemPath; import com.pingplusplus.Pingpp; import org.springfram...
  • jxq0816
  • jxq0816
  • 2016-07-01 16:22
  • 7052

感谢传智播客+C#.Net学习之旅

《C#.Net基础学习视频2014版》在本月中旬左右终于学习完了,终于学完了。                 自2015年暑期7月份开始学习C#...
  • dear_Alice_moon
  • dear_Alice_moon
  • 2016-06-01 15:13
  • 3933

ping++支付接口对接(基于SSH框架)

对于ping++支付接口对接,其实就是创建一个 charge对象向用户收款。 charge 是一个支付凭据对象,所有和支付相关的要素信息都存储在这个对象中,你的服务端可以通过发起支付请求来创建一个新的 charge对象,也可以随时查询一个或者多个 charge对象的状态。每个 charge对象都拥有...
  • qq_27026603
  • qq_27026603
  • 2017-04-03 21:43
  • 620
    个人资料
    • 访问:957428次
    • 积分:12879
    • 等级:
    • 排名:第1271名
    • 原创:258篇
    • 转载:85篇
    • 译文:11篇
    • 评论:954条
    博主的 GitHub 账号
    GitHub : Charies Gavin

        鉴于 CSDN 糟糕的用户体验,博主会将一些优质的文章迁移到 Charies Gavin's Blog  欢迎大家在 GitHub 上 Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏