model = new \app\api\model\app\pc\Login(); } /** * 获取登录地址 * @return void */ public function pcLoginPath(){ global $_W; if(\app\common\library\Platform::getSystemType() == 'single'){ $apiUrl = $_W['siteroot'].'/index.php?i='.$_W['uniacid'].'&route=api/'; }else{ $apiUrl = $_W['siteroot'].'/app/index.php?i='.$_W['uniacid'].'&c=entry&m=tuzi_v1&do=index&route=api/'; } $ticket = $this->model->buildTicket(); $wxOfficialAccountConfig = \app\common\model\config\System::getConfig('wxOfficialAccount'); $path = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' .$wxOfficialAccountConfig['app_id']. '&redirect_uri='.urlencode($apiUrl).'app/pc/login/pcLoginCallback/ticket/'.$ticket.'&response_type=code&scope=snsapi_userinfo&state='.$apiUrl; $this->success('获取成功', [ 'path'=>$path, 'ticket'=>$ticket ]); } /** * 获取登录状态 * @return void */ public function pcLoginState(){ $ticket = input('ticket',''); if(!$ticket){ $this->error("ticket 错误"); } $ticketData = $this->model->getTicketState($ticket); if(!$ticketData){ $this->error("未查询到登录信息"); } $userinfo = $this->auth->getUserinfo($ticketData['user_id']); $userinfo['token'] = $ticketData['token']; $this->success(__('登录成功'), $userinfo); } /** * 登录回调 * @return void */ public function pcLoginCallback(){ $ticket = input('ticket',''); if(!$ticket){ $this->error("ticket 错误"); } if(\app\common\library\Platform::getSystemType() == 'single'){ $iconPath = MODULE_URL.'/'; }else{ $iconPath = MODULE_URL.'/public/'; } if(!$this->model->checkTicketCanUse($ticket)){ return view('pc_login_callback',['type'=>'error','title'=>'登录失败','subtitle'=>'当前登录二维码已过期,请刷新登录二维码后重试']); } $wechat = new Wechat('wxOfficialAccount'); //解析来源页面 try{ $oauth = $wechat->oauth(); $decryptData = $oauth->user()->getOriginal(); $ret = (new \app\api\controller\user\Info())->oauthLoginOrRegister($decryptData, 'wxOfficialAccount', 'Wechat'); }catch (\Exception $e){ $this->model->destroyTicket($ticket); return view('pc_login_callback',['icon_path'=>$iconPath,'type'=>'error','title'=>'登录失败','subtitle'=>'获取验证信息错误,请刷新登录二维码后重试']); } if (isset($ret) && $ret) { //登录页接参Token $this->model->successTicket($ticket,$ret->id,$ret->getToken()); return view('pc_login_callback',['icon_path'=>$iconPath,'type'=>'success','title'=>'登录成功','subtitle'=>'请返回PC端继续操作']); }else{ $this->model->destroyTicket($ticket); return view('pc_login_callback',['icon_path'=>$iconPath,'type'=>'error','title'=>'登录失败','subtitle'=>'获取用户信息失败,请刷新登录二维码后重试']); } } /** * 获取登录信息 * @return void */ public function loginInfo(){ //系统名称 $systemConfig = \app\common\model\config\System::getConfig('system'); //是否可微信登录 $wxOfficialAccountConfig = \app\common\model\config\System::getConfig('wxOfficialAccount'); $data = [ 'name'=>$systemConfig['name'], 'can_wechat_login'=> $wxOfficialAccountConfig['app_id'] && $wxOfficialAccountConfig['wx_login'] == 'open' && $wxOfficialAccountConfig['secret'], 'is_login'=>$this->auth->isLogin(), 'mobile_login'=>'open' ]; if(isset($systemConfig['mobile_login'])){ $data['mobile_login'] = $systemConfig['mobile_login']; } $this->success(__('获取成功'), $data); } }