参考:思梦教育
1、QQ互联(链接地址:https://connect.qq.com/index.html),进行开发者认证(未认证的情况下),有公司和个人两种认证方式,个人开发者选择个人认证就好,准备好身份证电子版。认证界面如图一,认证不做赘述。
(图一)
2、认证通过界面如图二,认证完,我们将创建应用如图三,选择创建网站应用,填写好个人信息如图四。
(图二)
(图三)
(图四)
3、应用创建好后,会有大约2天的认证时间,认证通过的情况下,可在应用管理下查看。成功创建的应用如图五
(图五)
4、代码部分,tp3.2版本,新建QqController.class.php,名称自拟,但是需要符合你的回调地址。
<?php/* * P:QQ登录 * U:shenlin * T:2017-10-18 * Q:297760026 * */namespace Home\Controller;use Think\Controller;class QqController extends Controller{ ???//发起请求 ???public function qqsend(){ ???????//参数 ???????$url = "https://graph.qq.com/oauth2.0/authorize"; ???????$param[‘response_type‘] = "code"; ???????$param[‘client_id‘]="你的appid"; ???????$param[‘redirect_uri‘] ="你的回调地址"; ???????$param[‘scope‘] ="get_user_info"; ???????//-------生成唯一随机串防CSRF攻击 ???????$param[‘state‘] = md5(uniqid(rand(), TRUE)); ???????$_SESSION[‘state‘] = $param[‘state‘]; ???????//拼接url ???????$param = http_build_query($param,"","&"); ???????$url = $url."?".$param; ???????header("Location:".$url); ???} ???//回调 ???public function qqback(){ ???????$code = I(‘get.code‘); ???????$state = I(‘get.state‘); ???????if($code && $state == $_SESSION[‘state‘]){ ???????????//获取access_token ???????????$res = $this->getAccessToken($code,"你的appid","你的appkey"); ???????????dump($res); ???????????exit(); ???????????parse_str($res,$data); ???????????$access_token = $data[‘access_token‘]; ???????????$url ?= "https://graph.qq.com/oauth2.0/me?access_token = $access_token"; ???????????$open_res = $this->httpsRequest($url); ???????????if(strpos($open_res,"callback") !== false){ ???????????????$lpos = strpos($open_res,"("); ???????????????$rpos = strrpos($open_res,")"); ???????????????$open_res = substr($open_res,$lpos + 1 ,$rpos - $lpos - 1); ???????????} ???????????$user = json_decode($open_res); ???????????$open_id = $user->openid; ???????????$url = "https://graph.qq.com/user/get_user_info?access_token=$access_token&oauth_consumer_key=你的appid&open_id = $open_id"; ???????????$user_info = $this->httpsRequest($url); ???????????//输出qq用户信息 ???????????dump($user_info); ???????} ???????$this->display(); ???} ???//通过Authorization Code获取Access Token ???public function getAccessToken($code,$app_id,$app_key){ ???????$url="https://graph.qq.com/oauth2.0/token"; ???????$param[‘grant_type‘]="authorization_code"; ???????$param[‘client_id‘]=$app_id; ???????$param[‘client_secret‘]=$app_key; ???????$param[‘code‘]=$code; ???????$param[‘redirect_uri‘]="你的回调地址"; ???????$param =http_build_query($param,"","&"); ???????$url=$url."?".$param; ???????return $this->httpsRequest($url); ???} ???//httpsRequest ???public function httpsRequest($post_url){ ???????$ch = curl_init(); ???????curl_setopt($ch, CURLOPT_URL,$post_url);//要访问的地址 ???????curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//执行结果是否被返回,0是返回,1是不返回 ???????curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置超时 ???????$res = curl_exec($ch);//执行并获取数据 ??????return $res; ???????curl_close($ch); ???}}
ThinkPHP第三方登录-QQ登录
原文地址:http://www.cnblogs.com/shenlin/p/7826690.html