防止重复请求提交创建订单等解决方案

28 篇文章 0 订阅
3 篇文章 0 订阅

背景:
在开发产品,交付给用户使用之后,重复提交的现象偶尔或经常出现。开发人员觉得数据重复,用户觉得订单多了一个,产品觉得有bug。这可不是好现象。

下面以创建订单为例:

原因:
1、误操作两次点击下单按钮;
2、超时导致重复点击;
3、产生订单后没有成功提醒或者客户端出错导致用户没有收到成功消息,重新下单。

后果:
当然是产生了重复订单,体验不好,影响不好。^_^

解决方案:

  1. 最通用的方法:幂等处理。
    简单来讲,在用户开始进入订单流程时,就在客户端产生一个dupKey,做为跟踪。
    数据库里订单表加一个dupKey字段,做一个唯一约束。
    在客户端点击创建订单时,后台的接口应该在创建订单之前检测表里的dupKey。
    如果不存在,就表明是新单子,新增一条记录,并返回该记录。否则把dupKey对应的订单返回到前端。同时返回记录里需要加上是否是重复下单的字段isDupRequest=true。所以后端接口可以命名为:createOrGet()
    这种方案简单有效。

  2. 如果客户下单流程走一半,因其它原因重头开始,又走了一遍流程。这样的体验就不大好了。
    我们可以把客户下单的重要信息缓存起来。在醒目的位置提醒一下用户还有一个未完成的订单,通过短信通知或者其它APN通知渠道都可以。这样客户点击这个提醒之后,会进入未完成的流程,会节省很多操作。应该也会促进订单的成功率。

  3. 人工方式
    这种方式就比较简单粗暴了。开发的后台管理可以操作订单,删改订单、退款等。但是线上运行的时候,牵涉的人比较多。客户上报问题=>运管人员核查问题=>开发人员排查问题=>运营人员解决问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值