1.判断是否登录,如果登录了,就让其直接访问.没有登录跳转到登录授权的方法
在laravel中代码实现
a.让需要登录的所有路由使用中间件包裹
//授权登陆
Route::get('auth/login', 'Front\AuthController@getLogin')->name('login');
//需要登录才可以访问的网页
Route::group([ 'middleware' => 'auth', 'namespace' => 'Front'], function(){
.......
});
//其他不需要登录可以访问的网页
......
b.中间件判断登录代码
public function handle($request, Closure $next)
{
if (!\Auth::check()){//判断登录
//没有登录
if ($request->ajax()) {//如果是异步
return response('Unauthorized.', 401);
} else {
return redirect('auth/login');//跳转到授权登录的方法
}
}
//登录继续执行
return $next($request);
}
}
2.授权登录的逻辑
a.判断网页来源,是自己跳转还是微信返回的,发送请求 构造链接 目的是为了获取code
$state=$request->state;//初始的时候没有值,点确定按钮后是,submit,获取到code后,get_code
//只有从微信端跳转过来的链接 才可以进入if
if($state!='get_code'){
//发送获取code请求
$config = Config::find(1);//从数据库取出来corpid 和 agent_id
//判断网站是http 还是https
if(isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on')
{
$redirect_uri = urlencode('https://'.$_SERVER['HTTP_HOST'].'/auth/login');
//echo "HTTPS";
}else{
//echo "HTTP";
$redirect_uri = urlencode('http://'.$_SERVER['HTTP_HOST'].'/auth/login');
}
//snsapi_userinfo 此处使用静默授权
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$config->corpid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&agentid=$config->agent_id&state=get_code#wechat_redirect";//构造链接
return redirect($url);//跳转链接
}
//页面将跳转至 redirect_uri?code=CODE&state=STATE
//处理请求结果
$code = $request->code;
$qywx =new \App\Libs\QyWeixinClass();//此处代码实现会在文章最后给出
$accessToken = $qywx->getAgentAccessToken();
$url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=$accessToken&code=$code";
$res = $qywx->httpGet($url);
$res = json_decode($res);
b.返回结果有两种
当该用户为企业成员时返回
{
"errcode": 0,
"errmsg": "ok",
"UserId":"USERID",
"DeviceId":"DEVICEID",
"user_ticket": "USER_TICKET",
"expires_in":7200
}
非企业成员授权时返回
{
"errcode": 0,
"errmsg": "ok",
"OpenId":"OPENID",
"DeviceId":"DEVICEID"
}
c.根据自己的业务逻辑需求去调整应该怎么处理企业用户和非企业用户
判断请求是否正确返回数据
if (''==$res||$res-