从 Google 服务帐户编辑 Google 日历事件:403

2022-01-01 00:00:00 google-api php google-calendar-api

我想通过服务帐户在 google 日历上创建新事件.我可以正确访问并打印我所有日历的列表.但是当我想创建一个新事件时,响应是 403 Forbidden.

I want to create new event at google calendar from Service Account. I can access correctly and print a list all my calendars. But when I want to create a new event the response is 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

有什么想法吗?也许其他范围,或允许编辑事件(我不知道我可以在哪里配置它,我已经搜索过了,承诺)

Any ideas? Maybe other scope, or allow edit events (I dont know where I can configure this and I have searched it, promise)

当然,我的日历是公共日历.

Of course, my calendar is a public calendar.

欢迎任何帮助:)

谢谢!

推荐答案

我解决了,问题不是代码,它工作正常.

I solved it, and the issue was not code, It works fine.

问题在于共享我的日历.一些我不知道的东西.

The problem was sharing my calendar. Something that I don't knew.

要允许从服务帐户编辑您的日历事件,您在 Google Api 控制台中执行的所有步骤都不够,您必须从您的日历配置(日历配置 -> 共享此日历)中授予电子邮件帐户的权限指定到 Google Api 控制台(电子邮件地址).

To allow edit your calendar events from service account, do not have enough with all steps you do in the Google Api Console, you have to give permission from your calendar configuration (Calendar configuration -> Share this calendar) to the email account specified into Google Api Console (email adress).

如果是企业帐户,这可能会出现问题,那么您必须联系帐户管理员.

This can be a problem if it's a business account, then you will have to contact the account administrator.

此处显示的代码可以正常工作,所以我希望它对某人有所帮助,但请记住,您必须使用 475 版本的 Google Api 客户端.

The code shown here works correctly, so I hope it helps someone, just remember that you must use 475 version of the Google Api Client.

您可以在此链接中找到:http://google-api-php-client.googlecode.com/svn/trunk/src/

相关文章