经验分享|支付渠道的可用性设计,背后的产品思路是这样的

11 评论 11566 浏览 87 收藏 6 分钟

笔者近期负责提升支付渠道的可用性,做完后有些想法,写出来和大家分享下。

需求的源头

用户在进行支付时,有时候会出现银行系统不可用、超时情况,导致用户不知道明确的支付结果,那么用户80%会进行投诉,客服处理完后,这个用户就基本上和支付/电商平台说再见了。

要满足上面的需求,我们就需要关注以下几个问题:

  1. 银行系统出现异常是否能及时进行故障隔离?
  2. 如果要隔离,是否能第一时间发现银行系统出现异常?
  3. 如何判断银行系统出现了异常,异常的原因是什么?

其实这三个问题对应的解决方案很明确:

  • Q1——我们需要一个路由系统
  • Q2——我们需要一个监控系统
  • Q3——我们需要一个错误码表

在产品设计过程中,我们按照Q3 → Q2 → Q1这种自下而上的方法去进行。

产品设计

我们需要一个错误码表

一家支付公司或电商平台接入的银行渠道都很多,而每家银行都有自己的错误返回规范。那么,这时候我们就需要将N家银行返回的错误码进行抽象,建立一套错误码表。

渠道错误码分类

错误码的拆分维度有很多种,我是按照渠道可用——>用户信息校验——>交易来分类的;渠道不可用、用户信息校验、交易这3个只是大类,还需要针对每个大类进行二次拆分,细分出小类,小类分的越细,遇到问题定位的也就越快,同时对接下来的两步也就更有帮助。

我们需要一个监控系统

对于监控系统,存在着一些基本要求:

  1. 监控的对象要具体,最好能细分;
  2. 监控的指标要足够明确,每一个独立指标的计算方式要简单;
  3. 监控指标要有时效性。

那么,针对支付渠道的监控系统,监控的对象应该要具体到所有接入的银行渠道;监控指标要对每个银行进行个性化定制,因为每家银行的系统性能都不一样;

监控指标设定的维度也很多,因为渠道在整个支付链路的底层,对系统层面要求比较高,所以监控的指标如下:

  1. 每个渠道调用的平均耗时
  2. 每个渠道调用的系统成功率
  3. 每个渠道调用的耗时峰值
  4. 每个渠道调用的异常订单数

监控指标的时间跨度建议根据业务量来设置,一般采用秒级或者分级;监控指标定义好后,我们就要为每个渠道设置告警规则,这些规则的阀值需要根据日常的交易情况和每个渠道自身的属性进行独立设置;而规则的触发就要依靠渠道错误码表了。

这样,监控系统就可以在某个渠道出现问题时,根据错误码表来分析当前的异常属于哪一类,是否影响到用户的正常支付,如果影响了,就会发出告警。

我们需要一个路由系统

一个支付产品最终于能让用户顺利的&愉快的完成支付;而让用户顺利的完成支付依赖于出现异常的通道。

能否被及时的隔离掉,同时能否将用户带到可以正常支付的通道上,路由功能做的就是这件事情。

为此,我们也需要在路由系统中对每一个渠道设立一个路由规则;这个规则将告诉路由系统当渠道出现问题时,该如何隔离。

路由规则的设定有一种比较简单的方法:渠道A在{num}分钟内触发了{num}次告警,那么就执行渠道隔离(关闭或者切换)的动作。

这样在通道出现问题时就可以及时隔离掉,保证用户正常的支付了。

结语

我们可以把支付渠道可用性看作一个大的系统,这个大系统是由3个独立的小系统组成的;它是一个自下而上的,闭环的体系;引用《失控》中的思想,一个复杂的系统是由若干个独立的小系统协同合作组成的,每个小系统越简单,它们组合在一起后,就能展现出更强大的组织性和发展性。

目前只是建立了一个最原始的生态,还存在着部分的人工干预,那么后期我们就要考虑,现在人做的事情,机器能不能做;我们能不能在用户提交支付之前就帮Ta选择好最适合的支付渠道。

 

本文由 @tony 原创发布于人人都是产品经理。未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
海报
评论
评论请登录
  1. 很多银行,第三方支付公司提供的错误码很模糊,有时候无法确定失败原因,从而也不能简单的作为失败处理,很麻烦😂

    回复
    1. 主要是异常状态的明确

      来自江苏 回复
  2. 谢谢分享

    来自广东 回复
    1. 😉

      来自江苏 回复
  3. 监控系统监控支付平台和银行平台交接之前的行为尚且简单,但对各个银行所有流程进行监控让银行开放系统源代码恐怕就有点不太现实了吧。银行的错误归银行,支付平台可以提示是银行系统出了问题,将用户资金回归用户账户,相当于用户授权平台使用资金,再转告银行处理问题,把问题控制在平台和银行之间,这样就节省了用户的等待成本。

    来自广东 回复
    1. 每家银行 都会提供错误码的

      来自江苏 回复
    2. 我的意思是用户时间归用户,沟通时间归平台和银行,在出现错误时即时解决用户需求(平台预付资金给商家),然后平台再和银行协商错误的解决方案。

      来自广东 回复
    3. 如果是你,你没有收到钱,就垫付资金给别人,你放心吗,一个人垫付100放心,100万人垫付10亿你放心吗?所以您说的这是不可能的。如果按您说的,一个乞丐,银行卡都没钱,如果每天运气好碰上支付故障,那他每天都可以吃免费午餐了。

      来自北京 回复
    4. 故障时偶然的,如果有这样的乞丐可以去买彩票了,根本不用这样混饭吃。

      来自广东 回复
    5. 在纠正一下我说的,没收收到钱,和收到了扣款成功的指令也是两回事,所以即使垫付,也必须确保收到了扣款成功的指令(哪怕资金结算晚一点),否则不可能垫付,万一用户银行卡余额不足呢?

      来自北京 回复
    6. 银行卡余额的确没有考虑,可以留出缓冲空间让平台直接沟通银行系统。

      来自广东 回复