电商资损防控方案

338 阅读5分钟

引言

随着平台业务的发展,资金安全是我们要坚守的底线。一旦出现资金损失,很有可能造成无法挽回的局面,甚至分分钟给干到公司倒闭、老板破产,砸锅卖铁也难平息客户的怒气,所以资损防控是结算行业的重中之重,必须重视。

那么什么是资损呢?

资损,也就是由于各种直接、间接原因导致的公司、客户产生了资金损失,比如应收的资金收不回、应付的资金超额付。

例如以下因为金额单位错误导致的资损案例。

小王在电商平台 FMall 开了一家店铺,小李用 5 块的券下单,再付 95 块买了一双定价 100 块的皮鞋,确认收货后平台开始结算。

交易系统推送订单,成交金额 100 元,其中平台优惠券 500 分。

清分系统开始分账

平台佣金10%,平台收入 100 * 10% = 10 元佣金收入

营销平台券 500 分,商户收入 500

商户最终收入 = 100 - 10 - 500 = -410 元

最终小王卖了一双鞋,赔了鞋子还要倒欠平台 410 块,果断骂娘跑路,这什么狗屁平台。

资损情况如下:

  • 平台账面应收 410 元没收到
  • 小王应收 100 元没收到
  • 小王实际应付 10 元,系统应付 410 元,如果没跑路,这 400 也是资损

如何防控呢?

从事情发生的过程来分析,分为个阶段,分别是资损发生前,资损发生时,和资损发生后。其中资损发生前的过程是我们关注的重点,需要通过措施尽可能的避免资损的发生,而且此时介入的成本最低、影响最小。

切入点

事前重防

防,也就是提前预知、规避风险。

既然要预知和规避,那我们首先就要搞清楚资损发生的原因,我们先简单的归为系统原因、产品原因和安全原因三类。

原因

系统原因

主要是由于系统设计错误,代码bug,系统故障等技术相关的原因导致资损。

常见场景如下:

  • 接口交互时搞错金额单位,传的是分,当成元用了,结果导致金额放大/缩小100倍。
  • 系统间数据传输导致精度丢失,传的是小数点后10位,用的时候只用了2位。
  • 代码bug,金额计算时加减乘除后没有记录结果或者没有设置精度,或者没按要求舍入。
  • 系统并发没控制好,导致金额被覆盖。
  • 接口没有幂等,导致付了两回。
  • 接口没沟通好,把Result最外层的调用结果当成了业务执行结果。
产品原因

主要是产品设计本身有问题或者运营故障产生的资损。

常见场景如下:

  • 支付宝补贴的故障,运营把转账也配成了支持国补,导致转账使用了补贴。
  • 产品设计上不要求锁汇,汇率变动后导致资损。
安全原因

主要就是安全问题,比如被攻击、盗号导致的资损。

措施

常见的手段,就是按照资损原因,采取对应的措施。

技术措施

建立技术规约,在技术团队内推广和检查落地情况。

  1. 金额操作使用同一的Money类,禁止使用BigDecimal、int、long等数字类型进行金额运算
  2. 接口出入参在文档明确记录单位、精度,避免不同应用间因为歧义产生资损
  3. 接口做幂等和防重
  4. 针对不能重试的接口,禁止重试
  5. 上线前做CR确保规约执行到位
  6. 针对接入的系统,要求提供对账口径,确保数据有一致性的兜底方案
  7. 建立上线清单机制,上线前进行逐一检查核对,防止因为漏配、错配导致资损。
  8. 隔离环境,防止测试、验证数据污染生产系统。
  9. 对外部系统做review,防止因为流水号重用等原因造成资损。
  10. 接口考虑版本兼容。
  11. 针对重点case做自动化测试,确保覆盖到位。
产品措施

开发和测试同学往往因为行业知识不够,不能很好的识别资损bad case,这时候最好有专业的顾问来支持。

  1. 提供行业知识培训,帮助业务和技术同学提高业务技能
  2. 罗列资损点清单,针对清单逐一给出解决方案
  3. 建立资损bad case案例库,根据案例对系统做重点审查
  4. 建立预案,针对线上已经出现的资损,确保有快速可以操作的方案

有条件的还可以做资损演练,帮助团队提高资损防控能力。

安全措施
  1. 采用 https 替换 http
  2. 禁止明文存储密码、手机、卡号等敏感信息
  3. 接口加密通讯,通过签名和密文保障数据安全
  4. 关键系统管控,禁止外网登录
  5. 权限管控,敏感操作增加授权和审计日志,权限设置有效期

事中重控

事中主要是建设及时发现的能力。

  1. 建立对账能力,确保上下游数据一致
  2. 建立业务监控,确保数据同比环比波动在预期范围内
  3. 建立告警能力,通过微信、电话告警,责任到人

事后重补

也就是一旦发生,如何应急处理、补救。主要是对已经发生的资损,按照预案推进处理。

常见处理手段如下:

  1. 发现金额计算错误的,如果支持重算,就立马点重算
  2. 接口调用失败的,支持自动重试的,进行重试
  3. 不能重试的,记录异常,走功能接口修数据或者回滚、冲正
  4. 针对商户发生资损的,安排运营和客服进行安抚,赔偿。