4

この問題を何日もデバッグしてきましたが、これを修正するために他に何も考えられません。

エラー:

Fatal error: Uncaught exception 'Google_AuthException' with message 'Error refreshing the OAuth2 token, message: '{
  "error" : "invalid_grant"
}'' in /html/cms/php/google-api-php-client/src/auth/Google_OAuth2.php:279
Stack trace:
#0 /html/cms/php/google-api-php-client/src/auth/Google_OAuth2.php(256): Google_OAuth2->refreshTokenRequest(Array)
#1 /html/cms/php/google-api-php-client/src/auth/Google_OAuth2.php(209): Google_OAuth2->refreshTokenWithAssertion()
#2 /html/cms/php/google-api-php-client/src/service/Google_ServiceResource.php(166): Google_OAuth2->sign(Object(Google_HttpRequest))
#3 /html/cms/php/google-api-php-client/src/contrib/Google_CalendarService.php(154): Google_ServiceResource->__call('list', Array)
#4 /html/cms/php/google_calendar_sync.php(41): Google_CalendarListServiceResource->listCalendarList()
#5 {main}
  thrown in /html/cms/php/google-api-php-client/src/auth/Google_OAuth2.php on line 279

私のサーバーの時計は同期しています: 2 Jan 13:35:36 ntpdate[1214]: タイム サーバー 62.212.76.57 オフセット 0.003544 秒を調整します (62.212.76.57 は私の会社のタイム サーバーです)

Google API コンソールでサービス アカウントの開発者資格情報を 3 回確認しました (スクリーンショットはありましたが、アカウントが新しすぎるため使用できません :/)。また、カレンダー サービスのサブスクリプションも正常に完了しました (これで作成したスクリーンショットも使用できません)。

私のコード:

<?php

    require_once(dirname(__FILE__) . '/google-api-php-client/src/Google_Client.php');
    require_once(dirname(__FILE__) . '/google-api-php-client/src/contrib/Google_CalendarService.php');

    session_start();

    define('CLIENT_ID', 'XXXXXX510496.apps.googleusercontent.com');
    define('SERVICE_ACCOUNT_NAME', 'XXXXXX510496@developer.gserviceaccount.com');
    define('CALENDAR_ID', 'XXXXXXXXXXXXXXXXX');
    define('KEY_FILE', dirname(__FILE__) . '/private/XXXXXXXXXXXXXXXXXXXX881a845ed4e4d2d58eb1-privatekey.p12');

    $client = new Google_Client();

    if (isset($_SESSION['token'])) {
     $client->setAccessToken($_SESSION['token']);
    }

    $key = file_get_contents(KEY_FILE);
    $client->setClientId(CLIENT_ID);
    $client->setAssertionCredentials(new Google_AssertionCredentials(
      SERVICE_ACCOUNT_NAME,
      'https://www.google.com/calendar/feeds/' . CALENDAR_ID . '/private/full/',
      $key)
    );

    $service = new Google_CalendarService($client);

    $calendarList = $service->calendarList->listCalendarList();
    echo "<h1>Calendar List</h1><pre>" . print_r($calendarList, true) . "</pre>";

 ?>

私は完全にアイデアを使い果たしたので、どんな助けも大歓迎です!

4

1 に答える 1

0

行き詰まりを解消するのに役立つ可能性のあるドキュメントを投稿しました。

http://www.tqis.com/eloquency/googlecalendar.htm

于 2013-01-05T19:32:05.000 に答える