实现第三方登录——qq

现在有很多应用网站等等都支持第三方登录,例如我们都在用的qq、微信、支付宝等都能实现一键登录方便了很多,我们今天来讲一下QQ登录
第三方登录其实就是获取用户授权后的的头像账号等等,作为登陆的一个凭证。
要想实现QQ第三方登录需要要到腾讯的相应的站的去申请,qq互联申请
个人审核时的页面不好找,点击你自己的名字就可以找到了 ,提交相应的资料审核就OK了
在这里插入图片描述
在这里插入图片描述
首先通过上边的个人审核,在创建应用,填写相应的信息,提交审核,等待审核通过以后就能 使用了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤就是这样 等待申请通过就可以使用腾讯提供给你的接口了
他会给你提供app_id和app_key
在这里插入图片描述
接下来就是代码流程了 在说代码之前首先要知道逻辑流程,
在这里插入图片描述
一般都是这样的,你要先按放好图标,(这个可以自己下载 也可以使给你提供好的 可以看自己)写好连接点击后会弹出这样的页面让你选择登录方式,确认后他就会登陆成功。
在这里插入图片描述
登录后我们看一看获取的参数他给的是json格式的,包含了基本信息 还有头像等等,这些json需要转换。
在这里插入图片描述
在这个登陆过程中他一共走了几步流程呢?让我们来分析一下
以tpshop为例,client_id 就是你的app_id, client_secret就是app_key,


他首先通过https://graph.qq.com/oauth2.0/authorize获得code值
第二部通过https://graph.qq.com/oauth2.0/token获取token
第三部通过token 获取open_id https://graph.qq.com/oauth2.0/me
最后就是获取用户信息了。每一步里边的参数请看测试的代码吧

在这里插入图片描述
了解的差不多自己先去测试测试吧 相信你应该差不多了。


<?php

//应用的APPID
$app_id = "";
//应用的APPKEY
$app_key = "";
//成功授权后的回调地址
$my_url = "http://callback.gaoxin520.top/callback.php";
//获取Authorization Code 的code值
session_start();//开启session
$code = $_REQUEST["code"];//存放Authorization Code

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

          //拼接URL
          $token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&" . "client_id=" . $app_id . "&redirect_uri=" . $my_url . "&client_secret=" . $app_key . "&code=" . $code;
          $response = file_get_contents($token_url);
		  //print_r($response);
          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;
                  exit;
              }
          }
		
   //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;
    }
   // echo("Hello " . $user->openid);
    //echo("Hello " . $params['access_token']);
 //Step4:使用<span >openid,</span><span >access_token来获取所接受的用户信息。</span>
    $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信息
        echo $user_data;//查看返回的用户信息
}
else
{
    echo("The state does not match. You may be a victim of CSRF.");
}

        
?>

猜你喜欢

转载自blog.csdn.net/weixin_44411569/article/details/87902567