发布时间:2017年12月20日 10:25:46编辑:admin阅读(4812)评论(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
7559
4924
4813