实现第三方登录——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.");
}

        
?>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接入第三方登录是让用户方便快捷地使用已有账号登录你的网站或应用程序,提高用户体验的一种方式。本文将介绍如何使用 PHP 实现微信公众号第三方登录。 1. 获取微信授权 首先,需要获取微信用户的授权。具体步骤如下: 1)引导用户打开微信授权页面: ```php $appid = 'your_appid'; $redirect_uri = urlencode('http://yourdomain.com/callback.php'); $scope = 'snsapi_userinfo'; $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=$scope&state=STATE#wechat_redirect"; header("Location: $url"); ``` 其中,`$appid` 是你的微信公众号的 AppID,`$redirect_uri` 是授权后回调的 URL,`$scope` 是授权作用域,可以是 `snsapi_base` 或 `snsapi_userinfo`,`$state` 是自定义参数,用于防止 CSRF 攻击。 2)获取授权码: 用户同意授权后,会重定向到 `$redirect_uri` 指定的 URL,带上授权码 `code` 和 `state` 参数。 ```php $code = $_GET['code']; $state = $_GET['state']; ``` 3)获取 access_token 和 openid: 使用授权码 `code` 获取 `access_token` 和 `openid`。 ```php $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"; $response = file_get_contents($access_token_url); $result = json_decode($response, true); $access_token = $result['access_token']; $openid = $result['openid']; ``` 其中,`$secret` 是你的微信公众号的 AppSecret。 2. 获取用户信息 获取到 `access_token` 和 `openid` 后,可以使用以下代码获取用户信息: ```php $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; $response = file_get_contents($userinfo_url); $userinfo = json_decode($response, true); ``` 其中,`$userinfo` 包含用户的昵称、头像等信息。 3. 将用户信息保存到数据库 最后,将获取到的用户信息保存到数据库中,以便下次使用时快速登录。 ```php // 连接数据库 $con = mysqli_connect('localhost', 'username', 'password', 'database'); mysqli_set_charset($con, "utf8"); // 查询用户是否已存在 $sql = "SELECT * FROM users WHERE openid='$openid'"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) == 0) { // 用户不存在,插入新用户信息 $nickname = mysqli_real_escape_string($con, $userinfo['nickname']); $headimgurl = mysqli_real_escape_string($con, $userinfo['headimgurl']); $sql = "INSERT INTO users (openid, nickname, headimgurl) VALUES ('$openid', '$nickname', '$headimgurl')"; mysqli_query($con, $sql); } // 保存用户登录状态 $_SESSION['openid'] = $openid; ``` 以上就是使用 PHP 实现微信公众号第三方登录的步骤。需要注意的是,为了确保安全性,应该对用户输入的数据进行过滤和验证,防止 SQL 注入和 XSS 攻击等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值