多业务在线商城自建支付平台

当前在线支付的场景太多太多,只要有购买行为的都算是,我姑且把他们统称为「在线商城」;不管是在线教育、在线图书等等。当我们的产品线从 0 到 1 的时候,我们往往对「支付」没有太多的布局,想的更多的是如何让产品第一时间上线,就是我们俗称的「跑起来」。 那么,我这里强调的是,只要有多条业务线的可能咱们的「支付平台」的布局就要先行一步。

必要性

我们先来看一张单一业务的支付流程图

主要分成三个部分:下单、 选择支付方式、第三方支付。但从业务流程和开发复杂度上来看是完全没有问题的,流程也相当清晰和简单。

我们再来看一张多业务线的支付流程图

大家就可以看出开发的重复性之高,后面两步完全重复。在技术层面上来说代码复制粘贴就搞定了,但是一个新的业务上线即使是重复性的模块也是需要重新测试、部署的,也就是需要额外的人力成本。

下面我们再来看一张通过「支付平台」整合的多业务线的支付流程

它的优势显而易见,支付相关的业务只需要一次开发,业务放接入即可。当然优点不仅在于此,更多的还在于扩展性,后面章节会深入。

优势

1、可扩展性 假设某一天又诞生了一个第三方支付「财富宝」,那么各个业务方势必每个集成,也就是说所有的流程都得再走一遍。那如果是「支付平台」呢?简单,业务方完全不用动,只需要在「支付平台」上集成财富宝即可。因为支付平台封装给业务方的接口是内部高度集成的,与具体的「支付方式」完全没有任何关系,稍后会附上「支付平台时序图」,大家就会一目了然了。

2、财务数据统计汇总 业务单独接入支付的方案,那势必流水会散落在各个业务方里。而通过「支付平台」转接之后,就可以对财务流水做统一管理。大家可能说不就是钱嘛,一加就可以了;其实比我们想想的好复杂得多,因为会涉及到各种财务报表等等。

3、业务分离
「支付平台」是与业务完全无关的,也就是说可以从业务开发任务中分离出去,由专人开发推进,变向加快了业务开发的进度;很简单嘛,原本要做的东西不用做了,别组给做了。

集成方案

先给大家看下完成的「流程图」

具体方案会涉及到很多技术方面的东西,在此就不具体展开了,直接看「时序图」。

在开始之前,首先必须要搞明白「支付宝」和「微信」的接入流程:

支付宝 – 即时到帐
微信 – 扫码支付

迁移成本

我之前是业务方单独接入的,我想迁移成独立的「支付平台」需要多少成本呢?

当然是越早迁移越好,我的切身经历是已经做完两个业务方,在第三个业务的时候发现问题,组建「支付平台」。截至到目前都还没有迁移完毕,而仅仅是第三个业务对接了我们的「支付平台」,其他两个老的业务尚未对接,但都将计划之中,只不过优先级不高而已。

1、支付平台的开发方面 支付平台可以分两步开发:其一,支付;其二,订单。我们只做了「支付」,没用 5 个工作日,因为这些接口之前都已经全部调通过,现在做的更多的是整合。

2、支付流程变更方面 之前单个业务方的支付流程可以随心所欲,但统一走「支付平台」之后,流程会做一些微调,改动不大。

3、数据迁移方面 原本的订单信息有可能和「支付平台」结构完全不一样,在数据迁移过程中有很多兼容性的东西需要被考虑进去。

后记

上文中是针对「Web 端的支付」,而「App 端的支付」与其有所不同,因为 App 端咱们无法将第三方支付提供的 SDK 整合。Web 中我们将 API 整合,业务方直接与我们自己的支付平台通信。而 App 中呢?我们只能分别下载微信和支付宝的 SDK,App 直接与他们通信,因为我们是没法对 SDK 进行操作的,也就是说我们没法自己再封装个 SDK,集成了微信和支付宝。

但可喜的是,我们能对响应进行整合,App 与三方平台发起交易之后,直接通知我们的支付系统,然后支付系统再对业务方进行分发,进而到达了整合的目的;下面是 App 接入的「时序图」。

结束之前最后唠叨一句,不用去对接「网银」,出现各种银行卡支付,直接对接支付宝和微信足以,我们已经有血淋淋的教训了。

之前是这样的:

现在是这样的:

Author: 四勾 4J

via 4jplus.com

1 thought on “多业务在线商城自建支付平台”

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax