首先,登录QQ互联平台获取QQ一键登录所需的Appkey和Appsecret。

2、下载QQ登录用的SDK软件包,可以上QQ互联官方网下载。这里用的是Connect_PHP_SDK_for_OAuth2_V1.1.zip

3、在登录页面放置QQ登录的图标。

functiontoQzoneLogin()

{

varA=window.open("oauth/qq_login.php","TencentLogin","width=450,height=320,menubar=0,scrollbars=1,resizab

le=1,status=1,titlebar=0,toolbar=0,location=1");

}

4、修改comm/config.php中的4个变量

$_SESSION["appid"];

$_SESSION["appkey"];

$_SESSION["callback"];

$_SESSION["scope"];

5、以下是代码的【实现】

oauth/qq_login.php

require_once("../comm/config.php");

function qq_login($appid,$scope, $callback)

{

$_SESSION['state'] = md5(uniqid(rand(),TRUE)); //CSRF protection

. $appid ."&redirect_uri=" . urlencode($callback)

. "&state=" .$_SESSION['state']

. "&scope=".$scope;

header("Location:$login_url");

}

//用户点击qq登录按钮调用此函数

qq_login($_SESSION["appid"],$_SESSION["scope"], $_SESSION["callback"]);

?>

//应用的APPID

$app_id = "YOUR_APP_ID";

//应用的APPKEY

$app_secret = "YOUR_APP_KEY";

//成功授权后的回调地址

$my_url = "YOUR_REDIRECT_URL";

//Step1:获取Authorization Code

session_start();

$code = $_REQUEST["code"];

if(empty($code))

{

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

$_SESSION['state'] =md5(uniqid(rand(), TRUE));

//拼接URL

. $app_id. "&redirect_uri=" . urlencode($my_url) . "&state="

.$_SESSION['state'];

echo("");

}

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

if($_REQUEST['state'] == $_SESSION['state'])

{

//拼接URL

. "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)

{

$lpos =strpos($response, "(");

$rpos =strrpos($response, ")");

$response  =substr($response, $lpos + 1, $rpos - $lpos -1);

$msg =json_decode($response);

if(isset($msg->error))

{

echo "

error:

" . $msg->error;

echo "

msg  :

" .$msg->error_description;

exit;

}

}

//Step3:使用Access Token来获取用户的OpenID

$params = array();

parse_str($response, $params);

$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);

if (isset($user->error))

{

echo"

error:

" . $user->error;

echo"

msg  :

" .$user->error_description;

exit;

}

echo("Hello " .$user->openid);

}

else

{

echo("The state does notmatch. You may be a victim of CSRF.");

}

?>

以上是写好的接口,实际上我们只需要在回调页面callback.php修改就可以。

require_once("../config.php");

require_once("../qqConnectAPI.php");

require '../config.inc.php';

require '../uc_client/client.php';

require '../api/uc.php';

$qc = new QC();

$acs=$qc->qq_callback();

global $SESSION;

$SESSION->acs=$acs;

//echo $SESSION->acs."
";

$oid = $qc->get_openid();

$SESSION->oid=$oid;

//echo $SESSION->oid."
";

$qc = new QC($acs,$oid);

$uinfo = $qc->get_user_info();

//var_dump($uinfo);

$SESSION->nickname=$uinfo['nickname'];

$username=$SESSION->nickname;

$link=@mysql_connect("localhost","root","root");

mysql_select_db("moodle");

mysql_query('setnames utf8');

$sql1="select* from mdl_user where username='".$uinfo['nickname']."'";

echo $sql1;

$res1=mysql_query($sql1);

$result=mysql_num_rows($res1);

echo $result;

if($result==0){

$sql="insert into mdl_user(id,auth,username,deleted,mnethostid,firstname,openid) values(null,'manual','".$uinfo['nickname']."',0,1,'".$uinfo['nickname']."','$oid')";

$res=mysql_query($sql);

$mysqli=newmysqli("localhost","root","root","discuz");

$mysqli->query("setnames utf8");

$sql2="insertinto cdb_uc_members (uid,username) values(null,'".$uinfo['nickname']."')";

$mysqli->query($sql2);

}

$user =$DB->get_record('user', array('openid' =>$oid, 'deleted' => 0,'mnethostid' => $CFG->mnet_localhost_id));

//var_dump($user);

$userid=$user->id;

//$password=$user->password;

// echo$password;

//echo$uid;

$mysqli=newmysqli("localhost","root","root","discuz");

$mysqli->query("setnames utf8");

$sql3="select* from cdb_uc_members where username='".$uinfo['nickname']."'";

$res= $mysqli->query($sql3);

$row=mysqli_fetch_assoc($res);

$uid=$row['uid'];

$result2= mysqli_num_rows($res);

if($result2 != 0) {

$username=$uinfo['nickname'];

//list($uid, $username2,$password2, $email)= uc_user_login($username,$password=null);

//ucenter表有此用户,设置Cookie,登录成功,并通知其它应用同步登录

setcookie('Mdl_auth', uc_authcode($uid."\t".$username,'ENCODE'));

//生成同步登录的代码

$ucsynlogin = uc_user_synlogin($uid);

echo $ucsynlogin.'';

}

//add_to_log(SITEID,'auth_qq', '', '', $username . '/' . $useremail . '/' . $userid);

//$user =authenticate_user_login($username,$password);

//var_dump($user);

complete_user_login($user);

echo "

window.opener.location.reload();

window.close();

";

?>

php获取qzonetoken,QQ一键登录实现相关推荐

  1. Android webview实现QQ一键登录授权

    Android webview实现QQ一键登录授权 最近公司要求的新需求,要实现webview中的的QQ登录,大脑没经过就习惯的百度,奈何找了两天的资料也没发现个完整的demo,只能自己写,好吧,还要 ...

  2. laravel实现第三方qq一键登录

    首先composer安装依赖: composer require socialiteproviders/qq复制代码 注册服务提供者(同时注释掉原有的Socialite提供者): 'providers ...

  3. selenium实现模拟点击QQ一键登录

    涉及到知识点: Xpath frame切换 分析 以彼岸桌面壁纸为例,爬取很多原图时需要用户登录(花钱才可以下载诸多原图,普通用户只可以一天只可以下载一次原图,在这里使用QQ一键登录全当练练手). 以 ...

  4. QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip

    QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip 此插件是方便会员进行注册登录操作,为 站长 带来更多活跃会员 使用此插件要注意一下几点: 1.此插件使用前请到 ...

  5. uniapp中调用QQ一键登录实现方法

    要在uniapp中实现QQ一键登录,主要步骤: 1.manifest.json的模块设置中,启用QQ登录,并填入appid 3.新建登录页 <template><view>正在 ...

  6. 织梦DEDECMS QQ一键登录插件返回空白解决方法

    修改织梦网站时,遇到个QQ一键登录返回是空白的问题 找了好久没发现什么原因,最后才知道原因在于服务器, 因为腾讯OAuth2.0采用的是https协议进行数据请求,QQ一键登录插件采用curl拓展对数 ...

  7. php 一键登录插件,[免费]ZblogPHP QQ一键登录免费插件

    先上背景:自从装了ZBlogPHP程序,一直在寻找QQ互联的插件,因为我懒得记密码!!!因为懒...所以就在某应用中心搜索,工夫不负有心人,找是找到了,,但是,,,但是价格不菲啊!!! ,,,作为一个 ...

  8. 使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册

    在你的 App 中集成手机QQ一键授权(注册)登录功能,达到快速注册.快速登录功能 按照本教程的操作指引,预计5分钟即可帮你实现并掌握QQ登录的实现 申请开通QQ互联 https://connect. ...

  9. 微信qq一键登录php代码6,Laravel6实现第三方 微信登录

    目前很多的网站中都会存在很多的交互功能,从而降低用户的操作难度,特此带来微信的第三方登录的项目实战功能开发.对于本实例中的开发内容,就不在使用原生的内容,而是直接使用别人写好的封装的类库. 1. 安装 ...

最新文章

  1. 实战 | 某小公司项目环境部署演变之路
  2. poj2195(最小费用流)
  3. 开源:这个来自清华的开源项目火爆 GitHub
  4. Python程序设计题解【蓝桥杯官网题库】 DAY2-IDLE与基础练习
  5. atitit.js浏览器环境下的全局异常捕获
  6. 查询oracle中用户的角色,oracle中用户角色的查询和授权
  7. springboot实现上传文件
  8. SpringMVC的请求-获得请求参数-自定义类型转换器
  9. 【Pytorch】X.view(-1)操作
  10. 六大场景下,模型分数如何应用?
  11. 需求工程:加强监理,规避风险(转载)续三
  12. 矩池云Jupyterlab支持download as pdf
  13. 21个演示展示强大的jQuery特效
  14. 查询同一组的最大最小值及明细
  15. 安卓接入高德地图3dmap黑屏问题解决
  16. a标签如何链接php文件路径,HTML的a标签href属性指定相对路径与绝对路径的用法讲解...
  17. 现在计算机上都有高速缓冲存储器,高速缓冲存储器(Cache.一般采用DRAM构成
  18. 移动端web及app设计尺寸
  19. 解决“Windows 平台 FIPS 验证的加密算法的一部分”问题
  20. Python 列表推导式的实用小技巧

热门文章

  1. eShopOnContainers 是一个基于微服务的.NET Core示例框架
  2. 新起点!新征程!微软技术俱乐部(苏州)成立大会暨微软技术交流会
  3. .net core实践系列之短信服务-为什么选择.net core(开篇)
  4. .NET Core多平台项目模板eShopOnContainers编译手记
  5. gRPC官方快速上手学习笔记(c#版)
  6. Entity Framework Core 2.0 特性介绍和使用指南
  7. 迁移传统.net 应用到.net core [视频]
  8. Redis在PHP项目中的应用
  9. Android Fragment 监听返回键
  10. Android之使用HandlerThread 以及如何退出总结