courseModel = new CourseModel(); $this->SubscriptionModel = new SubscriptionModel(); } /** * 密码兑换 * @return void */ public function passwordPay(){ $password = $this->request->post('password',''); $courseId = $this->request->post('course_id',''); $userId = $this->auth->id; if(empty($password) || empty($courseId)){ $this->error('请完善参数后再提交'); } //获取课程详情 $courseInfo = $this->courseModel->where([ 'id'=>$courseId, 'status'=>1, 'pay_type'=>'password' ])->find(); if (!$courseInfo) { $this->error(__('未找到相关课程信息')); } $courseInfo = $courseInfo->toArray(); \app\common\model\course\Course::checkSalesType($courseInfo); if($courseInfo['password'] != $password){ $this->error(__('兑换密码错误')); } //判断是否订阅过了 $userCourse = $this->SubscriptionModel->getUserCourse($userId,$courseId); if($userCourse){ $this->error(__('该课程已经订阅过了')); } //添加订阅记录 $result = $this->SubscriptionModel->setUserCourse($userId,$courseId); if(!$result){ $this->error(__('订阅失败')); } $this->success('订阅成功'); } /** * 免费加入学习 * 适用以下任一情形: * 1. 课程本身免费(pay_type=free 或 pay_type=pay 且价格为 0)→ get_type=free * 2. 用户付费会员卡免费权益命中该课程 → get_type=vip * 仅支持 article/video/audio/live/column 类型课程 * @return void */ public function free(){ $courseId = $this->request->post('course_id',''); $userId = $this->auth->id; if(empty($courseId)){ $this->error('请完善参数后再提交'); } //获取课程详情 $courseInfo = $this->courseModel->where([ 'id'=>$courseId, 'status'=>1 ])->find(); if (!$courseInfo) { $this->error(__('未找到相关课程信息')); } //仅支持指定类型的课程加入学习 $allowTypes = ['article','video','audio','live','column']; if (!in_array($courseInfo['type'], $allowTypes)) { $this->error(__('当前课程类型不支持加入学习')); } //加入学习的资格判定:课程免费 或 用户付费会员卡免费权益命中 $isFreeCourse = \app\common\model\user\Subscription::isFreeCourse($courseId); $hasVipFreeAccess = false; if (!$isFreeCourse) { $hasVipFreeAccess = \app\common\model\user\Subscription::getVipFreeAccess($userId, $courseId); } if (!$isFreeCourse && !$hasVipFreeAccess) { $this->error(__('当前没有加入学习的资格')); } \app\common\model\course\Course::checkSalesType($courseInfo); //判断是否订阅过了 $userCourse = $this->SubscriptionModel->getUserCourse($userId,$courseId); if($userCourse){ $this->error(__('该课程已经加入学习')); } $validityTime = $this->SubscriptionModel->getValidityTime($courseInfo); if($validityTime < time()){ $this->error(__('该课程有效时间不支持订阅')); } //标记 get_type:课程免费时为 free,VIP 权益命中时为 vip $getType = $isFreeCourse ? 'free' : 'vip'; //添加订阅记录 $result = $this->SubscriptionModel->setUserCourse($userId,$courseId,$getType); if(!$result){ $this->error(__('加入学习失败')); } $this->success('加入学习成功'); } /** * 获取我的订阅 * @return void */ public function getMySubscription(){ $limit = input('limit',10); $page = input('page',1); $type = input('type','all'); $list = $this->SubscriptionModel->getMyCourse($this->auth->id,[ 'limit'=>$limit, 'page'=>$page, 'type'=>$type ]); $this->success('订阅成功',$list); } }