要在Google日历中添加事件,我创建了一个Google服务号,从中我获得了客户端ID、服务帐户名称和p12密钥。现在从我的代码中,它正在创建一个事件,但它创建了自己的新日历以插入具有服务号名称的事件。我想在我的Google帐户的默认日历中添加事件。下面是服务号事件插入的工作代码。
function calendarize ($title, $desc, $start_datetime, $end_datetime, $gmail_id, $location)
{
$start_ev_datetime = new DateTime($start_datetime, new DateTimeZone('America/Chicago'));
$start_ev_datetime = $start_ev_datetime->format('c');
$end_ev_datetime = new DateTime($end_datetime, new DateTimeZone('America/Chicago'));
$end_ev_datetime = $end_ev_datetime->format('c');
//Google credentials
$client_id = '**********.apps.googleusercontent.com';
$service_account_name = '*******.iam.gserviceaccount.com';
$key_file_location = '**************.p12';
if (!strlen($service_account_name) || !strlen($key_file_location))
echo missingServiceAccountDetailsWarning();
$client = new Google_Client();
$client->setApplicationName("App Name");
if (isset($_SESSION['token']) && $_SESSION['token']) {
$client->setAccessToken($_SESSION['token']);
if ($client->isAccessTokenExpired()) {
$access_token= json_decode($_SESSION['token']);
$client->refreshToken($access_token->refresh_token);
unset($_SESSION['token']);
$_SESSION['token'] = $client->getAccessToken();
}
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/calendar'),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
try {
$client->getAuth()->refreshTokenWithAssertion($cred);
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
$_SESSION['service_token'] = $client->getAccessToken();
$calendarService = new Google_Service_Calendar($client);
$calendarList = $calendarService->calendarList;
//Set the Event data
$event = new Google_Service_Calendar_Event();
$event->setSummary($title);
$event->setDescription($desc);
$event->setLocation($location);
$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime($start_ev_datetime);
$start->setTimeZone('America/Chicago');
$event->setStart($start);
$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime($end_ev_datetime);
$end->setTimeZone('America/Chicago');
$event->setEnd($end);
try {
$createdEvent = $calendarService->events->insert('primary', $event);
} catch (Exception $e) {
var_dump($e->getMessage());
}
$acl = $calendarService->acl->listAcl('primary');
$userExistFlag = false;
foreach ($acl->getItems() as $rule) {
if($rule->getId() == 'user:'.$gmail_id){
$userExistFlag = true;
}
}
if(!$userExistFlag){
$scope = new Google_Service_Calendar_AclRuleScope();
$scope->setType('user');
$scope->setValue( $gmail_id );
$rule = new Google_Service_Calendar_AclRule();
$rule->setRole( 'owner' );
$rule->setScope( $scope );
$result = $calendarService->acl->insert('primary', $rule);
}
echo 'Event Successfully Added with ID: '.$createdEvent->getId();
}
记住服务号不是你。服务号是它自己的虚拟用户。它有自己的谷歌日历帐户,这就是为什么它在日历上创建事件而不是你的。
获取服务号电子邮件地址并与服务号共享您的个人日历,就像您与Web应用程序中的任何其他用户共享一样。一旦您与服务号共享了日历,它就可以访问它。请注意日历ID,您将能够使用它来更新您的日历。
背景信息
$createdEvent = $calendarService->events->insert('primary', $event);
primary提供当前经过身份验证的用户的主日历。这是服务帐户主日历。
我需要在日历上创建谷歌日历活动,并将其他用户添加为该活动的参与者。其目的是向应用程序用户发送日历事件,而无需征得他们的同意(O-Auth)。 在阅读了谷歌的留档后,我发现我需要一个服务号。所以我从我们的G-Suite的一个电子邮件地址创建了一个项目和一个服务号,noreply@xxxxx.com并为其启用了日历应用编程接口。 我创建并下载了一个密钥对(JSON),其内容是, 根据文档,我开始编写身
我试图实现与谷歌服务号的用户模拟,一直有一段时间的问题,这是我在Java使用的代码: 当我尝试从共享日历中读取事件时,我收到以下身份验证错误: com.google.api.client.auth.oauth2.TokenResponseException: 401未经授权的邮政https://oauth2.googleapis.com/token 如果我不使用模拟,我可以读取事件,但不能邀请与会
我能够使用服务帐户和谷歌日历API在谷歌日历中创建一个事件,其中项目和服务帐户是在谷歌工作区管理员帐户中创建的,在同一个帐户中,我启用了域范围的委派属性。我还没有创建单独的日历,也没有授予访问服务帐户的权限。如果我在CreateDelegate()中使用我的工作区google帐户,则此事件将在'abc@myworkspace.com对于我添加的每个与会者,“日历”和“创建人”属性也是相同的。 所以
问题内容: 我想通过服务帐户在Google日历上创建新活动。我可以正确访问并打印我所有日历的列表。但是,当我想创建一个新事件时,响应为403 Forbidden。 我的代码: 和服务器响应: 有任何想法吗?可能是其他作用域,或允许编辑事件(我不知道在哪里可以配置它,并且已经搜索了,保证) 当然,我的日历是公共日历。 任何帮助都将受到欢迎:) 谢谢! 问题答案: 我解决了,问题不是代码,它工作正常。
我从快速入门开始(https://developers.google.com/google-apps/calendar/quickstart/python)而且效果很好。然后我尝试用这个指南插入事件(https://developers.google.com/google-apps/calendar/create-events)。我将此代码添加到quickstart的代码中,但出现错误。如何查看我
我正在通过Google calendar API v3创建一系列活动(学校时间表)。我正在通过通过API控制台获得的OAuth凭据验证我的程序。除了所有活动都有我的Google帐户作为其创建者,并且程序创建的所有日历都显示在我的“其他日历”列表中之外,所有活动都运行良好。有没有办法改变这种行为? 我唯一能想到的是使用服务号(例如timetable@mydomain.com)登录API控制台并从中创