面试--在支付界面如何保证用户不重复付款?

发布时间 2023-11-23 10:34:40作者: 山雨欲來風滿楼

背景

今天刷公众号【小林coding】,看到一道很有意思的面试题。我感觉我回答不上来,问了一下AI.

mark一下:

问题

  • 在支付界面让用户同时选择支付宝和微信支付,但是用户点了微信,这个时候网卡了,又点了支付宝,这个时候如何保证用户不重复付款?

AI回答:

    1. 前端控制:

      • 按钮防抖:用户在选择完支付方式点击付款后,禁用支付按钮,防止用户因网络卡顿多次点击。
      • 可视化状态显示:告知用户付款按钮被禁用的原因(例如显示"处理中"),让用户明了当前处于等待付款结果的状态。
    2. 后端控制:

      • 请求去重:后端收到付款请求后,根据订单号及用户ID判断,如果已有相同订单号的支付请求正在处理,则拒绝后续请求,防止重复扣款。
      • 更新订单状态:在接收到支付结果之后,后端需要更新订单的状态,例如将订单状态从"待支付"更新为"已支付"或"支付失败"等。
    3. 和第三方支付平台的配合:

      • 同步支付结果:接入支付宝或微信支付时,需要实时同步支付结果,支付成功后,第三方支付平台会回调我们预先设置好的接口,我们需要根据回调内容更新订单支付状态。
      • 接口调用幂等性:通常来说,一个支付请求只能支付一次,除非订单被取消或者支付失败。这是通过支付接口的幂等性实现的,也就是说,即使同一订单的支付请求被重复调用,也只会有一次有效。
    4. 用户教育和服务:

      • 用户界面设置:为了避免用户误操作,可以在用户界面的合适位置设置提示,例如“当前订单正在支付处理中,请勿重复点击支付”。
      • 用户教育:在用户手册或帮助页面,明确告知用户在付款过程中网速较慢时的操作方式,同时在出现问题时提供解决方案或者提供联系方式,提供帮助。

    通过这四点的配合,可以从多方面防止用户重复支付。

我的感觉

  • 以我粗浅的感觉,回答的得分点应该是:接口调用幂等性

 

参考资料:

chatGPT