//---------------------------
<?php 
class qzone
{
var $appid = "***********";//换成您的
var $appkey = "**********";//换成您的

//除去数组中的空值和签名模式
function filter($parameter) 
{
$para = array();
while (list ($key, $val) = each ($parameter)) 
{
if($key == "sign" || $key == "sign_type" || $val == "")
{
continue;
}
else
{
$para[$key] = $parameter[$key];
}
}
return $para;
}

/**
* 生成请求代码
* @param String $callback 回调地址
*/
function request($callback = '')
{
//必要参数,不要随便更改!!
$params = array();
$params["oauth_version"] = "1.0";
$params["oauth_signature_method"] = "HMAC-SHA1";
$params["oauth_timestamp"] = time();
$params["oauth_nonce"] = mt_rand();
$params["oauth_consumer_key"] = $this->appid;

$sign = $this->sign($params, "GET"."&".rawurlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token")."&", $this->appkey . '&');

$url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token?".$this->format($params)."&"."oauth_signature=".rawurlencode($sign);

$request = file_get_contents($url);//print_r($url);print_r($request);die;

$result = array();

parse_str($request, $result);

if (!isset($result['oauth_token']))
{
//错误返回输出
die();
}

$_SESSION["qq_token"] = $result["oauth_token"];
$_SESSION["qq_secret"] = $result["oauth_token_secret"];

//302跳转到授权页面
$redirect .= "http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize?oauth_consumer_key=".$this->appid."&oauth_token=".$result["oauth_token"]."&oauth_callback=".rawurlencode($callback);//die($redirect);
header("Location:$redirect");
}

/**
* 响应操作
*/
function respond()
{
$params = array();
$params["oauth_version"] = "1.0";
$params["oauth_signature_method"] = "HMAC-SHA1";
$params["oauth_timestamp"] = time();
$params["oauth_nonce"] = mt_rand();
$params["oauth_consumer_key"] = $this->appid;
$params["oauth_token"] = $_SESSION["qq_token"];
$params["oauth_vericode"] = $_REQUEST["oauth_vericode"];

//echo "sig:$sig/n";
//echo "str:$str/n";

$sign = $this->sign($params, "GET"."&".rawurlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token")."&", $this->appkey. '&' . $_SESSION["qq_secret"]);

$url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token?".$this->format($params)."&"."oauth_signature=".rawurlencode($sign);

$request = file_get_contents($url);

$result = array();

parse_str($request, $result);

if (isset($result["error_code"]))
{
return false;
}

//验证签名
$key = $this->appkey;
$str = $_REQUEST["openid"] . trim($_REQUEST["timestamp"]);

if ($_REQUEST["oauth_signature"] != $this->sign(array(), $str, $key))
{
return false;
}

$_SESSION["qq_token"] = $result["oauth_token"];
$_SESSION["qq_secret"] = $result["oauth_token_secret"]; 
$_SESSION["qq_openid"] = $result["openid"];

return true;
}

//链接字符串
function format($parameter)
{
$parameter = $this->filter($parameter);

ksort($parameter);
reset($parameter);

$params = '';
foreach ($parameter AS $key => $val)
{
$params .= "$key=$val&";
}

$params = substr($params, 0, -1);
return $params;
}

function sign($parameter, $source, $key)
{
$params = $source . rawurlencode($this->format($parameter));
//$key = $this->appkey . '&' . $secret;
$sign = "";
if (function_exists('hash_hmac'))
{
$sign = base64_encode(hash_hmac("sha1", $params, $key, true));
}
else
{
$blocksize = 64;
$hashfunc = 'sha1';
if (strlen($key) > $blocksize)
{
$key = pack('H*', $hashfunc($key));
}
$key = str_pad($key,$blocksize,chr(0x00));
$ipad = str_repeat(chr(0x36),$blocksize);
$opad = str_repeat(chr(0x5c),$blocksize);
$hmac = pack(
'H*',$hashfunc(
($key^$opad).pack(
'H*',$hashfunc(
($key^$ipad).$params
)
)
)
);
$sign = base64_encode($hmac);
}

return $sign;
}

/**
* 远程获取数据
* $url 指定URL完整路径地址
* @param $input_charset 编码格式。默认值:空值
* @param $time_out 超时时间。默认值:60
* return 远程输出的数据
*/
function getHttpRequest($url, $access_token, $access_token_secret, $openid)
{
$sigstr = "GET"."&".rawurlencode("$url")."&";

//必要参数, 不要随便更改!!
$params = $_GET;
$params["oauth_version"] = "1.0";
$params["oauth_signature_method"] = "HMAC-SHA1";
$params["oauth_timestamp"] = time();
$params["oauth_nonce"] = mt_rand();
$params["oauth_consumer_key"] = $this->appid;
$params["oauth_token"] = $access_token;
$params["openid"] = $openid;
unset($params["oauth_signature"]);

$sign = $this->sign($params, "GET"."&".rawurlencode("$url")."&", $this->appkey . '&' . $_SESSION["qq_secret"]);

$url = $url."?".$this->format($params)."&"."oauth_signature=".rawurlencode($sign);

$result = file_get_contents($url);

return json_decode(str_replace(array("/n", "/t"), '', $result), true);
}
}

//---------------------------
?>

使用方法
请求代码
<?php 
//---------------------------
//请求
$qzone = new qzone;
$qzone->request('域名/qzone/login');
//---------------------------
?>
接受代码
<?php 
//---------------------------
//接收
if ($qzone->respond())
{
//如果成功,获取用户信息
$result = $qq->getHttpRequest("http://openapi.qzone.qq.com/user/get_user_info", $_SESSION["qq_token"], $_SESSION["qq_secret"], $_SESSION["qq_openid"]);

//下面是数据库操作业务
}
//---------------------------
?>

转载于:https://blog.51cto.com/nightwizard/607938

PHP QQ 登录接口应用相关推荐

  1. QQ登录接口申请流程(全面)

    QQ登录第三方接口申请流程 前言介绍 相关流程 最后结语 前言介绍 Web项目的用户登录,怎么申请QQ登录接口?流程如下! 相关流程 进入QQ互联官网 登录QQ,完善开发者信息 我是分割线 我是分割线 ...

  2. 安卓应用调用QQ登录接口

    安卓应用调用QQ登录接口 注册成为开发者并提交APP审核 先在QQ互联网站注册成为开发者,进行邮箱验证 此时你填写完信息后只是保存到腾讯服务器了,而没有提交审核,你个人信息状态显示未提交审核,提交审核 ...

  3. qzone.class.php,PHP QQ登录接口应用_PHP教程 - str_repeat

    ...后面保留的位数 * @param string $mode * @return mixed */function _str_repeat($str=null, $start = 4, $end ...

  4. java qq登录接口_java server qq第三方登录接口

    qqUtil类 public class QQUtils { /** * 利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 * @param request * @ ...

  5. [bhpyg] QQ互联接口 ,第三方帐号登录

    1.介绍 现在很多网站都集成了第三方帐号登录的功能,比如QQ登录.微信登录.微博登录. 使用第三方帐号登录目的,简化用户注册的流程,实现快速的注册登录. 第三方登录基本流程:①跳转到第三方认证页面 ② ...

  6. PHP调用QQ互联接口实现QQ登录网站

    调用QQ登录接口,首先要到QQ互联完善开发者认证信息,并通过审核,然后创建一个网站应用,获得APP ID和APP Key,通过审核后即可调用基本接口get_user_info(获得用户信息),实现QQ ...

  7. php新浪微博 登录接口文档,qq登录,新浪微博登录接口申请过程中遇到的问题

    接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...

  8. QQ登录第三方接口研究(1)----协议要点

    此文内容摘抄自QQ登录的协议,因为要写QQ登录的第三方接口,所以第一件事就是认真研究协议,所以把重点和要点摘抄出来了.基本是按原文写的,不过有些地方是按个人理解写的,所以如果真要做这方面的接口,还是到 ...

  9. qq 新浪微博 第三方登录 api php,qq登录,新浪微博登录接口申请过程中遇到的问题...

    1,qq登录接口申请 申请地址是:http://connect.opensns.qq.com/,登录进去后,点击右上方的登录.然后填写信息就行了. 我遇到的问题是在域名审核时,域名审核就是不通过,没办 ...

最新文章

  1. AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie
  2. 【贪心】Google Code Jam Round 1A 2018 Waffle Choppers
  3. 《机器学习》 周志华学习笔记第七章 贝叶斯分类器(课后习题)python 实现
  4. docker 导出堆栈信息.hprof_JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用...
  5. Android学习之简单地使用碎片
  6. IBM MQ 使用指南
  7. php POST,HTTP_RAW_POST_DATA, and php://input
  8. 机器学习笔记(七):线性回归 | 凌云时刻
  9. Raki的读paper小记:SimCSE: Simple Contrastive Learning of Sentence Embeddings
  10. 【转】复制网页内容三招
  11. php 递归函数 示例,php递归函数使用示例详解
  12. UE使用EditorUtilityWidget完成简单的编辑器内工具
  13. silvaco学习之收敛
  14. Camera 图像处理原理分析- 色彩篇 一
  15. java获取useragent_Java获取访问者的userAgent,系统和浏览器版本
  16. VMware Workstation安装Win7系统
  17. 中心计算机集中控制方式必须方式,「1」专科-8707信息技术与信息管理
  18. JNI和NKD入门系列二,mac环境下配置NDk,并在android studio上进行JNI开发
  19. 头歌:键盘输入与屏幕输出练习1
  20. Sort_排序代码集合汇总

热门文章

  1. 聊聊数据挖掘竞赛中的套路与深度学习的局限
  2. 闽台“物联网+”产业融合方兴未艾
  3. 【Nginx入门系列】第六章 Nginx+tomcat集群负载均衡部署
  4. FormsAuthentication详解
  5. Use PowerShell to Replace netdom Commands to Join the Domain
  6. vm虚拟机linux磁盘空间不足,手动扩大
  7. 刘宇凡:数字让切糕与电商溅起涟漪
  8. Asp.net Mvc问题索引
  9. python内置数据结构之str
  10. keepalived+LVS实现负载均衡集群