0

GoogleカレンダーAPIが不十分なアクセス許可のエラーを示しています。サービスアカウントの問題を含むGoogleカレンダーAPI、不十分なアクセス許可

致命的なエラー:キャッチされない例外メッセージと「Google_Service_Exception」「GET https://www.googleapis.com/calendar/v3/users/me/calendarListの呼び出しエラー:(403)十分な権限」

<?php 

    session_start(); 
    include_once "templates/base.php"; 

    require_once realpath(dirname(__FILE__)'/../src/Google/autoload.php'); 

    $client_id = '110224493213908548123'; //Client ID .apps.googleusercontent.com 
    $service_account_name = '[email protected]'; //Email Address 
    $key_file_location = 'test.p12'; //key.p12 

    $client = new Google_Client(); 
    $client->setApplicationName("Easycarcare"); 
    $client->addScope("https://www.googleapis.com/auth/calendar"); 
    //$client->addScope("https://www.googleapis.com/auth/calendar.readonly"); 
    $service = new Google_Service_Calendar($client); 



    if (isset($_SESSION['service_token'])) { 
    $client->setAccessToken($_SESSION['service_token']); 
    } 
    $key = file_get_contents($key_file_location); 
    $cred = new Google_Auth_AssertionCredentials(
     $service_account_name, 
     array('https://www.googleapis.com/auth/calendar'), 
     $key 
); 

    $client->setAssertionCredentials($cred); 
    if ($client->getAuth()->isAccessTokenExpired()) { 
    $client->getAuth()->refreshTokenWithAssertion($cred); 
    } 
    $_SESSION['service_token'] = $client->getAccessToken(); 


    $calendarList = $service->calendarList->listCalendarList(); 

    while(true) { 
    foreach ($calendarList->getItems() as $calendarListEntry) { 
     echo $calendarListEntry->getSummary(); 
    } 
    $pageToken = $calendarList->getNextPageToken(); 
    if ($pageToken) { 
     $optParams = array('pageToken' => $pageToken); 
     $calendarList = $service->calendarList->listCalendarList($optParams); 
    } else { 
     break; 
    } 
    } 
+0

あなたに次の認証サンプルはありますか?あなたは私が見ることができるどこにでもサービスアカウントを適用していません。 https://github.com/google/google-api-php-client/blob/master/examples/service-account.phpヒントP12ファイルではなくJsonサービスアカウントのキーファイルを取得 – DaImTo

+0

@DaImTo私はp12キーを使用しています本のapiとそれは働いていた。なぜこれはカレンダーでは機能しないのですか –

+0

デフォルトでは、サービスアカウントには最初にカレンダーを追加する必要があるため、カレンダーはありません。またはあなたの1人にアクセス権を与えてください。いずれの方法でも、カレンダーリストは、サービスアカウントのためのかなり無駄なIMOであり、唯一の視覚的なものであり、サービスアカウントのGoogleカレンダーアカウントのビジュアルウェブビューはありません。 – DaImTo

答えて

0

でのサービスアカウントは、あなたではないことを覚えておく必要があります。サービスアカウントはダミーのユーザーです。それは独自のGoogleカレンダーアカウント、独自のGoogleドライブアカウントとおそらくより多くの束を持っています。

最初にcreate a calendarまでカレンダーリストのデータは表示されず、その後calendar listに追加されます。

カレンダーリストは、ユーザーがアクセスできるカレンダーのリストではなく、左下隅のWebビューに表示されます。だからあなたが個人的なカレンダーの1つをあなたのサービスアカウントと共有していても、それをプログラムリストに追加するまでサービスカレンダーリストには表示されません。

回答:サービスアカウントにデータがないため、データが表示されません。

0

あなたのGoogleアカウントに電子メールID「[email protected]」を追加しましたか?

これは、このサービスアカウントにカレンダーAPIのアクセス許可が十分でないことが原因である可能性があります。

関連する問題