我先在要做这样的功能:
用户在创建订单后,订单表中记入的是未付款状态,如果用户在30分钟后,还未付款,然后就把该订单给取消。
关于用户创建订单,30分钟后还没付款,取消该订单的逻辑是怎么实现的。
我自己的想了两个方案:
(1):客户端记入这个订单,如果在30分钟后还没有付款,就发送一个请求,调用后台的接口,来取消这个订单。
(2):服务端写个脚本,然后crontab来执行,来监控在30分钟还没有付款的订单,如果有就取消订单。
各位大神,这是我想到的两个方案,不知道合不合适,求大神们指点指点,感激不尽。
创建订单后,放个30分钟执行的任务到工作队列。
补充一:
工作队列具体流程:
用户创建订单A
生成30分钟后执行的任务,任务内容是:检查订单A是支付成功,如果没支付则标记为失效订单
用户支付,如果订单已失效,说明已经过了30分钟,否则标记订单支付成功
Laravel自带的队列很方便:Queues
胡思乱想:
直接用Redis的过期功能把订单删了并不好,或者要预留多一点时间,不要准确30分钟过期。
考虑这种情况:
对接微信支付,用户在29分59秒支付成功,微信在支付成功时发送异步给服务器,1.1秒后到达服务器,而这个时候订单已经被删了。
在生成微信的订单时判定一次即可。