下单幂等设计

背景

原本我以为下单是不需要做幂等的,用户一次点击下,只要库存够,下两单也没什么影响。
但是,实际情况并不是那么如意,尤其对于一个相对挑剔的用户群体,有些用户看到有待支付单可自己明明支付过,就会认为我们小程序把他的钱吃了,从而引发客诉。

前端改造

前端原本流程如下:
前端下单流程

这个流程有3个问题

  1. 在调用下单按钮的过程中,支付按钮没有及时置灰,导致用户可以重复点击(手抖、手滑)
  2. 调用支付预下单接口如果出现异常(例如第三方网络抖动),实际下单是已经成功了,这时如何以及停留在结算页,用户还是会再下一单,最近结果就是用户以为自己只下了一单,其实是两单。
  3. 调用下单接口网络抖动导致后端收到两次请求。

针对上面三个问题,前端优化后的流程如下:
前端下单流程

加入了支付按钮置灰、调用支付预下单接口跳转待支付页、uuid控制幂等。

后端改造

后端需要改造的点主要是

  1. 根据uuid来做幂等,同时需要利用锁来做互斥
  2. uuid和请求MD5摘要要匹配,避免相同uuid不同请求的情况

后端最终流程如下

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值