Beispiel #1
0
 /**
 * @param $code string Auth code returned by qq
 * @return array if success return access_token, expire_in and refresh_token
 *               if failed return error code and description
 *
     'access_token' => string '313F00C54AC512A7ED1C664EE198B615' (length=32)
     'expires_in' => string '7776000' (length=7)
     'refresh_token' => string 'A5D30D009A349AA8197C86DECEC77BD8' (length=32)
     'code' => int 0
 */
 public function getAccessToken($code = "")
 {
     if (empty($code) && empty($this->refreshToken)) {
         Logger::ERROR("Try to get access token, but neither code nor refresh token was empty.", "", "", "qq_sdk_err");
         return ['code' => -1, 'desc' => "neither code nor refresh token was empty."];
     }
     $url = "https://graph.qq.com/oauth2.0/token";
     $isRefresh = !empty($this->refreshToken);
     $params = ['grant_type' => $isRefresh ? 'refresh_token' : 'authorization_code', 'client_id' => $this->appId, 'client_secret' => $this->appKey, 'redirect_uri' => $this->callback];
     if ($isRefresh) {
         $params['refresh_token'] = $this->refreshToken;
     } else {
         $params['code'] = $code;
     }
     $response = @file_get_contents($url . "?" . http_build_query($params));
     $result = [];
     if (strpos($response, "callback") !== false) {
         $lpos = strpos($response, "(");
         $rpos = strrpos($response, ")");
         $response = substr($response, $lpos + 1, $rpos - $lpos - 1);
         $msg = json_decode($response);
         if (isset($msg->error)) {
             $result['code'] = $msg->error;
             $result['desc'] = $msg->error_description;
             return $result;
         }
     }
     parse_str($response, $result);
     $result['code'] = 0;
     $this->accessToken = $result['access_token'];
     $this->refreshToken = $result['refresh_token'];
     $result['expires_in'] += time();
     $user = self::getSelfInfo();
     if (!$user['openid']) {
         return $user;
     }
     $result['uid'] = $user['openid'];
     UserApi::saveAccessToken($result);
     return $result;
 }