查看: 1207|回复: 4

[网站源码] 教你在你的网站接入QQ登陆

[复制链接]
累计签到:329 天
连续签到:20 天

1449

主题

-71

回帖

1万

积分

热心会员

名望
0
星币
4499
星辰
0
好评
63

幸运猪

发表于 2023-12-13 01:53:34 | 显示全部楼层 |阅读模式

注册登录后全站资源免费查看下载

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何在你的网站接入QQ登陆?
首先需要准备些什么呢?
国内服务器和备案域名
需要你有张独一无二本人的SF证
你正面手持SF证的图片
一张100px*100px的网站图标
申请QQ登陆的权限
首先我们访问QQ互联(点击直接访问)

登陆完成后我们点击面的应用管理

然后我们点击头像进入页面后填写相关的信息等待审核就好了(审核时间大概在一天左右吧)

创建应用
回到管理页面点击创建应用>创建网站应用

然后填写你的网站的相关信息

网站地址填你要用QQ登录的网址,回调地址填到你要登录的页面的目录下,再加/qqlogin.php 例如我要用www.paijishu.net进行QQ登录,登录页面在路径www.paijishu.net/user/login.php 那这个回调地址就填www.paijishu.net/user/qqlogin.php 提供方可以随意,然后再把备案号填完就行,最/后上传下图标即可,然后等待审核(一天左右吧)

最/后然后记录你的APP ID和APP Key,在你的登录页面加上QQ登录的按钮然后指向回调域
最/后上传qqlogin.php代码
  1. <?php
  2. include '../includes/config.php';//这里你加载你网站程序的运行文件
  3. //应用的APPID

  4.    $app_id = "你的APPID";
  5.    //应用的APPKEY
  6.    $app_secret = "你的APPKEY";
  7.    //【成功授权】后的回调地址,即此地址在腾讯的信息中有储存
  8.    $my_url = "你填写的回调地址";
  9.   
  10.    //Step1:获取Authorization Code
  11.    session_start();
  12.    $code = $_REQUEST["code"];//存放Authorization Code
  13.    if(empty($code))
  14.    {
  15.     //state参数用于防止CSRF攻击,成功授权后回调时会原样带回
  16.     $_SESSION['state'] = md5(uniqid(rand(), TRUE));
  17.     //拼接URL
  18.     $dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
  19.      . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
  20.      . $_SESSION['state'];
  21.      if(isset($_GET['user'])){
  22.          $dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
  23.      . $app_id . "&redirect_uri=" . urlencode($my_url) . "?user=".$_GET['user']."&state="
  24.      . $_SESSION['state'];
  25.      }
  26.     echo("<script> top.location.href='" . $dialog_url . "'</script>");
  27.    }
  28.   
  29.    //Step2:通过Authorization Code获取Access Token
  30.    if($_REQUEST['state'] == $_SESSION['state'] || 1)
  31.    {
  32.     //拼接URL
  33.     $token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
  34.      . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
  35.      . "&client_secret=" . $app_secret . "&code=" . $code;
  36.     $response = file_get_contents($token_url);
  37.     if (strpos($response, "callback") !== false)//如果登录用户临时改变主意取消了,返回true!==false,否则执行step3
  38.     {
  39.      $lpos = strpos($response, "(");
  40.      $rpos = strrpos($response, ")");
  41.      $response = substr($response, $lpos + 1, $rpos - $lpos -1);
  42.      $msg = json_decode($response);
  43.      if (isset($msg->error))
  44.      {
  45.       echo "<h3>error:</h3>" . $msg->error;
  46.       echo "<h3>msg :</h3>" . $msg->error_description;
  47.       exit;
  48.      }
  49.     }
  50.   
  51.     //Step3:使用Access Token来获取用户的OpenID
  52.     $params = array();
  53.     parse_str($response, $params);//把传回来的数据参数变量化
  54.     $graph_url = "https://graph.qq.com/oauth2.0/me?access_token=".$params['access_token'];
  55.     $str = file_get_contents($graph_url);
  56.     if (strpos($str, "callback") !== false)
  57.     {
  58.      $lpos = strpos($str, "(");
  59.      $rpos = strrpos($str, ")");
  60.      $str = substr($str, $lpos + 1, $rpos - $lpos -1);
  61.     }
  62.     $user = json_decode($str);//存放返回的数据 client_id ,openid
  63.     if (isset($user->error))
  64.     {
  65.      echo "<h3>error:</h3>" . $user->error;
  66.      echo "<h3>msg :</h3>" . $user->error_description;
  67.      exit;
  68.     }
  69.     if(isset($_GET['user'])){//这个if是我用来绑定Openid的,可以根据自己所需编写
  70.         $AT->query("UPDATE `act_user` SET `Openid` = '".$user->openid."' WHERE `Uid` = ".$_GET['user']);
  71.         exit ('<script>alert("绑定成功!");window.location.href = "./system.php";</script>');
  72.     }
  73.     //echo("Hello " . $user->openid);
  74.     //echo("Hello " . $params['access_token']);
  75.   
  76.     //Step4:使用<span >openid,</span><span >access_token来获取所接受的用户信息。</span>
  77.     $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";
  78.   
  79.     $user_data = file_get_contents($user_data_url);//此为获取到的user信息
  80.   
  81.     $return = $AT->get_row("SELECT * FROM act_user where Openid = '".$user->openid."'");//这一块代码根据自己需要编写
  82.     if(!$return){
  83.         echo '<script>alert("授权站无此用户!");window.location.href = "./login.php";</script>';
  84.     }else{
  85.         setcookie("ACTuser",$return['token'],time() + 3600);
  86.         echo '<script>alert("登录成功!");window.location.href = "./index.php";</script>';
  87.     }
  88.   
  89.     }
  90.     else
  91.     {
  92.      echo("The state does not match. You may be a victim of CSRF.");
  93.     }
  94. ?>
复制代码


有啥问题可以私信问我,看到会回复。有啥问题可以私信问我,看到会回复。有啥问题可以私信问我,看到会回复。

有啥问题可以私信问我,看到会回复。有啥问题可以私信问我,看到会回复。有啥问题可以私信问我,看到会回复。
回复

使用道具 举报

累计签到:324 天
连续签到:5 天

0

主题

687

回帖

4236

积分

练星

名望
0
星币
3264
星辰
0
好评
12

星座专属勋章在线大神灌水天才奖欢乐天使奖幸运猪鼎力支持奖五一勋章

发表于 2023-12-13 09:57:43 | 显示全部楼层
1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

累计签到:46 天
连续签到:1 天

1

主题

51

回帖

266

积分

星碎

名望
0
星币
170
星辰
0
好评
0
发表于 2023-12-16 13:49:55 来自手机 | 显示全部楼层
哈哈哈哈
默认签名:偏爱是我家,发展靠大家! 社区反馈邮箱Mail To:service@pai.al或paijishu@outlook.com
回复 支持 反对

使用道具 举报

累计签到:169 天
连续签到:1 天

2

主题

132

回帖

1383

积分

星体

名望
100
星币
694
星辰
0
好评
0
发表于 2023-12-18 19:01:15 | 显示全部楼层
谢谢分享!
默认签名:偏爱是我家,发展靠大家! 社区反馈邮箱Mail To:service@pai.al或paijishu@outlook.com
回复 支持 反对

使用道具 举报

累计签到:169 天
连续签到:1 天

2

主题

132

回帖

1383

积分

星体

名望
100
星币
694
星辰
0
好评
0
发表于 2023-12-18 20:07:57 | 显示全部楼层
感谢分享!
默认签名:偏爱是我家,发展靠大家! 社区反馈邮箱Mail To:service@pai.al或paijishu@outlook.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|偏爱技术社区-偏爱技术吧-源码-科学刀-我爱辅助-娱乐网--教开服-游戏源码

偏爱技术社区-偏爱技术吧-源码-科学刀-我爱辅助-娱乐网-游戏源码

Powered by Discuz! X3.5

GMT+8, 2024-11-10 01:15 , Processed in 0.090755 second(s), 46 queries .

快速回复 返回顶部 返回列表