php web qq第三方登录
官方api地址:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0
1.去qq互联上注册申请成为开发者,并创建一个应用获得appid,appkey
2.在需要QQ登录的页面加上qq小图标,并在图标外层a标签上加上 onclick='tologin()' 事件,底部加上script
<script>
function toLogin(){
//以下为按钮点击事件的逻辑。注意这里要重新打开窗口
//否则后面跳转到QQ登录,授权页面时会直接缩小当前浏览器的窗口,而不是打开新窗口
var A=window.open("/ext/qq_login/index.php","TencentLogin","width=450,height=320,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1");
}
</script>
3.下载sdk 官网下载地址:http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD
a.下载了sdk后,将sdk放到项目中,例如当前放在了根目录,sdk命名为qq_login
b.浏览器访问 yourdomain/qq_login/install/,进行安装配置
qq互联上配置应用的callback为 yourdomain/qq_login/callback.php,这里安装的配置也应该填 yourdomain/qq_login/callback.php
c.重命名或删除掉install
d.修改sdk根目录index.php 内容为
<?php
require_once("./API/qqConnectAPI.php");
$qc = new QC();
$qc->qq_login();
e.在sdk根目录即index.php同级目录建一个文件叫callback.php,callback.php即成功调用qq登录后执行的操作
4.登录成功,访问callback.php文件
登录成功时会跳转到你配置的callback中,url上会带有一个get请求的code参数
a.接收code参数,利用code参数和你的appid,appkey获取access_token
b.获取到的access_token即为用户唯一标识符,你就可以用来注册到自己数据库中了
<?php
session_start();
/**
* Step1:获取Authorization Code
* Step2:通过Authorization Code获取Access Token
* author: porter
*/
define("HOST_INFO",'http://'.$_SERVER['HTTP_HOST']);
$API_ID = "xx";
$API_KEY = "xx";
$code = $_GET['code'];
// 根据code获取access_token
// grant_type 必须 授权类型,在本步骤中,此值为“authorization_code”。
// client_id 必须 申请QQ登录成功后,分配给网站的appid。
// client_secret 必须 申请QQ登录成功后,分配给网站的appkey。
// code 必须 上一步返回的authorization code。
// 如果用户成功登录并授权,则会跳转到指定的回调地址,并在URL中带上Authorization Code。
// 例如,回调地址为www.qq.com/my.php,则跳转到:
// http://www.qq.com/my.php?code=520DD95263C1CFEA087******
// 注意此code会在10分钟内过期。
// redirect_uri 必须 与上面一步中传入的redirect_uri保持一致。
$url = "https://graph.qq.com/oauth2.0/token";
$url .= "?grant_type=authorization_code";
$url .= "&client_id=$API_ID";
$url .= "&client_secret=$API_KEY";
$url .= "&code=$code";
$url .= "&redirect_uri=http://test.www.xx.com/ext/qq_login/callback.php";
$resultStr = file_get_contents($url);
// 解析返回的数据
$resultArr = explode('&' , $resultStr);
$result = array();
foreach($resultArr as &$v){
list($key , $value) = explode('=' , $v);
$result[$key] = $value;
}
// 将返回结果中的access_token进行登录操作
$data['uuid'] = $result['access_token'];
$data['type'] = 'qq';
$data['s'] = 'asdf'; //用户模拟手机请求
$ch = curl_init (); // 启动一个CURL会话
curl_setopt($ch, CURLOPT_URL, HOST_INFO."/user/tlogin.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$return = curl_exec($ch);
curl_close($ch);
// 登录成功记录session
$return = json_decode($return , true);
if($return['status'] == 1){
$_SESSION['user'] = $return['data'];
}
header("Location:".HOST_INFO);
?>
可能出现的问题:
QQ登录时提示"redirect *** 100010"这样的:
你qq互联配置的callback与项目的callback不一样
在callback.php文件中登录成功保存了session,用header方法跳转页面,session无法传递:
在callback.php第一行写上 session_start();
php web qq第三方登录的更多相关文章
- web实现QQ第三方登录
开放平台-web实现QQ第三方登录 应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com ...
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...
- 【第三方登录】之QQ第三方登录
最近公司做了个网站,需要用到第三方登录的东西.有QQ第三方登录,微信第三方登录.先把QQ第三方登录的代码列一下吧. public partial class QQBack : System.Web.U ...
- QQ第三方登录
QQ第三方登录 在Android应用程序的开发过程中,很多时候需要加入用户登录/注册模块.除了自己动手设计登录界面并实现相应功能外,现在还可以借助百度.腾讯等开发者平台提供的第三方账号登录模块.最近研 ...
- PHP实现QQ第三方登录
PHP实现QQ第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博 ...
- 利用JS_SDK实现QQ第三方登录
前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. ...
- Android 实现QQ第三方登录
Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...
- Android应用之——最新版本号SDK V2.4实现QQ第三方登录
为什么要写这篇博客呢?由于.我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了.要么就是说的非常不清楚.非常罗嗦.并且非常多都是一些小demo,不是什么实例.甚至连腾讯官方的文档都有这个问 ...
- Django项目中使用qq第三方登录。
使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...
随机推荐
- abiword rtf 解析
目前为止,代码跟进,知道是这个地方进行文件解析的 T_Error IE_Imp_RTF::importFile(const char * szFilename)
- #include<iostream>与#include<iostream.h>的区别
转载于祝长洋的BLOG:http://blog.sina.com.cn/s/blog_514b5f600100ayks.h ...
- a:hover和a:visited书写顺序的重要性
2a:hover和a:visited书写顺序的重要性今天在用a:hover属性的时候发现一个奇怪的问题,同一个页面里面有些链接的a:hover效果不能正常表现出来.链接的代码是一样,没有使用其它样式固 ...
- 有空可以对C#尝一下鲜,WCF看上去很诱人(跨进程、跨机器、跨子网,跨企业网乃至跨Internet的分布式服务)
说道底不还是要借助NGNIX实现,PHP自身呢?C#的WCF可以脱离IIS就可以实现跨进程.跨机器.跨子网,跨企业网乃至跨Internet的分布式服务,宿主可以是IIS,WinForm,WPF, Wi ...
- Hdu1384-Intervals(差分约束)
Problem Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.Wr ...
- Android应用开发学习之Toast消息提示框
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文我们来看Toast消息提示框的用法.使用Toast消息提示框一般有三个步骤: 1. 创建一个Toast对象.可 ...
- 谷歌Cartographer学习(2)-原理阐述与源码解析
最近终于写完了毕业论文.想仔细研究下Cartographer.无奈自己学识有限,先看下网上大牛的解析,作一个汇总. 一.泡泡机器人原创专栏-cartographer理论及实践浅析 http://mp. ...
- [RxJS] Using Observable.create for fine-grained control
Sometimes, the helper methods that RxJS ships with such as fromEvent, fromPromise etc don't always p ...
- last与lastlog命令
lastlog 列出所有用户最后登录的时间和登录终端的地址,如果此用户从来没有登录,则显示:**Never logged in**last 列出用户所有的登录时间和登录终端的地址
- 前端--关于CSS
CSS全名层叠样式表,层叠的含义有三个:1.按照特殊性的高低,特殊性高的覆盖特殊性低的样式声明:2.不同属性的样式声明要合并:3.后出现的相同的样式声明覆盖先出现的.所以要改变样式的优先级也有三种方法 ...