Skip to content

面试速答(先看这里)

**一句话结论:**其实,还有一个比较重要的原因,也是发生最多的原因,那就是网络问题,比如网络抖动。

60秒标准回答:

这是一个典型的系统间交互数据不一致的问题,这个问题没问怎么解决,问的是可能的原因有哪些,那就考察你对这个链路的理解。一般来说,出现这种情况,可能的原因有以下几个

当服务端调用第三方支付接口时,第三方接口显示支付成功,而在应用程序(app)端显示支付失败,这种情况可能由多个原因造成。以下是一些常见的问题及其解决方法

其实,还有一个比较重要的原因,也是发生最多的原因,那就是网络问题,比如网络抖动。当我们调用第三方支付的时候,因为发生了网络延迟,导致我们调用超时了,我们以为失败了,就把状态改成支付失败了

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**这是一个典型的系统间交互数据不一致的问题,这个问题没问怎么解决,问的是可能的原因有哪些,那就考察你对这个链路的理解。
  • **要点2:**当服务端调用第三方支付接口时,第三方接口显示支付成功,而在应用程序(app)端显示支付失败,这种情况可能由多个原因造成。
  • **要点3:**所以,遇到这种网络问题的时候,需要有重试机制,或者是依赖外部的回调结果进行更新处理
  • **要点4:**但是一般这种延迟的时候,都会显示支付中,而不是支付失败,但是有些系统做的不够好的, 也可能会显示成支付失败。
  • **要点5:**接着前面的情况讲,当异步回调处理过程中,因为系统原因导致失败了,那么就可能会出现不一致的情况,或者是极端情况,回调的时候,正好应用在重启, 或者挂了,消息没处理,也会出现这种情况。

**记忆锚点:**第三方支付接口问题 → 第三方接口显示支付成功 → 调用第三方接口支付时 → 端调用第三方支付接口 → 见的问题及其解决方法 → 于很多第三方支付接口

易错提醒:

  • 一般来说,出现这种情况,可能的原因有以下几个: 当服务端调用第三方支付接口时,第三方接口显示支付成功,而在应用程序(app)端显示支付失败,这种情况可能由多个原因造成。
  • 当我们调用第三方支付的时候,因为发生了网络延迟,导致我们调用超时了,我们以为失败了,就把状态改成支付失败了。

加分表达:

  • 因为只要是系统,他就有可能会出现问题。

追问准备:

  • 围绕「第三方支付接口问题」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「第三方接口显示支付成功」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「调用第三方接口支付时」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

这是一个典型的系统间交互数据不一致的问题,这个问题没问怎么解决,问的是可能的原因有哪些,那就考察你对这个链路的理解。一般来说,出现这种情况,可能的原因有以下几个:

当服务端调用第三方支付接口时,第三方接口显示支付成功,而在应用程序(app)端显示支付失败,这种情况可能由多个原因造成。以下是一些常见的问题及其解决方法:

网络问题 ​

其实,还有一个比较重要的原因,也是发生最多的原因,那就是网络问题,比如网络抖动。当我们调用第三方支付的时候,因为发生了网络延迟,导致我们调用超时了,我们以为失败了,就把状态改成支付失败了。

但是,网络超时了,并不代表外部支付就没接到请求,有可能他已经接到了,那么他就会正常处理了,他处理完了,就成功了。

这时候就是我们失败了,他成功了。

所以,遇到这种网络问题的时候,需要有重试机制,或者是依赖外部的回调结果进行更新处理

异步处理 ​

对于很多第三方支付接口中,他们的处理可能是异步的,交互的方式是他接受到请求后,然后异步处理,处理完之后再通过回调、或者 webhook 的方式通知到调用方。

那么,就可能出现一种情况,外部系统他们异步处理成功了,然后还没来及回调,或者回调正在处理中,这时候在调用方可能就会有状态延迟。

但是一般这种延迟的时候,都会显示支付中,而不是支付失败,但是有些系统做的不够好的, 也可能会显示成支付失败。

回调处理失败 ​

接着前面的情况讲,当异步回调处理过程中,因为系统原因导致失败了,那么就可能会出现不一致的情况,或者是极端情况,回调的时候,正好应用在重启, 或者挂了,消息没处理,也会出现这种情况。

​

第三方支付接口问题 ​

还有一种是可能,虽然发生的概率不高,那就是第三方支付接口可能在处理支付结果时存在问题,导致返回的信息与实际支付状态不一致。

因为只要是系统,他就有可能会出现问题。