2

Google Apps アカウントを持っています。このアカウント内でユーザーのカレンダーを操作しようとしています。

  • プロジェクトを作成し、Calendar API サービスを追加し、API コンソールからサービス アカウント OAuth 2.0 クライアント ID を作成しました。
  • カレンダーを共有するために、カレンダー設定を使用して、生成されたメールアドレスをカレンダーに追加しました。
  • API アクセスを管理するために提案された手順に従いました。クライアント名は Google Apps アカウントが存在するドメインと同じで、スコープは「https://www.googleapis.com/auth/calendar」です。
  • さまざまな情報源を通じて、指定されたカレンダー イベントを読み取ってイベントを追加できるスクリプトをコンパイルすることができました。

私ができないことは、サブカレンダーを作成することです。https://developers.google.com/accounts/docs/OAuth2ServiceAccountを読み、「prn」を介して送信しようとしています。

これは、スクリプトが失敗する場所です。OAuth2 トークンの更新中にエラーが発生しました。メッセージ: '{ "error" : "access_denied" }'。prn を削除すると、すべてが「良好」になります。カレンダーは、開発者の電子メールの下に作成されます。コード:

<?
ini_set('display_errors', 1);

session_start();

require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_CalendarService.php';


const CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com';
const MY_EMAIL  = 'joe@domain.com';
const KEY_FILE = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12';

$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setApplicationName("My App");
$client->setAccessType('offline');
$client->setUseObjects(true);

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

$key = file_get_contents(KEY_FILE);

if (isset($_SESSION['token'])) {
    $client->setAccessToken($_SESSION['token']);
} else {
    $client->setAssertionCredentials(new Google_AssertionCredentials(
        SERVICE_ACCOUNT_NAME,
        array('https://www.googleapis.com/auth/calendar'),
        $key,
        'notasecret',
        'http://oauth.net/grant_type/jwt/1.0/bearer',
        MY_EMAIL)
    );  
}

// even tried setting the email here
$client->setClientId(MY_EMAIL);

$calendar = new Google_Calendar();
$calendar->setSummary('calendarx');
$calendar->setTimeZone('Australia/Brisbane');
$createdCalendar = $cal->calendars->insert($calendar);
?>

どんな助けでも大歓迎です。

4

1 に答える 1

1

ドメイン管理者が (クライアント ID に基づいて) アプリケーションでユーザーの偽装を有効にしている場合、prn フィールドはホストされたドメインでのみ機能します。

于 2013-08-27T19:21:56.117 に答える