2014-04-12 57 views
1

我试图添加和发送电子邮件事件使用谷歌日历Api 3,但谷歌Api返回403禁止和我的日历设置为公开。 我的代码是:谷歌日历API创建事件返回403禁止和日历公开 - PHP

ini_set('display_errors', 1); 
require 'Google/Client.php'; 
require 'Google/Service/Calendar.php'; 

session_start(); 

const CLIENT_ID = '**************.apps.googleusercontent.com'; 
const SERVICE_ACCOUNT_NAME = '**************@developer.gserviceaccount.com'; 
const KEY_FILE = '**************-privatekey.p12'; 

$client = new Google_Client(); 
$client->setApplicationName("Calendar App"); 
//$client->setUseObjects(true); //IF USING SERVICE ACCOUNT (YES) 

if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} 

$key = file_get_contents(KEY_FILE); 
$client->setClientId(CLIENT_ID); 
$client->setAssertionCredentials(new Google_Auth_AssertionCredentials(
SERVICE_ACCOUNT_NAME, 'https://www.google.com/calendar/feeds/**************@group.calendar.google.com/private/full/', 
$key) 
); 

$client->setClientId(CLIENT_ID); 

$cal = new Google_Service_Calendar($client); 
$event = new Google_Service_Calendar_Event(); 
$event->setSummary('App Sum'); 
$event->setLocation('App Location'); 

$start = new Google_Service_Calendar_EventDateTime(); 
$start->setDateTime('2014-05-19T10:30:00.000-05:00'); 
$event->setStart($start); 

$end = new Google_Service_Calendar_EventDateTime(); 
$end->setDateTime('2014-05-20T11:30:00.000-05:00'); 
$event->setEnd($end); 

$attendeel = new Google_Service_Calendar_EventAttendee(); 
$attendeel->setEmail('**************@gmail.com'); 
$attendees = array($attendeel); 
$event->attendees = $attendees; 

$cal->events->insert('**************@group.calendar.google.com', $event); 

http://amazewebs.yitweb.com/#scriptv4取码,有一个类似的代码Edit Google calendar events from Google service account: 403当开发商说,这是不是代码,如果没有日历设置

难道他们知道,如果有一些其他的配置还是代码真的是问题?

回答

0

我一直在玩这个东西有点太。我得到了列表事件的工作,但后来切换到添加事件,我得到了这个401.我发现你必须与**************@developer.gserviceaccount共享日历。 com电子邮件。您可以通过转到日历>我的日历>(姓名)>共享此日历,然后在与特定人共享下添加该gserviceaccount电子邮件并设置适当的权限。

非常感谢这个post和这个post

1

如果您有权访问域管理员帐户,则可以将日历更新作为该帐户发布,而无需以管理员身份登录。你可以填写$client的所有参数:

setAssertionCredentials(new Google_Auth_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,   
    'https://www.google.com/calendar/feeds/**************@group.calendar.google.com/private/full/', 
    $key, 
    'notasecret', 
    'http://oauth.net/grant_type/jwt/1.0/bearer', 
    'your admin account email');