用PHP编程向我的Google日历添加活动(2020)

2ic8powd  于 2022-11-28  发布在  PHP
关注(0)|答案(3)|浏览(201)

我已经为这个问题纠结了很长时间了。基本上,我有一个网站,管理员可以在那里创建活动,同时,这些活动应该被添加到我公司的Google日历中。我有一个HTML表单,它将信息发布到一个PHP文件中,然后试图将活动添加到我自己的Google日历中。我目前已经创建了一个服务帐户,我的代码如下所示:

require_once 'google-api/vendor/autoload.php';

$client = new Google_Client();
$client->setApplicationName("House Events");
$client->setAuthConfig("MY AUTH CONFIG FILE");
$client->setScopes(Google_Service_Calendar::CALENDAR);
$client->setAccessType('offline');

$service = new Google_Service_Calendar($client);

$event = new Google_Service_Calendar_Event(array(
  'summary' => $title,
  'description' => $html,
  'start' => array(
    'dateTime' => $start
  ),
  'end' => array(
    'dateTime' => $end
  )
));

$calendarId = 'MY CALENDAR ID';
$event = $service->events->insert($calendarId, $event);

$calendarListEntry = new Google_Service_Calendar_CalendarListEntry();
$calendarListEntry->setId($calendarId);

$createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);

printf('Event created: %s\n', $event->htmlLink);

此代码返回错误“You need to have writer access to this calendar.",并且在实际的Google Calendar共享屏幕中,我无法给予服务帐户进一步的权限。
我也尝试过Google Calendar API Quickstart,但我不希望它在命令行之外运行。另外,我不需要访问权限来编辑单个用户的日历,我只希望让代码在我的日历中添加一个事件。最有效的方法是什么?

ui7jx7zq

ui7jx7zq1#

“您必须具有此行事历的编写者存取权。”
表示您对要写入的日历只有读取权限。
您需要将权限委派给服务帐户。服务帐户类似于虚拟用户,您可以预先授权其访问权限。
转到谷歌日历网站,并与服务帐户共享日历给予它写访问权限。

von4xj4u

von4xj4u2#

我把问题解决了。
GSuite阻止我授予编辑器访问套件之外的日历的权限(我的服务帐户是)。我不得不联系管理员,他给了我访问权限,之后我就可以更改权限设置了。谢谢你的帮助。

xxb16uws

xxb16uws3#

@阿威-拉坦
你的代码看起来像这样就可以工作了。

$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->addScope(Google_Service_Calendar::CALENDAR); //CALENDAR_READONLY - read only scope

$guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
$client->setHttpClient($guzzleClient);

$client->setRedirectUri("YOUR URI");
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setAccessToken($access_token);
$service = new Google_Service_Calendar($client);

$calendarId = 'primary';
$event = new Google_Service_Calendar_Event([
    'summary' => $request->title,
    'description' => $request->description,
    'start' => ['dateTime' => $startDateTime],
    'end' => ['dateTime' => $endDateTime],
       'reminders' => ['useDefault' => true],
    ]);
$results = $service->events->insert($calendarId, $event);

相关问题