2013-08-27 241 views
1

我有一个Google Apps帐户。我正在尝试在此帐户中操作用户日历。Google OAuth 2.0服务帐户 - 日历API(PHP客户端)

  • 我已经创建了该项目,添加了Calendar API服务并通过API控制台创建了一个服务帐户OAuth 2.0客户端ID。
  • 我已经通过日历设置将生成的电子邮件地址添加到日历以共享日历。
  • 我按照建议的步骤管理API访问。客户名称与Google Apps帐户所在的域名相同,范围为“https://www.googleapis.com/auth/calendar”。
  • 通过各种渠道,我能够编译一个脚本,允许我阅读提名的日历事件并向其添加事件。

我不能做的是创建一个子日历。我已通读https://developers.google.com/accounts/docs/OAuth2ServiceAccount,并试图通过“prn”发送。

这是脚本失败的地方;刷新OAuth2令牌时出错,消息:'{“error”:“access_denied”}'。如果我删除prn,那么一切都“很好”。日历只是在开发人员电子邮件下创建的。代码:

<? 
ini_set('display_errors', 1); 

session_start(); 

require_once 'google-api-php-client/src/Google_Client.php'; 
require_once 'google-api-php-client/src/contrib/Google_CalendarService.php'; 


const CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com'; 
const SERVICE_ACCOUNT_NAME = '[email protected]com'; 
const MY_EMAIL = '[email protected]'; 
const KEY_FILE = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12'; 

$client = new Google_Client(); 
$client->setClientId(CLIENT_ID); 
$client->setApplicationName("My App"); 
$client->setAccessType('offline'); 
$client->setUseObjects(true); 

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

$key = file_get_contents(KEY_FILE); 

if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} else { 
    $client->setAssertionCredentials(new Google_AssertionCredentials(
     SERVICE_ACCOUNT_NAME, 
     array('https://www.googleapis.com/auth/calendar'), 
     $key, 
     'notasecret', 
     'http://oauth.net/grant_type/jwt/1.0/bearer', 
     MY_EMAIL) 
    ); 
} 

// even tried setting the email here 
$client->setClientId(MY_EMAIL); 

$calendar = new Google_Calendar(); 
$calendar->setSummary('calendarx'); 
$calendar->setTimeZone('Australia/Brisbane'); 
$createdCalendar = $cal->calendars->insert($calendar); 
?> 

任何帮助将不胜感激。

回答

1

如果域管理员启用您的应用程序(基于客户端ID)模拟用户,则prn字段仅适用于托管域。

+0

我是域管理员,并且已经按照以下步骤启用了应用程序; https://developers.google.com/accounts/docs/RegistrationForWebAppsAuto?csw=1。是不是针对OAuth应用程序?不是OAuth 2.0?应用程序和Google Apps帐户位于同一个域中。 – mattyfranchise

+0

谢谢你的回答。该便士终于在一些其他信息的帮助下下降了。我使用的是Google Apps帐户所在的域作为客户端ID。不是我创建API项目时生成的客户端ID。卫生署! – mattyfranchise

相关问题