diff --git a/app/api/controller/StudentController.php b/app/api/controller/StudentController.php index 371d4f3..652bb0b 100644 --- a/app/api/controller/StudentController.php +++ b/app/api/controller/StudentController.php @@ -4,11 +4,12 @@ namespace app\api\controller; use app\BaseController; use app\common\service\StudentService; +use app\constant\ResponseCode; use support\Request; class StudentController extends BaseController { - protected $noNeedLogin = ['login']; + protected $noNeedLogin = ['login', 'getCode']; /** * @desc 登录 @@ -22,6 +23,28 @@ class StudentController extends BaseController return $this->json($res); } + /** + * @desc 获取code + * @param Request $request + * @return \support\Response + */ + public function getCode(Request $request) + { + $appid = getenv('APP_ID'); + $redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5#/pages/index/index");//重定向地址 +// $redirect_uri = getenv('SERVER_DOMAIN') . "/h5#/pages/index/index";//重定向地址 + + + $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect"; +// $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; + + return $this->json([ + 'code' => ResponseCode::SUCCESS, + 'data' => $url + ]); +// return redirect($url); + } + /** * @desc 学生信息 * @param Request $request @@ -34,4 +57,10 @@ class StudentController extends BaseController return $this->json($res); } + public function updateOpenid(Request $request) + { + $service = new StudentService(); + + } + } \ No newline at end of file diff --git a/app/api/controller/TeacherController.php b/app/api/controller/TeacherController.php index 87e3c6c..8d14418 100644 --- a/app/api/controller/TeacherController.php +++ b/app/api/controller/TeacherController.php @@ -4,12 +4,13 @@ namespace app\api\controller; use app\BaseController; use app\common\service\TeacherService; +use app\constant\ResponseCode; use support\Request; class TeacherController extends BaseController { - protected $noNeedLogin = ['login']; + protected $noNeedLogin = ['login', 'getCode']; public function login(Request $request) { @@ -19,6 +20,24 @@ class TeacherController extends BaseController } + /** + * @desc 获取code + * @param Request $request + * @return \support\Response + */ + public function getCode(Request $request) + { + $appid = getenv('APP_ID'); + $redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5#/pages/login/login");//重定向地址 + + $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect"; + return $this->json([ + 'code' => ResponseCode::SUCCESS, + 'data' => $url + ]); +// return redirect($url); + } + /** * @desc 设置时区 * @param Request $request @@ -43,5 +62,13 @@ class TeacherController extends BaseController return $this->json($res); } + public function updateOpenid(Request $request) + { + $service = new TeacherService(); + $res = $service->updateOpenid($request); + return $this->json($res); + + } + } \ No newline at end of file diff --git a/app/api/controller/WechatSubscriptController.php b/app/api/controller/WechatSubscriptController.php index d8b445f..5e91200 100644 --- a/app/api/controller/WechatSubscriptController.php +++ b/app/api/controller/WechatSubscriptController.php @@ -4,22 +4,69 @@ namespace app\api\controller; use app\BaseController; use app\constant\ResponseCode; +use GuzzleHttp\Client; use support\Request; +use think\Exception; class WechatSubscriptController extends BaseController { protected $noNeedLogin = ['*']; + const GENERAL_ACCESS_TOKEN = 'general_access_token'; + const CODE_ACCESS_TOKEN = 'code_access_token'; + const BASE_URI = 'https://api.weixin.qq.com'; public function getCode(Request $request) { $appid = getenv('WECHAT_APPID'); - $redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/index.html#/pages/login/login ");//重定向地址 + if($request->all('client') == 'student'){ + $redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5/student#/pages/login/login");//重定向地址 + }else{ + $redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5/teacher#/pages/login/login");//重定向地址 + } + $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect"; - return $this->json([ - 'code' => ResponseCode::SUCCESS, - 'data' => $url - ]); + return redirect($url); + } + + + + /** + * @desc 获取网页授权code的access_token + * @param $code + * @return array|void + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public static function getCodeAccessToken($code) + { + try { + $client = new Client(['base_uri'=>self::BASE_URI]); + $response = $client->request('get', 'sns/oauth2/access_token', [ + 'query' => [ + 'appid' => getenv('APP_ID'), + 'secret' => getenv('APP_SECRET'), + 'code'=>$code, + 'grant_type'=>'authorization_code' + ] + ]); + + $response_contents = $response->getBody()->getContents(); + raw_log('wechat/code_access_token', ['result' => $response_contents]); + if ($response->getStatusCode() == 200) { + $result = json_decode($response_contents, true); + raw_log('wechat/code_access_token', ['result' => $result]); + if (isset($result['errcode'])) { + throw new Exception($result['errmsg']); + } + return $result; + } + + }catch (Exception $e){ + return [ + 'code'=>ResponseCode::FAIL, + 'msg'=>$e->getMessage() + ]; + } } } \ No newline at end of file diff --git a/app/common/service/StudentService.php b/app/common/service/StudentService.php index 74534dc..b6a31dd 100644 --- a/app/common/service/StudentService.php +++ b/app/common/service/StudentService.php @@ -2,6 +2,7 @@ namespace app\common\service; +use app\api\controller\WechatSubscriptController; use app\common\model\Student; use app\constant\ResponseCode; use think\Exception; @@ -79,4 +80,45 @@ class StudentService } } + + /** + * @desc 更新code + * @param $request + * @return array|void + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function updateOpenid($request) + { + try { + if(empty($request->teacher)){ + throw new Exception('请先教师登陆'); + } + $teacher = Student::where(['id' => $request->teacher->id])->findOrEmpty(); + if($teacher->isEmpty()){ + throw new Exception('未找到教师信息'); + } + + $code = $request->post('code'); + $user_info = WechatSubscriptController::getCodeAccessToken($code); + if (isset($result['code'])) { + $message = '获取信息失败'; + } + $openid = $user_info['openid']; + $teacher = Student::where(['id'=>$request->teacher->id])->findOrEmpty(); + $teacher->save([ + 'openid' => $openid, + ]); + + return [ + 'code' => ResponseCode::SUCCESS, + 'msg' => 'success' + ]; + }catch (Exception $e){ + return [ + 'code' => ResponseCode::FAIL, + 'msg' => $e->getMessage() + ]; + } + } + } \ No newline at end of file diff --git a/app/common/service/SubjectHomeworkService.php b/app/common/service/SubjectHomeworkService.php index b550b68..4877bab 100644 --- a/app/common/service/SubjectHomeworkService.php +++ b/app/common/service/SubjectHomeworkService.php @@ -47,6 +47,11 @@ class SubjectHomeworkService $res = SubjectHomework::create([ 'teacher_id' => $teacher->id, 'teacher_schedule_time_id' => $data['teacher_schedule_time_id'], + 'date' => $teacher_schedule_time->date, + 'time' => $teacher_schedule_time->time, + 'start_time' => $teacher_schedule_time->start_time, + 'end_time' => $teacher_schedule_time->end_time, + 'month' => $teacher_schedule_time->month, 'subject_id' => $teacher_schedule_time->subject_id, 'homework_file_url' => $data['homework_file_url'], 'homework_file_name' => $data['homework_file_name'], diff --git a/app/common/service/TeacherFreeTimeService.php b/app/common/service/TeacherFreeTimeService.php index d17fe58..6e9ac46 100644 --- a/app/common/service/TeacherFreeTimeService.php +++ b/app/common/service/TeacherFreeTimeService.php @@ -31,50 +31,89 @@ class TeacherFreeTimeService } $data = $request->post(); + if(empty($data['free_time'])){ + throw new Exception('请选择时间后提交'); + } + $free_time = json_decode($data['free_time'], true); - - if (empty($free_time)) { - throw new Exception('请选择时间段之后再提交'); - } $total_count = 0; $exit_count = 0; $err_free_count = 0; - foreach ($free_time as $free_date => $times) { - if ($times) { - foreach ($times as $time) { - $time_period = explode(' - ', $time); - $firstDate = new DateTime($free_date . ' ' . trim($time_period[0])); - $secondDate = new DateTime($free_date . ' ' . trim($time_period[1])); - $diff = $secondDate->diff($firstDate); - $h = $diff->h; - $m = round($diff->i / 60, 2); - $hour = round($h + $m, 2); - $time = $time_period[0] . ' - ' . $time_period[1]; - $free_data = [ - 'teacher_id' => $request->teacher->id, - 'date' => $free_date, - 'time' => $time, - 'hour' => $hour, - 'start_time' => date('Y-m-d H:i:s', $firstDate->getTimestamp()), - 'end_time' => date('Y-m-d H:i:s', $secondDate->getTimestamp()), - 'month' => date('Y-m', strtotime($free_date)), - ]; + foreach ($free_time as $item) { + $free_date = $item['day']; + foreach ($item['times'] as $val){ + $time = $val['zh']; + $en_time = $val['en']; + $time_period = explode('-', $time); + $en_time_period = explode('-', $en_time); + $firstDate = new DateTime($free_date . ' ' . trim($time_period[0])); + $secondDate = new DateTime($free_date . ' ' . trim($time_period[1])); + $diff = $secondDate->diff($firstDate); + $h = $diff->h; + $m = round($diff->i / 60, 2); + $hour = round($h + $m, 2); + $time = $time_period[0] . ' - ' . $time_period[1]; + $free_data = [ + 'teacher_id' => $request->teacher->id, + 'date' => $free_date, + 'time' => $time, + 'en_time' => implode(' - ', $en_time_period), + 'hour' => $hour, + 'start_time' => date('Y-m-d H:i:s', $firstDate->getTimestamp()), + 'end_time' => date('Y-m-d H:i:s', $secondDate->getTimestamp()), + 'month' => date('Y-m', strtotime($free_date)), + ]; - //判断是否已经存在 - $exit = TeacherFreeTime::where($free_data)->findOrEmpty(); - if(!$exit->isEmpty()){ - continue; - } - $res = TeacherFreeTime::create($free_data); - if(!$res){ - throw new Exception('保存失败'); - } + //判断是否已经存在 + $exit = TeacherFreeTime::where($free_data)->findOrEmpty(); + if(!$exit->isEmpty()){ + continue; } + $res = TeacherFreeTime::create($free_data); + if(!$res){ + throw new Exception('保存失败'); + } + } } + +// foreach ($free_time as $free_date => $times) { +// if ($times) { +// foreach ($times as $time) { +// $time_period = explode(' - ', $time); +// $firstDate = new DateTime($free_date . ' ' . trim($time_period[0])); +// $secondDate = new DateTime($free_date . ' ' . trim($time_period[1])); +// $diff = $secondDate->diff($firstDate); +// $h = $diff->h; +// $m = round($diff->i / 60, 2); +// $hour = round($h + $m, 2); +// $time = $time_period[0] . ' - ' . $time_period[1]; +// $free_data = [ +// 'teacher_id' => $request->teacher->id, +// 'date' => $free_date, +// 'time' => $time, +// 'hour' => $hour, +// 'start_time' => date('Y-m-d H:i:s', $firstDate->getTimestamp()), +// 'end_time' => date('Y-m-d H:i:s', $secondDate->getTimestamp()), +// 'month' => date('Y-m', strtotime($free_date)), +// ]; +// +// //判断是否已经存在 +// $exit = TeacherFreeTime::where($free_data)->findOrEmpty(); +// if(!$exit->isEmpty()){ +// continue; +// } +// $res = TeacherFreeTime::create($free_data); +// if(!$res){ +// throw new Exception('保存失败'); +// } +// } +// } +// } + return [ 'code' => ResponseCode::SUCCESS, 'msg' => '保存成功' diff --git a/app/common/service/TeacherService.php b/app/common/service/TeacherService.php index 56fc93c..180d449 100644 --- a/app/common/service/TeacherService.php +++ b/app/common/service/TeacherService.php @@ -2,6 +2,7 @@ namespace app\common\service; +use app\api\controller\WechatSubscriptController; use app\common\model\Teacher; use app\common\model\TimeZone; use app\constant\ResponseCode; @@ -115,4 +116,45 @@ class TeacherService } } + /** + * @desc 更新code + * @param $request + * @return array|void + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function updateOpenid($request) + { + try { + if(empty($request->teacher)){ + throw new Exception('请先教师登陆'); + } + $teacher = Teacher::where(['id' => $request->teacher->id])->findOrEmpty(); + if($teacher->isEmpty()){ + throw new Exception('未找到教师信息'); + } + + $code = $request->post('code'); + $user_info = WechatSubscriptController::getCodeAccessToken($code); + + if (isset($result['code'])) { + $message = '获取信息失败'; + } + $openid = $user_info['openid']; + $teacher = Teacher::where(['id'=>$request->teacher->id])->findOrEmpty(); + $teacher->save([ + 'openid' => $openid, + ]); + + return [ + 'code' => ResponseCode::SUCCESS, + 'msg' => 'success' + ]; + }catch (Exception $e){ + return [ + 'code' => ResponseCode::FAIL, + 'msg' => $e->getMessage() + ]; + } + } + } \ No newline at end of file diff --git a/app/common/service/UploadService.php b/app/common/service/UploadService.php index 2cf7d57..71a29d7 100644 --- a/app/common/service/UploadService.php +++ b/app/common/service/UploadService.php @@ -67,7 +67,7 @@ class UploadService if ($file && $file->isValid()) { $ext = $file->getUploadExtension(); - if (in_array($ext, ['pdf', 'doc', 'docx', 'xlsx', 'xls', 'csv', 'pptx', 'ppt', 'zip', 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'JPG', 'JPEG', 'PBG'])) { + if (in_array($ext, ['pdf', 'doc', 'docx', 'xlsx', 'xls', 'csv', 'pptx', 'ppt', 'zip', 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'JPG', 'JPEG', 'PBG', 'txt'])) { $type = 'files'; } else { $type = 'other'; diff --git a/app/middleware/AccessControlMiddleware.php b/app/middleware/AccessControlMiddleware.php new file mode 100644 index 0000000..6f132a0 --- /dev/null +++ b/app/middleware/AccessControlMiddleware.php @@ -0,0 +1,28 @@ +method() == 'OPTIONS' ? response('') : $handler($request); + + // 给响应添加跨域相关的http头 + $response->withHeaders([ + 'Access-Control-Allow-Credentials' => 'true', + 'Access-Control-Allow-Origin' => $request->header('origin', '*'), + 'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'), + 'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'), + ]); + + return $response; + } + +} \ No newline at end of file diff --git a/app/view/h5/index.html b/app/view/h5/index.html new file mode 100644 index 0000000..5bf0440 --- /dev/null +++ b/app/view/h5/index.html @@ -0,0 +1,39 @@ + + +
+ +