php获取qzonetoken,QQ一键登录实现
首先,登录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一键登录实现相关推荐
- Android webview实现QQ一键登录授权
Android webview实现QQ一键登录授权 最近公司要求的新需求,要实现webview中的的QQ登录,大脑没经过就习惯的百度,奈何找了两天的资料也没发现个完整的demo,只能自己写,好吧,还要 ...
- laravel实现第三方qq一键登录
首先composer安装依赖: composer require socialiteproviders/qq复制代码 注册服务提供者(同时注释掉原有的Socialite提供者): 'providers ...
- selenium实现模拟点击QQ一键登录
涉及到知识点: Xpath frame切换 分析 以彼岸桌面壁纸为例,爬取很多原图时需要用户登录(花钱才可以下载诸多原图,普通用户只可以一天只可以下载一次原图,在这里使用QQ一键登录全当练练手). 以 ...
- QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip
QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip 此插件是方便会员进行注册登录操作,为 站长 带来更多活跃会员 使用此插件要注意一下几点: 1.此插件使用前请到 ...
- uniapp中调用QQ一键登录实现方法
要在uniapp中实现QQ一键登录,主要步骤: 1.manifest.json的模块设置中,启用QQ登录,并填入appid 3.新建登录页 <template><view>正在 ...
- 织梦DEDECMS QQ一键登录插件返回空白解决方法
修改织梦网站时,遇到个QQ一键登录返回是空白的问题 找了好久没发现什么原因,最后才知道原因在于服务器, 因为腾讯OAuth2.0采用的是https协议进行数据请求,QQ一键登录插件采用curl拓展对数 ...
- php 一键登录插件,[免费]ZblogPHP QQ一键登录免费插件
先上背景:自从装了ZBlogPHP程序,一直在寻找QQ互联的插件,因为我懒得记密码!!!因为懒...所以就在某应用中心搜索,工夫不负有心人,找是找到了,,但是,,,但是价格不菲啊!!! ,,,作为一个 ...
- 使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册
在你的 App 中集成手机QQ一键授权(注册)登录功能,达到快速注册.快速登录功能 按照本教程的操作指引,预计5分钟即可帮你实现并掌握QQ登录的实现 申请开通QQ互联 https://connect. ...
- 微信qq一键登录php代码6,Laravel6实现第三方 微信登录
目前很多的网站中都会存在很多的交互功能,从而降低用户的操作难度,特此带来微信的第三方登录的项目实战功能开发.对于本实例中的开发内容,就不在使用原生的内容,而是直接使用别人写好的封装的类库. 1. 安装 ...
最新文章
- 实战 | 某小公司项目环境部署演变之路
- poj2195(最小费用流)
- 开源:这个来自清华的开源项目火爆 GitHub
- Python程序设计题解【蓝桥杯官网题库】 DAY2-IDLE与基础练习
- atitit.js浏览器环境下的全局异常捕获
- 查询oracle中用户的角色,oracle中用户角色的查询和授权
- springboot实现上传文件
- SpringMVC的请求-获得请求参数-自定义类型转换器
- 【Pytorch】X.view(-1)操作
- 六大场景下,模型分数如何应用?
- 需求工程:加强监理,规避风险(转载)续三
- 矩池云Jupyterlab支持download as pdf
- 21个演示展示强大的jQuery特效
- 查询同一组的最大最小值及明细
- 安卓接入高德地图3dmap黑屏问题解决
- a标签如何链接php文件路径,HTML的a标签href属性指定相对路径与绝对路径的用法讲解...
- 现在计算机上都有高速缓冲存储器,高速缓冲存储器(Cache.一般采用DRAM构成
- 移动端web及app设计尺寸
- 解决“Windows 平台 FIPS 验证的加密算法的一部分”问题
- Python 列表推导式的实用小技巧
热门文章
- eShopOnContainers 是一个基于微服务的.NET Core示例框架
- 新起点!新征程!微软技术俱乐部(苏州)成立大会暨微软技术交流会
- .net core实践系列之短信服务-为什么选择.net core(开篇)
- .NET Core多平台项目模板eShopOnContainers编译手记
- gRPC官方快速上手学习笔记(c#版)
- Entity Framework Core 2.0 特性介绍和使用指南
- 迁移传统.net 应用到.net core [视频]
- Redis在PHP项目中的应用
- Android Fragment 监听返回键
- Android之使用HandlerThread 以及如何退出总结