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

Posted

技术标签:

【中文标题】从 Google 服务帐户编辑 Google 日历事件:403【英文标题】:Edit Google calendar events from Google service account: 403 【发布时间】:2012-08-05 11:23:40 【问题描述】:

我想通过服务帐户在谷歌日历上创建新活动。 我可以正确访问并打印我所有日历的列表。 但是当我想创建一个新事件时,响应是 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

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

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

欢迎任何帮助:)

谢谢!

【问题讨论】:

也许它被禁止是有原因的? 嘿,也许吧,但我不知道是否有一些地方我可以允许编辑事件。在日历配置中,我什么也没看到,我激活了日历 API。我没有问题列出 caendars 和事件。仅编辑和创建。但实际上,我花了很多时间搜索这个选项,但没有什么可做的:S 谢谢 【参考方案1】:

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

问题在于共享我的日历。我不知道的东西。

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

如果是企业帐户,这可能是个问题,那么您必须联系帐户管理员。

这里显示的代码可以正常工作,所以希望对大家有所帮助,请记住您必须使用 475 版本的 Google Api 客户端。

你可以在这个链接找到:http://google-api-php-client.googlecode.com/svn/trunk/src/

【讨论】:

这对我有用。我刚刚让我们的帐户管理员与我的服务帐户的电子邮件地址共享日历。谢谢! 谢谢谢谢谢谢!这就是我要找的东西! 我找了好几个小时的解决方案!感谢您的回答。 我遇到了同样的错误,但是我正在尝试使用我自己的用户作为所有者的应用程序中属于我自己的日历,所以当我去共享这个日历页面时,我看到我的电子邮件列出了我需要的访问权限。所以我不确定还需要做什么。当我运行我的代码时,我确实收到了一条警告:警告:未设置应用程序名称。调用 Builder#setApplicationName。但是当我在这个警告之后运行代码时,我得到 403 错误。知道这是什么吗? 我收到 403 禁止错误。当我分享我的日历时,它显示我的电子邮件 ID 作为所有者请如何配置???

以上是关于从 Google 服务帐户编辑 Google 日历事件:403的主要内容,如果未能解决你的问题,请参考以下文章

使用服务帐户插入 Google 日历条目

Google OAuth 2.0 服务帐户 - 日历 API(PHP 客户端)

PHP Google 服务帐户身份验证日历 API

未在服务帐户谷歌日历 api php 中创建环聊链接

使用服务帐户通过 OAuth 2.0 调用 v3 Google 日历 API 时出现“需要登录”401 未经授权的消息

除非已登录Google帐户,否则不会显示嵌入式Google日历