修改 这个特殊错误来自我没有正确设置应用程序的错误。在这种情况下,即使代码现在有效,我也不知道是什么导致了这个问题,而且我需要深入了解内部工作以解决问题。 的端
我正在从Windows7操作系统命令行运行PHP的Google Drive API QuickStart示例代码。这是我正在运行的代码:
我可以通过获取授权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不应该需要更改。我不知道如何在这一点上做这项工作。
答案 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