黑马程序员技术交流社区

标题: 【上海校区】解密支付平台建设资金底线防火墙的杀手级... [打印本页]

作者: wuqiong    时间: 2018-5-25 16:55
标题: 【上海校区】解密支付平台建设资金底线防火墙的杀手级...

在金融支付行业,资金底线的打法是至关重要的,保证资金不发生损失是任何一家金融支付行业的第一要务,这也是最困难的一个任务之一,一家支付公司每天的支付流水就有几亿、十几亿,甚至几十亿到上百亿、上千亿都屡见不鲜,在这样大的资金流水面前,我们应该如何保证资金万无一失呢?

大家应该都听过骑士资本(Knight Capital)的故事,这家美国股市经纪商因为错误的交易头寸造成4.4亿美元的税前损失,后来骑士资本的股价下跌63%至2.58美元,使得其市值缩水至2.53亿美元,只有几天前的四分之一,随后股价再次下跌17%至2.14美元。而这一事件是由骑士资本一个小小的“技术问题”所引起,致使它向交易所发出了错误的股票交易指令。

因此,如果我们做的是金融的交易系统,保证资金安全是底线,保证了资金安全,我们才能谋取利润,谋取利润能够让我们的公司活下去,接下来要让我们的盈利模型进入批量模式,我们才能将公司做大、做强。

资金损失和资金底线

我们如何来定义资金损失呢?凡是从事金融支付的活动的过程中,由于人为或者系统导致的资金亏损,都叫做资金损失。例如,在一笔电商交易过程中,发生了平台单边,支付未成功,但是通知用户订单成功,并发货,这是一个典型的由于平台单边引起的资金损失。

采取的客观的和主观的方法来保证不发生资金损失,就是资金底线防火墙,我们把这些方法称为保证资金底线的方法。资金底线是一个非常专业化的非主流概念,从百科或者其他的渠道是找不到官方定义的,我们通过举例来说明帮助读者理解资金底线,例如,我们通过对比支付成功通知和原支付信息中的ID和金额来保证不发生单边,就是保证资金底线的一个典型案例。

在本文后面部分,我们会聚焦在第三方支付行业的资金损失的风险和资金底线防火墙的建设。

从支付业务划分资金底线风险

在第三方支付行业,通常通过资金的流向把业务分成收单和出款,这里我们分享可能存在的收单和出款的资金底线风险的场景。

收单的资金底线风险

收单业务是第三方支付的主要业务之一,由于收单业务可以结合多种交易场景,因此,也是最赚钱的一种业务,具有交易量大、风险性高的特点。

单边是收单业务中最典型的资金底线风险,单边这个词汇来自于财务行业,在收单的结算流程中,很容易出现一种“单边账”的情况,单边账:即一方的账目发生变化,而另一方没有,那么随之而来的问题就是,钱去哪儿了?

这个场景又进而分为长款和短款两个情况。

我们看到长款实际上是我们的资金比账目多了,实际上没有资金损失,单边账有百分之九十九点九九是长款,如果出现了短款情况,那就是灾难,也是最严重的资金底线风险,是我们应该要坚决杜绝的。那么我们在第三方支付平台上,所说的单边通常指的是财务行业里单边账的短款,也就是导致了我们有资金损失的那个情况,因为工作在第三方支付的小伙伴们都不是财务专业或者对财务不熟悉的,所以,大家都把单边账的短款成为单边,这里我们也按照这个习惯来讲解。

下面是一个典型的第三方支付收单的示意图。

第三方支付的系统上接商户系统,下接银行系统。由于其处在承上启下的位置,因此,是最容易产生收单单边的资金底线风险。

简单的来说,产生收单单边资金底线风险的情况都是下游系统失败了,但是由于某种原因,典型的就是系统bug,返回给上游系统成功,如果上游系统是商户的电商系统,有可能已经发货了,这就导致了资金损失。

我们从系统层次上将单边分成以下3种类型。

对于以上3种情况,都是我们要坚决避免,或者及时发现进行止损的。

另外,还有两种特殊的单边场景,一个叫做金额单边,一个叫做订单号重复单边。

出款的资金底线风险

出款业务也是第三方支付的重要业务之一,具有体量大、单笔交易额高的特点,出款业务更容易产生资金底线风险,如果不加以防控,发生重复出款、多出款、出错款也是家常便饭。

具体的资金损失的场景如下。

从时间上划分避免资金底线风险的方法

我们从发生资金底线的时序上总结避免资金底线的风险的方法,这些方法放在一起构成了资金底线防火墙。

事前避免

根据经验,分析发生资金底线的风险的场景,阻断场景发生的必要条件,避免这种场景的发生。这种方案是最好的方案,也是最难实现的一种,一般都是通过总结历史线上事故,找出发生的典型的资金风险场景,针对场景的特点设计避免方案。

例如:在一笔支付做完后,将资金入账,入账的时候通过渠道查询支付是否成功,如果不成功,讲拒绝入账。

事中拦截

事中拦截是一个非常重要的避免资金损失的方案,就是在支付过程中,通过支付的特点来识别是否发生了资金底线风险,如果识别到了,则可以及时拦截,不让事情进一步恶化。

例如:渠道在收到银行返回的支付成功通知的时候,会检查返回通知里面的成功支付金额是否与支付订单一致,如果一致再向上通知。

事后止损

对于某些场景,我们通常没有办法完全事前避免和事中拦截,在这种情况下,我们通常通过对账、监控等手段发现问题,并且事前预设止损的运营功能,一旦发现问题即使止损。

例如:我们通过监控手段得知某个渠道的成功率偏低或者偏高,然后进行报警,通过运营决策可以关掉某个渠道。

主观方面避免资金损失

很多时候一次比较大的资金底线事故都是人为因素导致的,经常是用人来把关的多个阶段都被忽略了才导致最终的“惨案”,这也难怪,我们是人,不是神,每天都收到生活、家庭、工资、心受伤的程度等各种因素的影响,偶尔开个小差是不可避免的。

主观方面避免资金损失主要是通过对人的分析和采取策略,来避免资金损失。在笔者工作的几年里,一直负责资金底线风险的任务,笔者通过两个重要的主管上的方案来避免资金损失。

客观方面避免资金损失

尽管我们可以通过主观方面的培训、设计评审提醒大家要有资金底线保护的意识,但是,由于我们每个人员包括测试人员每天的状态不一样,情绪不一样,那么表现也不一样,因此,我们不能完全仰仗人来保证资金底线,我们应该寻找能搞保障资金底线的客观规律,把这些客观规律做到系统中,这样就能保证系统的资金是无法撼动的。

我们总结有一下多种方法。

执行资金底线保护任务的方法论

如果你足够幸运在你所在的支付公司里负责资金底线保护的任务,那么恭喜你,只有关键核心的人才能做这份工作,但是,还有另外一个说法,这个工作其实是费力不讨好的,做好了是应该做的,做不好那都是你的责任,不管怎么样,事情还是要做好。

如果你接到了这个任务,感觉无从下手,那么请看下面的方法论。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2