PHP QQ 登录接口应用
来源:互联网 发布:淘宝店铺包邮图片 编辑:程序博客网 时间:2024/05/01 15:21
原始出处
http://nightwizard.blog.51cto.com/2181643/607938
//---------------------------<?phpclass 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"]); //下面是数据库操作业务}//---------------------------?>
- PHP QQ 登录接口应用
- PHP QQ 登录接口应用
- PHP QQ 登录接口应用
- QQ登录接口
- PHP模拟QQ登录
- CI框架 QQ接口(第三方登录接口PHP版)
- QQ开放平台QQ登录PHP代码
- QQ登录PHP OAuth示例
- QQ登录PHP OAuth示例
- qq 登录api php类
- PHP实现QQ快速登录
- PHP实现QQ快速登录
- 第三方QQ登录接口的申请及使用流程之web+php
- Android应用实现QQ登录
- 新浪、QQ OAuth2.0接口应用及简单DZ!NT登录整合
- 新浪、QQ OAuth2.0接口应用及简单DZ!NT登录整合
- PHP第三方登录—QQ登录
- QQ终于开发登录接口api
- POI实现读写Excel2007完整示例--每分钟约处理7000行数据
- 浮点数精度错误
- 在HTML中调用VC程序,使用CHtmlView
- Language Arts G-1 101 - phonics and alphabet
- chrome 浏览器被 SweetIM 绑定,如何删除
- PHP QQ 登录接口应用
- openvswitch
- android 广告平台,万普平台使用心得
- 关于函数的参数传递
- abap运行时间的优化
- NYOJ - 字符串替换
- Shane 对自由软件事业的评与述
- POJ_1631Bridging signals
- 调试出错:Unhandled exception in aa.exe:0xC0000005:Access Violation