PHP QQ 登录接口应用

来源:互联网 发布:腾讯软件大全 编辑:程序博客网 时间:2024/05/01 09:13

QQ 登录申请网址:

http://connect.qq.com/manage/info?id=1

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nightwizard.blog.51cto.com/2181643/607938

//---------------------------<?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"]);//下面是数据库操作业务}//---------------------------?> 

原创粉丝点击