//---------------------------
<?php 
class qzone
{
var $appid = "appid";//换成您的
var $appkey = "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"]);

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

QQ开放平台QQ登录PHP代码相关推荐

  1. QQ开放平台 – QQ第三方登录

    本页目录 开始申请 申请通过后续 注意事项: 开始申请 接入QQ第一步需要在:QQ互联官方网站:https://connect.qq.com/index.html 申请开发者认证. 点击创建应用 按照 ...

  2. qq开放平台申请步骤_实现开放式沟通的8个步骤

    qq开放平台申请步骤 开放组织的基本原则是开放交流模型 . 开放式沟通体现了组织所有关系中的信任和透明性. 这意味着个人贡献者将参与组织决策并与之合作,公开讨论,不仅欢迎反馈,还应采取行动使所有人受益 ...

  3. 腾讯微博开放平台 android登录界面显示为pc登录界面 解决方案

    腾讯微博开放平台的登录授权一直没有官方的sdk,下载的sdk开始正常使用无问题,但是某天,我们用htc g10  android2.3(有刷过机)使用腾讯微博账号登录,发现登录界面显示为pc上的授权页 ...

  4. 腾讯开放平台-QQ互联认证-未提交审核

    背景 由于自己的应用希望接入 联合登录,于是找到了 腾讯开放平台 https://open.tencent.com/,发现 微信登录 要求比较高,QQ登录 比较容易些. 在 QQ互联 提交资料以后,就 ...

  5. html5游戏开放平台,QQ游戏

    注册开发者账号 1.   进入//open.qq.com/reg,按提示步骤注册平台. 2.填写资料.验证邮箱.完成注册. 注册开发者完成,登录//open.qq.com开放平台,点击应用接入 1.接 ...

  6. 成为腾讯开发者——如何使用QQ开放平台和微信开放平台

    最近的项目有这样一个需求,需要分享链接到QQ和微信中,这样iOS中应该怎样实现呢.方法也许有很多,但是我选择的是使用第三方API来实现这个功能--ShareSDK.这就需要我们先去申请成为QQ开发者和 ...

  7. paypal中授权返回_微信开放平台授权登录流程详解

    最近在工作中用到了一些微信开放平台授权第三方登录,来获取用户基本信息的操作.看了一下微信给出的官方文档,写的已经很详细了,这里按照自己的步骤进行了一下总结,并附带了一些示例,方便大家理解. 微信公众号 ...

  8. 微信开放平台授权登录流程详解

    原创 Dr Hydra 码农参上 2020-09-13 11:00 收录于合集 #微信开发技术3个 #java实战34个 最近在工作中用到了一些微信开放平台授权第三方登录,来获取用户基本信息的操作.看 ...

  9. 抖音开放平台授权登录PHP,5分钟快速接入抖音开放平台,获取我的抖音粉丝列表,还有更多实用API...

    注:图片来自抖音开放平台 极速体验 即便你还没有抖音开放平台的账号,也可以极速体验一下抖音授权和接口调用的效果. 进入果创云开放平台-会员-抖音用户-抖音扫码授权. 链接:http://open.ye ...

最新文章

  1. matlab 在图片上绘制热力图_python可视化之seaborn——热力图
  2. 调用函数,整数逆序输出
  3. Hibernate ORM框架——连接池相关
  4. 汇编 --- EXE文件 的程序的加载过程
  5. Eclipse的PyDev插件安装及解决安装后找不到的问题
  6. 新公司入职56天后的面谈小结
  7. 解决企业IT三大运维管理难题
  8. 虚拟机,samba服务:路径太深,无法复制
  9. DBUtil使用步骤
  10. Himall商城普通帮助类(二)
  11. 安装使用TortoiseSVN + google code
  12. Roundcube开启用户自助更改密码功能
  13. Javascript之宿主环境
  14. 计算机行知行业英语教材,“三教”改革的先声——《行知行业英语》
  15. 国内PHP开源建站程序
  16. ftp下载工具绿色版,网络上难找的绿色版ftp下载工具
  17. Linux-Shell(六)
  18. 广州计算机专业分数线,广东人工智能专业分数线多少
  19. ISO14001环境管理体系认证所需材料
  20. JavaWeb框架设计之菜单设计

热门文章

  1. “豪”秀上演——莱佛士学生作品精彩亮相施华蔻发布会
  2. 【NOIP2012提高组】开车旅行
  3. 最详细的Android图片压缩攻略
  4. DDD 实战 (11):冲刺 1 代码 TDD 实现之道
  5. 汉字如何应用在平面设计中
  6. STC15 串口一 接收 发送 基本程序
  7. 51单片机c语言相位计,相位计.doc
  8. [JS] canvas 详解
  9. 在MATLAB环境下使用深度学习网络DeepLabV3+进行语义分割(云图分割)
  10. css图片横向压缩,【css样式生成 图片合并压缩工具】Sprite,你值得拥有