通常来讲,银行会提供两种支付途径:无跳转的快捷支付接口和带跳转的网银接口。前者在绑卡,支付的时候,不须要跳到银行页面上去处理,后者则须要在银行的网银页面上完成。显然前者对用户来讲体验要好多了,用户流程不会被打断。快捷支付要求支付系统在本地保存用户的支付信息,如卡号,登记手机。系统要确保这些信息不被泄漏。风险很是好,因此大部分银行要求接入方必须通过ADSS检验才可以接入快捷支付。linux
这种固定方式的接入有单点故障的问题,一旦某个渠道出问题,绑定的支付方式就没法使用。改进策略是为每一个支付方式定义多个渠道,第一个渠道出问题即选择第二个,以此类推。android
固然,更进一步,能够为候选渠道定义权重,按照权重来选择支付方式。当渠道出问题,自动调整权重。docker
路由实现上还会更复杂,对同一张银行卡,运营上会要求在不一样的系统上,好比android,iOS,windows上,或者不一样地区,如大陆,台湾,香港,北美等,甚至不一样业务上,采用不一样渠道来支付。windows
支付渠道安全
若是采用微服务来实现,总体设计上,能够考虑将支付渠道分离、支付网关前置分离。支付渠道的微服务实现有两种策略,一种是按照服务来拆分,一种是按照渠道来拆分。服务器
● 按渠道拆分,指每一个渠道单独部署在一个容器中,对支付网关提供相同的服务。微信
● 按服务拆分,是按接口来拆分,分为支付,对帐,退款等子系统,每一个服务单独部署,全部容器的服务都实如今一块儿。微服务
渠道拆分性能
按照服务来拆分的一个典型案例是大众点评网的早期实现。 大众点评支付渠道网关系统的实践之路。 每一个支付服务接口实现为一个独立的子系统,独立部署,经过支付网关前置来对外提供服务。 这篇文章里面也提到这种方式存在的问题,微信支付
● 银行的加密客户端会有各类奇葩的需求,有些能够支持linux,有些要windows系统,如何在一个容器中知足全部需求?
● 这样拆分后,每一个渠道接口独立部署。某个渠道出问题也不会影响其余渠道。至于渠道访问量小致使资源浪费问题,能够经过虚机或者docker的资源调度来解决,谁也不会在物理机上玩微服务。
● 对接渠道难点在于对输入输出作加密和解密,以及组装和解析报文。同一个渠道对不一样的服务的加密解密方式是同样的,报文格式也是同样的。按渠道来构建服务能够共用这样方法,减小开发投入。
● 从安全的角度,按渠道划分也有优点。通常渠道都要求只对接到特定ip的机器,这样每一个渠道对接系统所在的机器仅开放对渠道和支付网关前置机的访问白名单便可,尽量的缩减被暴露的风险。
接入渠道
对于支付渠道,首先考虑的是接入哪些渠道。要对接的渠道按优先级有:
● 第三方支付,对大部分应用来讲,支付宝和微信支付都是必须的,通常来讲,这二者能够占到90%以上的交易量。用户不须要绑卡,受权后直接支付就行。各类平台都支持,性能和稳定性都不错。对于一些特殊业务,好比游戏,企业支付,能够查看一些专用的第三方支付平台。
● 银联,这货的存在,极大方便了和银行的对接。和第三方支付主要不一样在两个地方一是须要绑卡,也就是用户先把卡号,手机,身份证号提供出来。这一步会折损很多用户。绑卡后,之后的支付操做就简单了,用户只须要输入密码就行。手机客户端不须要像第三方支付那样安装SDK,都在服务器端完成。固然,这是针对快捷支付。网银支付仍是挺麻烦的。银联接入也须要ADSS认证。
● 银行,建议先看这一篇文章,了解下对接银行的难度。那最终须要选择哪些银行?先看个统计数据。 截至 2015 年末,我国银行业金融机构包括 5 家大型商业银行、12 家股份制商业银行、133 家城市商业银行、5 家民营银行、859 家农村商业银行、71 家农村合做银行、1373家农村信用社、1 家邮政储蓄银行、3 家政策性银行、 311 家村镇银行、48 家农村资金互助社。优先选择5家商业银行,他们占40%的交易量。其次是股份制银行和邮储。这就18家银行了。老板要是不满意,城商行和农商行加起来有1000多家呢。通常对接一个银行预计有3周左右的工做量,大部分银行须要专线接入,费用和带宽有关,一年也得几万费用。不一样银行对接入环境有不一样要求,这也是成本。另外,还有一个重大风险,就是央行在搞得网联系统,毕竟尚未出来,相关资料参考知乎上关于网联的一篇讨论。
● 手机支付,如今很多厂商都内置了各类支付,好比苹果的In-App支付, 三星支付、华为支付等, 这些支付仅针对特定的手机型号, 支持NFC等,根据业务须要也能够接入。 就是目前用户群不大,收益不明显。
● 话费支付, 这一块容易被人忽略,但考虑到国内很多职场人士,话费是公司报销的,每月多的用不完,因此这块支付仍是至关有市场的。 问题是,联通和移动两大运营商,不只接口不能互通,内部各个地域也是各自为政,因此对接起来仍是有点麻烦。不过话费支付领域也有相似支付宝微信的第三方支付公司,好比虹软、联动优点等公司。
这篇文章对支付系统总体设计作一个概要描述,后续会逐步补充内容并完善。其实每一个模块都是一个大坑,有不少的技术细节。