谷歌身份validation:OAuth2不断返回'invalid_grant'

我开始在我的新应用程序上configurationGoogle日历。 我几乎做了一个谷歌开发人员( https://developers.google.com/google-apps/calendar/instantiate )显示的validation码的确切副本,但我不断收到以下错误:

提取OAuth2访问令牌时出错,消息:'invalid_grant'

我目前正在使用Fork-CMS( http://www.fork-cms.com ),一个年轻的CMS。 我正确地configuration了google-api-php-client的config.php文件。 (client-id,client-secret,redirect-uri,development key …),并且在google api的控制台上正确设置了redirect uri。 我的代码如下所示:

<?php /** * This is a widget with a calendar implementation. * * @package frontend * @subpackage events * * @author Michiel Vlaminck <michielvlaminck@gmail.com> */ class FrontendEventsWidgetCalendar extends FrontendBaseWidget { private $events = array(); private $authUrl = array(); /** * Execute the extra * * @return void */ public function execute() { // call parent parent::execute(); // load template $this->loadTemplate(); // get data $this->getData(); // parse $this->parse(); } /** * Get the data from Google Calendar * This method is only executed if the template isn't cached * * @return void */ private function getData() { require_once PATH_LIBRARY . '/external/google-api-php-client/src/apiClient.php'; require_once PATH_LIBRARY . '/external/google-api-php-client/src/contrib/apiCalendarService.php'; $client = new apiClient(); $service = new apiCalendarService($client); if (isset($_SESSION['oauth_access_token'])) { $client->setAccessToken($_SESSION['oauth_access_token']); } else { $token = $client->authenticate(); $_SESSION['oauth_access_token'] = $token; } if ($client->getAccessToken()) { $calId = FrontendEventsModel::getCalendarId((int) $this->data['id']); $calId = $calId[0]['calendar_id']; $events = $service->events->listEvents($calId); $this->events = $events['items']; $_SESSION['oauth_access_token'] = $client->getAccessToken(); } else { $this->authUrl = $client->createAuthUrl(); } } /** * Parse * * @return void */ private function parse() { $this->tpl->assign('events', $this->events); $this->tpl->assign('authUrl', $this->authUrl); } } ?> 

当我第一次打开这个小部件页面时,我被引导到谷歌来validation应用程序。 当我同意,我被redirect到我的应用程序,这就是我得到的点:

 apiAuthException » Main Message Error fetching OAuth2 access token, message: 'invalid_grant' File C:\wamp\www\Officevibes\library/external\google-api-php-client\src\auth\apiOAuth2.php Line 105 Date Thu, 05 Apr 2012 08:34:47 +0000 URL http://localhost/calendar?code=4/YPUpFklKvhEeTcMm4moRth3x49oe Referring URL (Unknown) Request Method GET User-agent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19 

您应该重新使用第一次成功validation后获得的访问令牌。 如果您的上一个令牌尚未过期,您将收到invalid_grant错误。 将其caching在某处,以便可以重复使用。

我有一个类似的问题,导致我的服务器上的时间不正确。 确保你的系统时钟是同步的。

转到您的Google API控制台( https://code.google.com/apis/console/ ),并在安装的应用程序的客户端ID下撤销您的客户端密码。

请务必使用新的客户端密码更新您的代码

  1. 转到security.google.com
  2. 撤销访问权限
  3. 再次访问身份validationurl
  4. 你现在会得到一个新的说法

如果您错误地尝试validation您的ID令牌 ,而不是您的访问令牌 ,您也会收到此错误。

所以不要像我一样 – 确保将正确的标记传递给您的代码!