Exemplo n.º 1
0
 /**
  * 处理授权回调函数
  * 
  * @return $res_array array 授权码,令牌与openid组成的数组,开发者可以将其写入数据库。
  * 
  */
 public static function handleAuthCallback($access_token_uri = QQAUTH_ACCESS_TOKEN_DOMAIN, $openid_uri = QQAUTH_OPENID_DOMAIN)
 {
     if ($_SESSION['state'] !== $_REQUEST['state']) {
         throw new QQAuth_Exception('CSRF attacks!', '9999999');
     }
     if (self::isAuth()) {
         // 不是从验证服务器转来的请求
         return;
     }
     $res_array = array();
     $code = isset($_GET['code']) ? $_GET['code'] : '';
     if ($code == '') {
         throw new QQAuth_Exception('Auth failure!', '9999998');
     }
     $res_array['auth_code'] = $_SESSION['QQAUTH_AUTHCODE'] = $code;
     $state = 'test';
     $token_params = array('grant_type' => 'authorization_code', 'client_id' => QQAUTH_APP_ID, 'client_secret' => QQAUTH_APP_KEY, 'code' => $code, 'state' => $state, 'redirect_uri' => $_SESSION['QQAUTH_REDIRECT_URI']);
     $request_access_token_url = $access_token_uri . QQAuth_Util::composeParams($token_params);
     $response = QQAuth_Util::doGet($request_access_token_url);
     $msg = QQAuth_Util::parseJSONP($response);
     if (isset($msg->error)) {
         echo "<h3>error:</h3>" . $msg->error;
         echo "<h3>msg  :</h3>" . $msg->error_description;
         exit;
     }
     $params = array();
     parse_str($response, $params);
     //debug
     //print_r($params);
     //set access token to session
     $res_array['access_token'] = $_SESSION["QQAUTH_ACCESS_TOKEN"] = $params["access_token"];
     $graph_url = $openid_uri . 'access_token=' . $_SESSION['QQAUTH_ACCESS_TOKEN'];
     $str = QQAuth_Util::doGet($graph_url);
     $user = QQAuth_Util::parseJSONP($str);
     if (isset($user->error)) {
         echo "<h3>error:</h3>" . $user->error;
         echo "<h3>msg  :</h3>" . $user->error_description;
         exit;
     }
     $res_array['openid'] = $_SESSION["QQAUTH_OPENID"] = $user->openid;
     //debug
     //echo("Hello " . $user->openid);
     return $res_array;
 }
Exemplo n.º 2
0
 /**
  * 发起请求的方法,统一发送接口,并处理不成功的响应(抛出异常)
  * 
  * @return $ret array 服务器端响应
  */
 public static function doRequest($url, $data, $method = 'post')
 {
     if ($method == 'post') {
         // 适用于提交数据到远程服务器
         // 发起请求
         $ret = QQAuth_Util::doPost($url, $data);
     } else {
         // 适用于从远程服务器拉取数据
         // 构造url参数
         $url = $url . '?' . QQAuth_Util::composeParams($data);
         // 发起请求
         $info = QQAuth_Util::doGet($url);
         // 解析json
         $ret = json_decode($info, true);
     }
     if (is_null($ret) || $ret['ret'] > 0) {
         $msg = "Error occured when requesting: {$url}\n";
         $msg .= "with params:" . print_r($data, true);
         $msg .= "Response: " . print_r($info, true);
         // 抛出异常
         throw new QQAuth_Exception($msg, $ret['ret']);
     }
     return $ret;
 }