用户下订单之后15分钟支付实现_用户提交订单,30分钟后没付款取消订单功能分析...

本文讨论了在用户创建订单后30分钟内未支付即取消订单的实现方案。提出的方案包括客户端定时检查、服务端定时任务、Redis过期机制、工作队列以及结合数据库查询的被动过期策略。讨论中强调了不依赖客户端、避免数据丢失和确保支付回调验证的重要性。
摘要由CSDN通过智能技术生成

我先在要做这样的功能:

用户在创建订单后,订单表中记入的是未付款状态,如果用户在30分钟后,还未付款,然后就把该订单给取消。

关于用户创建订单,30分钟后还没付款,取消该订单的逻辑是怎么实现的。

我自己的想了两个方案:

(1):客户端记入这个订单,如果在30分钟后还没有付款,就发送一个请求,调用后台的接口,来取消这个订单。

(2):服务端写个脚本,然后crontab来执行,来监控在30分钟还没有付款的订单,如果有就取消订单。

各位大神,这是我想到的两个方案,不知道合不合适,求大神们指点指点,感激不尽。

不知道你的客户端是什么,但是方案1很依赖客户端,订单决策不应该由客户端发起

方案2的话就要考虑你的执行密度,要知道每时每刻都会有新订单发起的,每时每刻也会有订单过期。

用一些成熟的带TTL控制的方案吧,比如redis。

我之前的做法是在每次查询这个订单时候检查过期,被动过期。

比如,查询订单细节时,再去检查是否过期然后再处理。

当然,如果这条数据不被访问可能永远不会过期,直到有人访问它。

有点像薛定谔的猫,在你打开盒子(检查订单)之后,才知道它是否过期。所以叫被动过期

客户端数据被篡改就能无限修改这个时间阈值了

肯定不能依赖前端

2可以

创建订单后,放个30分钟执行的任务到工作队列。

补充一:

工作队列具体流程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的定时任务来实现15分钟后未支付自动取消订单的功能。具体步骤如下: 1. 在订单创建时记录订单创建时间。 2. 使用Java的定时任务框架(如Quartz、Spring Schedule等)来设置一个定时任务,该任务会在订单创建时间的基础上加上15分钟,然后检查当前时间是否超过了这个时间点。 3. 如果当前时间已经超过了订单创建时间加上15分钟的时间点,则将订单状态设置为取消状态。 4. 如果在15分钟用户完成了支付,则在定时任务执行前,将订单状态设置为已支付状态,以避免误取消订单。 下面是一个使用Quartz框架实现的伪代码示例: ```java public class CancelOrderJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { // 获取订单创建时间 Date createTime = getOrderCreateTime(); // 计算15分钟后的时间点 Date cancelTime = new Date(createTime.getTime() + 15 * 60 * 1000); // 检查当前时间是否超过15分钟后的时间点 if (new Date().after(cancelTime)) { // 取消订单 cancelOrder(); } } } // 在订单创建时,启动定时任务 public void createOrder() { Order order = new Order(); order.createTime = new Date(); saveOrder(order); // 启动定时任务 JobDetail job = newJob(CancelOrderJob.class) .withIdentity("cancelOrderJob", "orderGroup") .build(); Trigger trigger = newTrigger() .withIdentity("cancelOrderTrigger", "orderGroup") .startAt(new Date(order.createTime.getTime() + 15 * 60 * 1000)) .build(); scheduler.scheduleJob(job, trigger); } ``` 注意,定时任务框架的具体使用方式可能有所不同,上述代码仅供参考。另外,为了确保定时任务能够正确执行,需要保证定时任务框架的运行环境稳定可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值