码迷,mamicode.com
首页 > Web开发 > 详细

php实现qq授权登录

时间:2017-07-12 13:39:29      阅读:912      评论:0      收藏:0      [点我收藏+]

标签:接受   state   color   _id   接口   代码   for   his   https   

第一步:

登录 https://connect.qq.com  qq授权管理中心开通应用,审核通过之后填写平台信息。如图:

 

技术分享

 

值得一提的是网站回调域必须具体到方法,不然登录之后回调会识别错误。

 

 

第二步:

建立数据表,存储qq授权返回的用户信息(主要是存储openid,用户唯一识别标识)。我的实现方法是在用户表里添加字段存储,个人中心里面补全用户信息。

技术分享

 

 

第三步:

接下来就是拿到应用的app_id 和 app_secret 来调取接口。直接上代码:

/**
* qq授权登录
*/  
public function qqlogin(){
$app_id = "111111111";
//应用的APPKEY
$app_secret = "0asd55db7745a7a946c6cfdedefgscba";
//【成功授权】后的回调地址,即此地址在腾讯的信息中有储存
$my_url = "http://".$_SERVER[‘HTTP_HOST‘]."/Home/User/qqlogin";

//Step1:获取Authorization Code
$code = $_REQUEST["code"];//存放Authorization Code
if(empty($code))
{
//state参数用于防止CSRF攻击,成功授权后回调时会原样带回
$_SESSION[‘qq_state‘] = md5(uniqid(rand(), TRUE));
//拼接URL
$dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION[‘qq_state‘];
echo("<script> top.location.href=‘" . $dialog_url . "‘</script>");
}

//Step2:通过Authorization Code获取Access Token
if($_REQUEST[‘state‘] == $_SESSION[‘qq_state‘] || 1)
{
//拼接URL
$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_contents($token_url);
if (strpos($response, "callback") !== false)//如果登录用户临时改变主意取消了,返回true!==false,否则执行step3
{
$lpos = strpos($response, "(");
$rpos = strrpos($response, ")");
$response = substr($response, $lpos + 1, $rpos - $lpos -1);
$msg = json_decode($response);
if (isset($msg->error))
{
/*echo "<h3>error:</h3>" . $msg->error;
echo "<h3>msg :</h3>" . $msg->error_description;*/
$this->error("非法操作,请重新登录!", U(‘user/login‘));
}
}

//Step3:使用Access Token来获取用户的OpenID
$params = array();
parse_str($response, $params);//把传回来的数据参数变量化
$graph_url = "https://graph.qq.com/oauth2.0/me?access_token=".$params[‘access_token‘];
$str = file_get_contents($graph_url);
if (strpos($str, "callback") !== false)
{
$lpos = strpos($str, "(");
$rpos = strrpos($str, ")");
$str = substr($str, $lpos + 1, $rpos - $lpos -1);
}
$user = json_decode($str);//存放返回的数据 client_id ,openid
if (isset($user->error))
{
/*echo "<h3>error:</h3>" . $user->error;
echo "<h3>msg :</h3>" . $user->error_description;
exit;*/
$this->error("非法操作,请重新登录!", U(‘user/login‘));
}
//echo("Hello " . $user->openid);
//echo("Hello " . $params[‘access_token‘]);

//Step4:使用access_token来获取所接受的用户信息。
$user_data_url = "https://graph.qq.com/user/get_user_info?access_token={$params[‘access_token‘]}&oauth_consumer_key={$app_id}&openid={$user->openid}&format=json";

$user_data = file_get_contents($user_data_url);//此为获取到的user信息

$user_data = json_decode($user_data, true);
$user_data[‘openid‘] = $user->openid;
$m = M("Member");
$data = array();
$data[‘sex‘] = $user_data["gender"]==‘男‘?1:2;
$data[‘province‘] = $user_data["province"];
$data[‘city‘] = $user_data["city"];
$data[‘person_name‘] = $user_data["nickname"];
$data[‘qq_openid‘] = $user_data["openid"];
$data[‘qq_name‘] = $user_data["nickname"];
$data[‘qq_img‘] = $user_data["figureurl_qq_2"];
$data[‘addtime‘] = date("Y-m-d H:i:s", time());
$data[‘person_img‘] = $user_data["figureurl_qq_2"];
$data[‘signtime‘] = date("Y-m-d H:i:s", time());

$user = M("Member")->where(array("qq_openid"=> $user_data[‘openid‘]))->find();
    //判断当前是否第一次登录
if($user){
$res = M("Member")->where(array("qq_openid"=> $user_data["openid"]))->setField("signtime", date("Y-m-d H:i:s", time()));
if($res){
        //登录成功业务逻辑
session("user_id", $user[‘id‘]);


}else{
$this->error("操作异常,拒绝访问!", U(‘user/login‘));
}
}else{
$res=$m->add($data);
if($res){
        //登录成功业务逻辑
        session("user_id", $res);
         }else{
$this->error("操作异常,拒绝访问!", U(‘user/login‘));
}
}

}
else
{
$this->error("操作异常,拒绝访问!", U(‘user/login‘));
}
}

 

php实现qq授权登录

标签:接受   state   color   _id   接口   代码   for   his   https   

原文地址:http://www.cnblogs.com/tongl/p/7154811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!