遇到“Google_Auth_Exception”错误,获取OAuth2访问令牌失败,错误信息为“invalid_client”。

3

我正在尝试通过Gmail API从Google获取邮件。

在收到令牌后,身份验证Google_Client时,我遇到了以下错误:

致命错误:未捕获的异常'Google_Auth_Exception',错误消息为“获取OAuth2访问令牌时出错,消息为:'invalid_client'”

我的代码很简单,使用google-api-php-client-master,代码如下:

require_once('config.php');
require_once 'autoload.php';
$client = new Google_Client();
$client->setScopes(array(
 'https://www.googleapis.com/auth/plus.login',
 'profile',
 'email',
 'openid',
 'https://www.googleapis.com/auth/gmail.readonly',
 'https://mail.google.com/',

));
$client->setApplicationName($config->social['google']->app_name);
$client->setClientId($config->social['google']->client_id);
$client->setClientSecret($config->social['google']->client_secret);
$client->setRedirectUri($config->social['google']->Redirect_URI);
$client->setDeveloperKey($config->social['google']->api_key); // API key
$gclient='';
print_r($_GET);
$token=new stdclass;
if(!isset( $_SESSION['google_token']))
{
$gclient=$client->authenticate($_GET['code']);//error occurs hare 
$_SESSION['gclient']=$gclient;
if($gclient)
{
$_SESSION['google_token'] = $client->getAccessToken();
}
print_r($gclient);

}

我已经多次检查了我的凭据,它们都是正确的。

有人可以帮我吗?


前往您的应用程序开发者控制台。在同意屏幕上确保产品名称和电子邮件已填写。 - Linda Lawton - DaImTo
所有都填写正确,重新生成客户端密钥后它正常工作,但在尝试列出消息时再次出现错误。$massages=listMessages($service, $user_info->email) ; 它显示 (403) 访问未配置。API 未启用您的项目,或者在 API 密钥上配置了每个 IP 或每个引荐人限制,并且请求不符合这些限制。请使用 Google 开发者控制台更新您的配置,我不明白它要求哪种配置。 - Swarna Sekhar Dhar
在开发者控制台中,转到API并启用Gmail-API和Google+ API。 - Linda Lawton - DaImTo
3个回答

16

我曾经遇到同样的问题,但解决方案非常简单且令人沮丧。

当您在Google开发者控制台的API凭据中复制“客户端密钥”时,他们会在“客户端密钥”后面加一个空格。一定要删除它!

$client_secret = "hf83nd93hd93j39dj9 ";<--

在我的情况下,没有空格... 应该是应用程序 API 中的某个配置错误。 - Swarna Sekhar Dhar

1
如Mario M.所解释的那样,在复制客户端秘钥时会多出一个空格,你必须确保正确处理它。
我也遇到了同样的错误——获取OAuth2访问令牌时发生错误,消息:'invalid_client',但在我的情况下是由于域名未经验证。因此,如果你正在为Web应用程序或类似的内容创建凭据,并收到相同的错误信息,则需要:
  1. 检查客户端秘钥末尾是否有额外的空格
  2. 确保你的域名已经通过验证

本地主机怎么样? - Harpreet Bhatia

0
在我的情况下,我必须设置客户端密钥文件。
$client->setAuthConfigFile(WWW_ROOT . 'files\json\client_secret_google_api.json');

这解决了我的问题。希望能帮到其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接