From 53295ed9809ac9c51d727842c371f268b5849c4a Mon Sep 17 00:00:00 2001 From: koogua Date: Tue, 28 Sep 2021 15:07:34 +0800 Subject: [PATCH] =?UTF-8?q?=EF=BC=91=EF=BC=8E=E4=BC=98=E5=8C=96=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=20=EF=BC=92?= =?UTF-8?q?=EF=BC=8E=E6=97=A0=E6=9D=83=E9=99=90=E6=9F=A5=E7=9C=8B=E8=AF=BE?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E8=BF=94=E5=9B=9E=E6=92=AD=E6=94=BE=E5=9C=B0?= =?UTF-8?q?=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + app/Builders/OrderList.php | 51 ++++++++++++++++++- app/Services/Logic/Chapter/ChapterInfo.php | 13 +++++ app/Services/Logic/Order/OrderInfo.php | 18 +++++-- app/Services/Logic/User/Console/OrderList.php | 5 +- 5 files changed, 81 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fe34773..e66998d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,11 @@ - 修正后台首页提问和回答的数量统计 - 调整登录限制(邮箱|手机)为注册限制 - 调整订单发货为每一分钟执行一次 +- 增强课时安全性,无权限时不返回播放地址或内容 - 增加首页推荐教师接口 - 增加微信公众号支付处理 - 增加取消订单功能 +- 优化订单API结构 - 优化计划任务 ### [v1.4.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.4)(2021-09-17) diff --git a/app/Builders/OrderList.php b/app/Builders/OrderList.php index d46f0ae6..cfcdae2d 100644 --- a/app/Builders/OrderList.php +++ b/app/Builders/OrderList.php @@ -7,6 +7,7 @@ namespace App\Builders; +use App\Models\Course as CourseModel; use App\Models\Order as OrderModel; use App\Repos\User as UserRepo; @@ -42,7 +43,7 @@ class OrderList extends Builder public function handleItems(array $orders) { foreach ($orders as $key => $order) { - $itemInfo = $this->handleItem($order); + $itemInfo = $this->handleItemInfo($order); $orders[$key]['item_info'] = $itemInfo; } @@ -53,7 +54,7 @@ class OrderList extends Builder * @param array $order * @return array|mixed */ - public function handleItem(array $order) + public function handleItemInfo(array $order) { $itemInfo = []; @@ -72,6 +73,52 @@ class OrderList extends Builder return $itemInfo; } + /** + * @param array $order + * @return array|mixed + */ + public function handleMeInfo(array $order) + { + $me = [ + 'allow_pay' => 0, + 'allow_cancel' => 0, + 'allow_refund' => 0, + ]; + + $payStatusOk = $order['status'] == OrderModel::STATUS_PENDING ? 1 : 0; + $cancelStatusOk = $order['status'] == OrderModel::STATUS_PENDING ? 1 : 0; + $refundStatusOk = $order['status'] == OrderModel::STATUS_FINISHED ? 1 : 0; + + if ($order['item_type'] == OrderModel::ITEM_COURSE) { + + $course = $order['item_info']['course']; + + $courseModelOk = $course['model'] != CourseModel::MODEL_OFFLINE; + $refundTimeOk = $course['refund_expiry_time'] > time(); + + $me['allow_refund'] = $courseModelOk && $refundStatusOk && $refundTimeOk ? 1 : 0; + + } elseif ($order['item_type'] == OrderModel::ITEM_PACKAGE) { + + $courses = $order['item_info']['courses']; + + $refundTimeOk = false; + + foreach ($courses as $course) { + if ($course['refund_expiry_time'] > time()) { + $refundTimeOk = true; + } + } + + $me['allow_refund'] = $refundStatusOk && $refundTimeOk ? 1 : 0; + } + + $me['allow_pay'] = $payStatusOk; + $me['allow_cancel'] = $cancelStatusOk; + + return $me; + } + /** * @param string $itemInfo * @return mixed diff --git a/app/Services/Logic/Chapter/ChapterInfo.php b/app/Services/Logic/Chapter/ChapterInfo.php index 16ddc456..345e8fb5 100644 --- a/app/Services/Logic/Chapter/ChapterInfo.php +++ b/app/Services/Logic/Chapter/ChapterInfo.php @@ -64,6 +64,19 @@ class ChapterInfo extends LogicService $result = $service->handleBasicInfo($chapter); + /** + * 无内容查看权限,过滤掉相关内容 + */ + if (!$this->ownedChapter) { + if ($chapter->model == CourseModel::MODEL_VOD) { + $result['play_urls'] = []; + } elseif ($chapter->model == CourseModel::MODEL_LIVE) { + $result['play_urls'] = []; + } elseif ($chapter->model == CourseModel::MODEL_READ) { + $result['content'] = ''; + } + } + $result['course'] = $service->handleCourseInfo($this->course); $me = [ diff --git a/app/Services/Logic/Order/OrderInfo.php b/app/Services/Logic/Order/OrderInfo.php index 9bc159e9..6e63de78 100644 --- a/app/Services/Logic/Order/OrderInfo.php +++ b/app/Services/Logic/Order/OrderInfo.php @@ -86,16 +86,24 @@ class OrderInfo extends LogicService if ($order->status == OrderModel::STATUS_FINISHED) { /** - * 只允许线上课程退款,因为线下课程无法进行退款计算 + * 只允许线上课程退款 */ if ($order->item_type == OrderModel::ITEM_COURSE) { - $result['allow_refund'] = 1; $course = $order->item_info['course']; - if (isset($course['model']) && $course['model'] == CourseModel::MODEL_OFFLINE) { - $result['allow_refund'] = 0; + $refundTimeOk = $course['refund_expiry_time'] > time(); + $courseModelOk = $course['model'] != CourseModel::MODEL_OFFLINE; + if ($refundTimeOk && $courseModelOk) { + $result['allow_refund'] = 1; } } elseif ($order->item_type == OrderModel::ITEM_PACKAGE) { - $result['allow_refund'] = $order->status == OrderModel::STATUS_FINISHED ? 1 : 0; + $courses = $order->item_info['courses']; + foreach ($courses as $course) { + $refundTimeOk = $course['refund_expiry_time'] > time(); + $courseModelOk = $course['model'] != CourseModel::MODEL_OFFLINE; + if ($refundTimeOk && $courseModelOk) { + $result['allow_refund'] = 1; + } + } } } diff --git a/app/Services/Logic/User/Console/OrderList.php b/app/Services/Logic/User/Console/OrderList.php index 74f19445..7ab24fa1 100644 --- a/app/Services/Logic/User/Console/OrderList.php +++ b/app/Services/Logic/User/Console/OrderList.php @@ -61,7 +61,9 @@ class OrderList extends LogicService foreach ($orders as $order) { - $order['item_info'] = $builder->handleItem($order); + $order['item_info'] = $builder->handleItemInfo($order); + + $me = $builder->handleMeInfo($order); $items[] = [ 'sn' => $order['sn'], @@ -76,6 +78,7 @@ class OrderList extends LogicService 'promotion_info' => $order['promotion_info'], 'create_time' => $order['create_time'], 'update_time' => $order['update_time'], + 'me' => $me, ]; }