当前位置:首页 > Web开发 > 正文

PHP实现QQ第三方登录代码

2024-03-31 Web开发

PHP实现QQ快速登录,罗列了三种方法

方法一:面向过程,,回调地址和首次触发登录写到了一个方法页面【因为有了if做判断】,

方法二,三:面向对象

1.先调用登录方法,向腾讯发送请求,
2.腾讯携带本网站唯一对应参数OPENID,ACCESSTOKEN,返回到对应回调页面,
3.回调页面接受到腾讯的参数后,通过这个两个参数,再发出对应的请求,如查询用户的数据。
4.腾讯做出对应的操作,如返回这个用户的数据给你

即使你没看懂,也没关系,按照我下面的流程来,保证你可以实现。

前期准备:

使用人家腾讯的功能,总得和人家打招呼吧!

QQ互联首页:

进入网址后,按如下操作来:

一.进入官网

技术图片

二.申请创建【网站】应用

技术图片

三.按要求填写资料

注意网站地址:填写你要设置快速登录的网址,eg:;  

回调地址:填写你发送QQ快速登陆后,腾讯得给你信息,这个信息往此页面接受。eg:

【详细的申请填写,请见官方提示,这里不做赘述】

技术图片

四.申请成功后,完善信息

技术图片

最终要求,获得APP_ID ,APP_KEY

五.代码部分:

在你对应的PHP文件内写入,如下
方法一,面向过程法
使用方法:配置$app_id,$app_secret,$my_url后,其他原封复制即可,$user_data为返回的登录信息
代码:

----------------------------------------------------------------------------------------------------------------------------------------------------------

//应用的APPID

   $app_id = "你的APPID";

   //应用的APPKEY

   $app_secret = "你的APPKEY";

   //【成功授权】后的回调地址,即此地址在腾讯的信息中有储存

   $my_url = "你的回调网址";

  

   //Step1:获取Authorization Code

   session_start();

   $code = $_REQUEST["code"];//存放Authorization Code

   if(empty($code))

   {

    //state参数用于防止CSRF攻击,成功授权后回调时会原样带回

    $_SESSION[‘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[‘state‘];

    echo("<script> top.location.href=‘" . $dialog_url . "‘</script>");

   }

  

   //Step2:通过Authorization Code获取Access Token

   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=" . 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;

      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>

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/42496.html