分析【双11支付宝故障】了解支付流程

399 阅读2分钟

本文从支付流程入手分析下“支付宝故障”,猜测下支付宝的故障原因

一、故障背景

大家最直观的体验就是:在某些购物平台买东西,付款时显示支付失败,但是钱却被扣了。

整个故障持续时间从上午9点多持续到10点50。支付宝给出的解释是“系统消息库故障”导致。

B9C6FF99-2EDC-4A81-8672-3019026ACB86.png

二、整个系统交互分析

2.1 首先:我们先来看看一笔订单的支付流程。

A6089ACC-DE8C-465D-B04F-ECD1643EEC0E.png 参与方:

  • 商户客户端:购物App(美团等)
  • 支付宝客户端SDK:app里面集成的支付宝SDK
  • 支付宝服务端:购物app通过支付宝SDK与支付宝服务端连接
  • 商户服务端:购物app的server端。

核心流程:

  • 步骤一:用户使用购物App发起支付操作;
  • 步骤二:然后购物App向我们的服务端发起支付请求,这时候服务端把签名后的订单字符串返回给客户端;
  • 步骤三:客户端拿到这个请求支付宝SDK调起支付,支付宝SDK这时候会连接到支付宝服务端;
  • 步骤四:支付完成,支付宝服务端会将支付结果同步返回给购物里面的支付宝SDK,SDK会回调支付结果给购物;

结论:从用户体验来看,这次故障是猜测步骤四挂了,也就是交互图里的7至11。

2.2 猜测与推断

  • 为什么说7-8挂了?
    • 因为客户端一直没成功,返回的交易失败
  • 为什么说12-13也挂了?
    • 在此期间询问了公司内部的网关对接同学,按照他们的说法那段时间支付宝回调量级下降明显,查单也查不回来。
  • 为什么本次故障不会对用户资金造成损失?
    • 首先用户银行卡可以正常扣款,说明支付宝与“银行”交互正常,交互正常必然有“单据”留存,有据可查就不用担心,后续可以根据这些单据重新捞起发起补偿。

2.3 支付宝的止损方式

因为支付宝有故障期间的扣款单据,所以只需要尽快将扣款结果通知到购物app,这样购物app就能尽快处理没成功的订单(没成功的订单就能推到终态,用户体感就不会多扣了)

image.png

最后,针对这次故障我们能对自己的系统做点什么?

  1. 做好监控(正向+逆向):不要等客诉进来才发现,这次估计好多购物app都是客诉反馈才知道
  2. 做好防控(降级处理):做好通道的切换、降级能力(目前好多大厂这个处理的都不错,有的折叠,有的置灰,有友好提示)

81786418-3C25-45A6-8B8B-C4E78FE82EBA.jpg

欢迎关注程序员柴宝,获取更多技术干货~