6

サービス アカウントから Google カレンダーで新しいイベントを作成したいと考えています。すべてのカレンダーに正しくアクセスしてリストを印刷できます。しかし、新しいイベントを作成したい場合、応答は 403 Forbidden です。

私のコード:

require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_CalendarService.php';

session_start();

const CLIENT_ID = 'XXXXXXXXXX.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'XXXXXXXXXXXX@developer.gserviceaccount.com';

const KEY_FILE = 'google_src/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-privatekey.p12';

$client = new Google_Client();
$client->setApplicationName("APP_NAME");

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/MY_CALENDAR_ID/private/full/',
  $key)
);

$client->setClientId(CLIENT_ID);
$cal = new Google_CalendarService($client);
$event = new Google_Event();
$event->setSummary('Bon dia pel matí!');
$event->setLocation('Somewhere');
$start = new Google_EventDateTime();
$start->setDateTime('2012-08-06T10:00:00.000-07:00');
$event->setStart($start);
$end = new Google_EventDateTime();
$end->setDateTime('2012-09-06T10:25:00.000-07:00');
$event->setEnd($end);

$createdEvent = $cal->events->insert(CALENDAR_NAME, $event);

そしてサーバーの応答:

(403) Forbidden

何か案は?たぶん他のスコープ、または編集イベントを許可します(これをどこで設定できるかわかりません、そして私はそれを検索しました、約束します)

もちろん、私のカレンダーは公開カレンダーです。

どんな助けでも大歓迎です:)

ありがとう!

4

1 に答える 1

14

私はそれを解決しましたが、問題はコードではなく、正常に動作します。

問題はカレンダーの共有でした。私が知らなかった何か。

サービス アカウントからカレンダーの予定を編集できるようにするには、Google API コンソールで行うすべての手順が不十分です。カレンダーの構成 (カレンダーの構成 -> [このカレンダーを共有]) から、Google に指定されたメール アカウントに許可を与える必要があります。 API コンソール (メールアドレス)。

ビジネス アカウントの場合、これは問題になる可能性があるため、アカウント管理者に連絡する必要があります。

ここに示すコードは正しく動作するので、誰かの役に立てば幸いです。Google Api クライアントの 475 バージョンを使用する必要があることを覚えておいてください。

このリンクで見つけることができます: http://google-api-php-client.googlecode.com/svn/trunk/src/

于 2012-08-10T08:14:03.687 に答える