Files
amb_wechatapp/application/api/controller/app/pc/Login.php
T

140 lines
4.4 KiB
PHP

<?php
namespace app\api\controller\app\pc;
use app\common\controller\Api;
use app\common\library\Wechat;
/**
* 登录
*/
class Login extends Api
{
protected $noNeedLogin = ['*'];
// 无需鉴权的接口,*表示全部
protected $noNeedRight = ['*'];
public function _initialize()
{
parent::_initialize();
$this->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);
}
}