6.5. 关闭未支付订单

本教程最新版为 8.x,当前版本已放弃维护,请阅读最新版本!

关闭未支付订单

上一节我们实现了创建订单的功能,在创建订单的同时我们减去了对应商品 SKU 的库存,恶意用户可以通过下大量的订单又不支付来占用商品库存,让正常的用户因为库存不足而无法下单。因此我们需要有一个关闭未支付订单的机制,当创建订单之后一定时间内没有支付,将关闭订单并退回减去的库存。

对于这个需求我们可以用 Laravel 提供的延迟任务(Delayed Job)功能来解决。当我们的系统触发了一个延迟任务时,Laravel 会用当前时间加上任务的延迟时间计算出任务应该被执行的时间戳,然后将这个时间戳和任务信息序列化之后存入队列,Laravel 的队列处理器会不断查询并执行队列中满足预计执行时间等于或早于当前时间的任务。

1. 创建任务

我们通过 make:job 命令来创建一个任务:

$ php artisan make:job CloseOrder

创建的任务类保存在 app/Jobs 目录下,现在编辑刚刚创建的任务类:

app/Jobs/CloseOrder.php

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illumina...

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 4

小豚兔
在 Laravel 6 中使用 predis 而不用教程中的 phpredis
9 个点赞 | 6 个回复 | 分享 | 课程版本 6.x
reboot
Homestead 中启动 PHP artisan queue:work 卡死的解决办法
2 个点赞 | 2 个回复 | 分享 | 课程版本 6.x
w594533
使用定时计划?
2 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
minororange
关于启动队列处理器?
1 个点赞 | 2 个回复 | 问答 | 课程版本 5.5