初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user