您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

PHP QQ登录接口应用

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 04:51 点击:

//---------------------------
<?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 = "format($params)."&"."oauth_signature=".rawurlencode($sign>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 .= "appid."&oauth_token=".$result["oauth_token"]."&oauth_callback=".rawurlencode($callback);//die($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 = "format($params)."&"."oauth_signature=".rawurlencode($sign>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)

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • PHP测试
      • 十天学会php之第六天
      • 几种显示数据的方法的比较
      • 使用xmlhttp为网站增加域名查询功能
      • PHP+MYSQL+Javascript数据库查询结果的动态显示
      • 查找数组中指定键名的值
      • 用redis实现跨服务器session
      • 用新浪微博接口发送图片微博失败的原因
      • smarty局部缓存技术[源码分析]
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1