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


原创粉丝点击