php获取qzonetoken,QQ一键登录实现

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

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

3、在登录页面放置QQ登录的图标。QQ%E7%99%BB%E5%BD%95%E5%9B%BE%E6%A0%87%E6%96%87%E4%BB%B6%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%9C%B0%E5%9D%80

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

";

?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用

V.PhyloMaker2是一个R语言的工具包,专门用于构建和分析生物系统学中的进化树(也称为系统发育树或phylogenetic tree)。以下是对V.PhyloMaker2的一些基本介绍和使用说明: 论文介绍:V.PhyloMaker2: An updated and enla…

互联网加大赛历届作品_匠心筑梦 ——家具漆服务系统2020年度涂装大赛成功举办...

时进九月,秋分将至,天气逐渐微凉,展辰新材家具漆2020年度涂装大赛进入最终评审阶段。大赛历时3个月,国内5大区域一百多位技术能手提交了参赛作品,经过层层筛选,最终入围作品175件,是历届参赛作品…

面对女人的喋喋不休时,男人内心的真实想法

1 笑而不语2 击了掌你就是我的狗了。。。。3 每次看猫咪背对着自己舔毛,总有一种饿的感觉。。4 你看对面的那个小朋友可不可爱,快去抱抱他~5 猫咪三明治,感觉很好吃的样子!6 看剧的时候真的不能开弹幕!你点的每个赞&am…

Dapr牵手.NET学习笔记:绑定

绑定有点像订阅发布,但又不一样,绑定更简单,绑定输出(调用方)-绑定输入(被调用方)。本例是用docker compose编排,并且用rabbitMQ来支持,因为rabbitMQ支持输入和输出绑定。…

pytorch 加载模型_福利,PyTorch中文版官方教程来啦(附下载)

PyTorch 中文版官方教程来了。PyTorch 是近期最为火爆的深度学习框架之一,然而其中文版官方教程久久不来。近日,一款完整的 PyTorch 中文版官方教程出炉,读者朋友从中可以更好的学习了解 PyTorch 的相关细节了。教程作者来自 pytorchchina.co…

为什么睡觉时身体突然抖一下?答案吓到我了!

全世界只有3.14 % 的人关注了爆炸吧知识不知你有没有过这样的经历:即将进入甜美梦乡,突然就像触电般地抖了一下,或者不由自主猛地踢一下,瞬间被惊醒!这到底是啥情况?网上的答案五花八门:有人说缺…

Dapper防sql注入,同一条SQL支持多种数据库

前言防SQL注入&#xff0c;常用的方案是使用Dapper执行SQL的参数化查询。例如&#xff1a;using (IDbConnection conn CreateConnection()) {string sqlCommandText "SELECT * FROM USERS WHERE IDID";Users user conn.Query<Users>(sqlCommandText, new { …

基于css3的鼠标滑动按钮动画之CSS--续

2019独角兽企业重金招聘Python工程师标准>>> btn2 /*--按钮1--*/ .container1 {width:200px;display:block;margin:20px auto;position:relative;font-family:droid arabic kufi; } .con_down1 {display:block;cursor:pointer;background-color:#F6EB96;width:190px…

rabbitmq入门_Rabbit MQ 入门

Rabbit MQ是一个通用的消息中间件&#xff0c;支持AMQP&#xff0c;STOMP&#xff0c;MQTT等多种协议安装#在OSX下可以使用如下命令来安装 rabbitmqbrew install rabbitmq基本命令#ls -al ~/rabbitmq/3.7.14/sbin/total 1104drwxr-xr-x 10 jet admin 320 May 19 14:35 .d…

94年出生,她们如今都是985高校博士生导师!

全世界只有3.14 % 的人关注了爆炸吧知识鱼羊 萧萧 发自 凹非寺量子位 报道 | 公众号 QbitAI94年出生、博士研究方向与材料相关、目前都成了985重点高校的博士生导师。拥有相同经历的两个女生&#xff0c;概率有多大&#xff1f;就在今年&#xff0c;26岁的夏娟和李晟曼&#xf…

IBM沃森为存储系统开发人员带来的启发

前一段时间&#xff0c;IBM 沃森参加了CBS的益智节目《危险边缘》(Jeopardy)&#xff0c;这是他在全国观众面前首次亮相。确切地说&#xff0c;站在中央舞台选手答题台后面的IBM沃森实际上 是不断闪烁的虚拟头像。尽管如此&#xff0c;摆在沃森面前的答题按钮却是如假包换的&am…

01Prism WPF 入门实战 - 项目准备

1.概要这一系列将进行PrismWPF技术的实战讲解。实战项目内容选型为Email邮件收发的客户端&#xff08;WeMail&#xff09;&#xff0c;项目结构简单方便大家理解。相关技术&#xff1a;C#、WPF、Prism软件开发环境&#xff1a;VS2019 、 .NET5 、 windows11需掌握技能&#xf…

redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

点击上方小伟后端笔记关注公众号每天阅读Java干货文章熟悉Redis的同学应该知道&#xff0c;Redis的每个Key都可以设置一个过期时间&#xff0c;当达到过期时间的时候&#xff0c;这个key就会被自动删除。在为key设置过期时间需要注意的事项1、 DEL/SET/GETSET等命令会清除过期时…

Hadoop学习系列之PageRank

昨晚上不想做其他的事&#xff0c;突然想起来好久都没更新博客了&#xff0c;shell也差不多学完了&#xff0c;只不过学习的时候都是只带着书出去了&#xff0c;改天总结总结。Hadoop么&#xff0c;黄宜华老师讲完了&#xff0c;自己也马马虎虎快学完了&#xff0c;也是没总结&…

您的屁股发热严重,请降温后使用。

▲ 点击查看不是坐在办公椅上的屁股都渴望自由&#xff0c;而是——最近天越来越热&#xff0c;屁股捂在椅子上&#xff0c;既不散热也不排汗&#xff0c;比戴口罩闷出痱子还难受&#xff0c;实在是坐不住。。最尴尬的就是站起来裤子时常黏在屁股缝里&#xff0c;难不成每次还要…

C# 正则表达式编写及验证方法

01—前言正则表达式应用很广泛&#xff0c;应该大多人都接触过了&#xff0c;这个语法规则既多又凌乱&#xff0c;每次用的时候都得重新看一遍语法&#xff0c;真的是让人头疼啊&#xff01;但是实际上我们并不要掌握很多的符号用法规则&#xff0c;牢记最常用的几个就能应付很…

Domino Web开发规则之二:DOMINO与开发相关的管理规范

1.服务器HTTP优化设置 调整活动线程数&#xff0c;HTTP服务器可以同时处理的请求数&#xff0c;而非连接数、会话数 单CPU服务器<64 多CPU服务器<80 并发运行Web代理 确保Web代理是线程安全的情况下&#xff0c;可以启用来提高性能。 服务器文档-> Internet协议 ->…

老师一定没有教!9个数学速算技巧!看到第1个就跪了!

全世界只有3.14 % 的人关注了寄语 与世界上的其他学科一样&#xff0c;数学也有自己的奇妙之处。由于各种各样的原因&#xff0c;老师没有将这些秘密告诉我们。下面就是一些有趣的数学技巧&#xff0c;看完后你也许会爱上这门学科。▼不管是几个1的平方&#xff0c;都是有规律…

愚蠢的领导才会用程序员祭天!!

“人非圣贤&#xff0c;孰能无过网络上频频流出程序员误删线上数据库&#xff0c;造成XX公司XX万损失的新闻&#xff0c;进而牵扯出“杀一个程序员祭天”的妙语&#xff0c;虽然杀一个程序员比杀一个进程要难很多&#xff0c;但也充满着讽刺的味道。程序员每天都往返于代码和服…

一般将来时语法课教案_速看,如何在考场写出一篇脱颖而出的教案

面试最重要的考试环节就是试讲&#xff0c;而想要进行一次优秀的表演&#xff08;试讲&#xff09;&#xff0c;则需要一个过硬的剧本&#xff08;教案&#xff09;&#xff0c;那我们如何写出一篇完美教案呢&#xff1f;今天上元教师就教给大家10分钟速写一份教案的方法&#…