发布时间:2017年12月20日 10:25:46编辑:admin阅读(5439)评论(0)
pc的使用好像越来越少了,但总不会消失的,笔记编程还是要用电脑的啊
使用微信登录,微信扫码登录,就是没使用过pc的QQ登录,琢磨一下还是用QQ登录吧(微信个人审核要我盖公章,审核不过
)
QQ登录其实跟微信登录没多大的区别,都是一家公司的,套路都差不多,哈哈哈
首先先申请,这里有区别,
QQ互联
QQ开发平台
QQ互联是pc端的操作,QQ开发平台是手机应用的操作,前者类似微信公众号,后者类似微信开发号,名字也差不多。
总之我做的是PC端,不是APP,这里申请QQ互联就可以了,还有就是手机浏览器登录也是QQ互联。
QQ互联注册地址:点击这里注册,注册之后创建应用,当然这里会叫你先个人身份审核,这里我们按照他们说的做就是,提交审核,等待审核通过
等待审核之后就可以看到获得得权限就一个登录 get_user_info

有这个就够了,我们就可以用来做登录
插图一张怕看不到,放大一下字体
然后就可以啃文档了,或者直接复制我的代码,(不知道是好是坏,时间足够的话还是自己慢慢啃一下吧,毕竟多学有益)
第一步:获取 code
第二步:通过 code 获取 Access Token
第三步:通过 Access Token 获取 用户 OpenID,
第四步: 通过 OpenID 获取 用户信息 user_info
总结就是这四个步骤,啃文档的时候会发现 第二步第三步会有一个pc端请求地址,wap请求地址
没错,这里分手机端和PC端的,我也做了。在使用的过程中发现并没卵用
直接着pc端登录就可以了,手机端通这个连接也可以登录成功,如果你使用wap连接地址登录,第二步的时候就一直等待返回数据
然而,QQ互联那边就是不给你数据,气死你
好了,上干货
/*
author 逍客 1078576480@qq.com
*/
/*
system_id 公共模块查询APPID并返回,我这里是存在数据,个人可以自行修改放在config.php 配置文件内,我是存在数据库便于后台修改维护
web_qq_redirect_uri 回调地址 这里是回调接口,跟你放在QQ互联配置回调地址一致。然后这里需要 URLEncode
*/
public function qq_login(){
//$url = 'https://graph.qq.com/user/get_user_info';
$appid = system_id('web_qq_appid');
$appkey = system_id('web_qq_appkey');
$web_qq_redirect_uri = system_id('web_qq_redirect_uri');
/*
获取 code
*/
if(is_null($_GET["code"])){
$url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id='.$appid.'&redirect_uri='.$web_qq_redirect_uri.'&state='.C('project_name');
header("Location:".$url);
}else{
//dump('手机');die;
/*
isMobile() 判断是手机端还是PC端
*/
if(isMobile()){
$url = 'https://graph.z.qq.com/moc2/token';
}else{
$url = 'https://graph.qq.com/oauth2.0/token';
}
/*
获取 access_token
*/
$url = $url.'?grant_type=authorization_code&client_id='.$appid.'&client_secret='.$appkey.'&code='.$_GET["code"].'&redirect_uri='.$web_qq_redirect_uri;
//dump($url);;die;
$res = httprequest_get($url);
//dump($res);die;
$user_obj = explode_string('&',$res);
$user_obj = explode_string('=',$user_obj[0]);
/*
获取 APPID
*/
if(isMobile()){
$urls = 'https://graph.z.qq.com/moc2/me';
}else{
$urls = 'https://graph.qq.com/oauth2.0/me';
}
//dump($user_obj);
//dump($user_obj[1]);die;
$urls = $urls.'?access_token='.$user_obj[1];
//dump($urls);
$res = httprequest_get($urls);
$start = strpos($res, '{');
$end = strpos($res, '}');
$va = substr($res,10,$end-9);
$user = json_decode($va,true);
if($user_object = find_model('web_grant_qq','openid="'.$user['openid'].'"')){
$user_id = find_model('web_users','id='.$user_object['user_id']);
$_SESSION['user_name'] = $user_id['username'];
$_SESSION['user_id'] = $user_id['id'];
$_SESSION['avatar'] = $user_id['avatar'];
update_model('web_users','id='.$user_id['id'],array('last_login_ip'=>get_user_ip(),'last_login_time'=>time()));
echo '<script>alert("登录成功");location.href="'.__MODULE__.'/index/index"</script>';
}else{
/*
获取 用户信息
*/
$url = 'https://graph.qq.com/user/get_user_info?access_token='.$user_obj[1].'&oauth_consumer_key='.$appid.'&openid='.$user['openid'];
$res = json_decode(httprequest_get($url),true);
//dump($res);die;
$user_ed = array(
'username' => $res['nickname'],
'avatar' => $res['figureurl_qq_2'],
'city' => $res['city'],
'province' => $res['province'],
'sex' => $res['gender']=='男'?1:2,
'statues' => 1,
'register_time' => time(),
'register_time' => time(),
);
if($user_id = add_model('web_users',$user_ed)){
$grant_qq = array(
'openid' => $user['openid'],
'user_id' => $user_id,
'create_time' => time(),
);
if(add_model('web_grant_qq',$grant_qq)){
$_SESSION['user_name'] = $res['nickname'];
$_SESSION['user_id'] = $user_id;
$_SESSION['avatar'] = $res['figureurl_qq_2'];
update_model('web_users','id='.$user_id,array('last_login_ip'=>get_user_ip(),'last_login_time'=>time()));
echo '<script>alert("登录成功");location.href="'.__MODULE__.'/index/index"</script>';
}else{
echo '<script>alert("操作异常");location.href="'.__MODULE__.'/index/index"</script>';
}
}else{
echo '<script>alert("操作异常");location.href="'.__MODULE__.'/index/index"</script>';
}
}
}
} /*
author 逍客 1078576480@qq.com
*/
/*
因后面手机端测试登录一直不自动跳转,查询之后发现pc端可以当手机端的使用,所以我这判断是否手机端的方法直接返回false
*/
function isMobile(){
return false;
// 如果有Http_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){
return true;
}
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA'])){
// 找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
// 脑残法,判断手机发送的客户端标志,兼容性有待提高
if (isset ($_SERVER['HTTP_USER_AGENT'])){
$clientkeywords = array ('nokia',
'sony',
'eriCSSon',
'mot',
'samsung',
'htc',
'sgh',
'lg',
'sharp',
'sie-',
'philips',
'panasonic',
'alcatel',
'lenovo',
'iphone',
'ipod',
'blackberry',
'meizu',
'android',
'netfront',
'symbian',
'ucweb',
'windowsce',
'palm',
'operamini',
'operamobi',
'openwave',
'nexusone',
'cldc',
'midp',
'wap',
'mobile'
);
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))){
return true;
}
}
// 协议法,因为有可能不准确,放到最后判断
if (isset ($_SERVER['HTTP_ACCEPT'])){
// 如果只支持wml并且不支持HTML那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))){
return true;
}
}
return false;
}
/*
配置信息
*/
function system_id($web_name){
$system = find_model('web_system','id=1');
return $system[$web_name]==''?'未知':$system[$web_name];
}QQ登录的代码就全部分享完了
感谢支持
上一篇: 新手简单发送邮件
下一篇: 自己封装整合的一个简单聊天APP
8225
5415
5440