新しいアプリケーションでGoogleカレンダーの設定を始めました。 Google開発者( https://developers.google.com/google-apps/calendar/instantiate )に表示される認証コードの正確なコピーを作成しましたが、次のエラーが発生します:
OAuth2アクセストークンのフェッチ中にエラーが発生しました、メッセージ: 'invalid_grant'
私は現在、Fork-CMS( http://www.fork-cms.com )、若いlightweigth CMSを使用しています。 google-api-php-clientのconfig.phpファイルを正しく設定しました。 (クライアントID、クライアントシークレット、リダイレクトURI、開発キーなど)およびリダイレクトURIがGoogle APIのコンソールに正しく設定されています。私のコードは次のようになります:
<?php
/**
* This is a widget with a calendar implementation.
*
* @package frontend
* @subpackage events
*
* @author Michiel Vlaminck <[email protected]>
*/
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);
}
}
?>
このウィジェットページを初めて開くと、アプリケーションを認証するためにgoogleにリダイレクトされます。同意すると、自分のアプリケーションにリダイレクトされ、それが私が得ているポイントです。
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
最初の認証が成功した後に取得したアクセストークンを再利用する必要があります。 invalid_grant
以前のトークンの有効期限がまだ切れていない場合はエラー。どこかにキャッシュして、再利用できるようにします。
サーバーの時刻が正しくないために、同様の問題が発生していました。システムクロックが同期されていることを確認します。
Google API Console( https://code.google.com/apis/console/ )に移動し、インストールされているアプリケーションのクライアントIDでクライアントシークレットを取り消します。
また、新しいクライアントシークレットを使用してコードを更新してください。
アクセストークンではなく誤ってIDトークンを認証しようとした場合にも、このエラーが表示されます。
だから私のようになってはいけません-正しいトークンをコードに渡してください!
同様の問題がありました。 「invalid_grant」の問題は、トークンに関連して発生するすべてのエラーのプレースホルダーであることです。私は this の記事が本当に役立つことがわかりました。