面试--在支付界面如何保证用户不重复付款?
背景
今天刷公众号【小林coding】,看到一道很有意思的面试题。我感觉我回答不上来,问了一下AI.
mark一下:
问题
- 在支付界面让用户同时选择支付宝和微信支付,但是用户点了微信,这个时候网卡了,又点了支付宝,这个时候如何保证用户不重复付款?
AI回答:
-
-
前端控制:
- 按钮防抖:用户在选择完支付方式点击付款后,禁用支付按钮,防止用户因网络卡顿多次点击。
- 可视化状态显示:告知用户付款按钮被禁用的原因(例如显示"处理中"),让用户明了当前处于等待付款结果的状态。
-
后端控制:
- 请求去重:后端收到付款请求后,根据订单号及用户ID判断,如果已有相同订单号的支付请求正在处理,则拒绝后续请求,防止重复扣款。
- 更新订单状态:在接收到支付结果之后,后端需要更新订单的状态,例如将订单状态从"待支付"更新为"已支付"或"支付失败"等。
-
和第三方支付平台的配合:
- 同步支付结果:接入支付宝或微信支付时,需要实时同步支付结果,支付成功后,第三方支付平台会回调我们预先设置好的接口,我们需要根据回调内容更新订单支付状态。
- 接口调用幂等性:通常来说,一个支付请求只能支付一次,除非订单被取消或者支付失败。这是通过支付接口的幂等性实现的,也就是说,即使同一订单的支付请求被重复调用,也只会有一次有效。
-
用户教育和服务:
- 用户界面设置:为了避免用户误操作,可以在用户界面的合适位置设置提示,例如“当前订单正在支付处理中,请勿重复点击支付”。
- 用户教育:在用户手册或帮助页面,明确告知用户在付款过程中网速较慢时的操作方式,同时在出现问题时提供解决方案或者提供联系方式,提供帮助。
通过这四点的配合,可以从多方面防止用户重复支付。
-
我的感觉
- 以我粗浅的感觉,回答的得分点应该是:接口调用幂等性
参考资料:
chatGPT