原因:第115行错误了Google_OAuth2.php

时间:2014-01-16 21:01:46

标签: php google-drive-api google-drive-realtime-api

修改 这个特殊错误来自我没有正确设置应用程序的错误。在这种情况下,即使代码现在有效,我也不知道是什么导致了这个问题,而且我需要深入了解内部工作以解决问题。 的

我正在从Windows7操作系统命令行运行PHP的Google Drive API QuickStart示例代码。这是我正在运行的代码:

Google Drive API Quick Start

我可以通过获取授权URL,成功返回我的访问令牌。但是在输入访问令牌后,Google提供的`Google_OAuth2.php文件出现了问题。

这是一个更完整的错误消息:

  

致命错误:

     

未捕获的异常'Google_AuthException',并显示错误提取错误   OAuth2访问令牌,

     

消息:'invalid_request''   C:\ google-api-php-client \ src \ auth \ Google_OAuth2.php:115堆栈跟踪:

     

#0 C:\ google-api-php-client \ src \ Google_Client.php(127):   Google_OAuth2-> authenticate(数组,'4 / HW2t_MZIxatq6 ......')

     

#1 C:\ Users \ Gigabyte \ MyWebsite \ Take_Validation.php(10):   Google_Client-> authenticate('4 / HW2t_MZIxatq6 ...')

     抛出#p>#2 {main}   第115行的C:\ google-api-php-client \ src \ auth \ Google_OAuth2.php

这是Google_OAuth2.php文件代码的一部分:第115行是最后一个语句throw new Google_AuthException

  /**
   * @param $service
   * @param string|null $code
   * @throws Google_AuthException
   * @return string
   */
  public function authenticate($service, $code = null) {
    if (!$code && isset($_GET['code'])) {
      $code = $_GET['code'];
    }

    if ($code) {
      // We got here from the redirect from a successful authorization grant, fetch the access token
      $request = Google_Client::$io->makeRequest(new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), array(
          'code' => $code,
          'grant_type' => 'authorization_code',
          'redirect_uri' => $this->redirectUri,
          'client_id' => $this->clientId,
          'client_secret' => $this->clientSecret
      )));

      if ($request->getResponseHttpCode() == 200) {
        $this->setAccessToken($request->getResponseBody());
        $this->token['created'] = time();
        return $this->getAccessToken();
      } else {
        $response = $request->getResponseBody();
        $decodedResponse = json_decode($response, true);
        if ($decodedResponse != null && $decodedResponse['error']) {
          $response = $decodedResponse['error'];
        }
        throw new Google_AuthException("Error fetching OAuth2 access token, message: '$response'", $request->getResponseHttpCode());
      }
    }

显然错误发生在第115行之前。第115行正在打印出之前某处发生错误。我不知道这是代码,还是我做错了。我知道每次输入新的URL授权请求时,我都会收到不同的访问代码。我的客户端密码和客户端ID不应该需要更改。我不知道如何在这一点上做这项工作。

1 个答案:

答案 0 :(得分:1)

我终于能够从Google获取示例代码来运行。我认为问题是我使用了错误的客户端ID和客户端密钥。好吧,实际上我一直使用错误的Client ID Credential应用程序类型。我想我使用web application作为installed application。嗯,我很高兴这是我的错误,而不是API的问题。 Native Application适用于Installed Application。我猜这些术语可以互换使用。 Installed Application用于从Command Line运行PHP。我注意到的另一件事是,当创建Native Application客户端ID时,您无法更改重定向URI。它们会自动设置为:

urn:ietf:wg:oauth:2.0:oob
http://localhost