当前位置: 首页 > 知识库问答 >
问题:

PHP上的Google Calendar API v3域范围的委托服务号

勾向文
2023-03-14

几个小时来,我一直在拼命地搜索,我试图在互联网上搜索,但没有成功。我的问题是,我无法使用Google API PHP客户端(从GitHub下载)让整个域的委派工作。我假设身份验证正在工作,因为如果日历已共享到服务帐户的电子邮件(xxx@@developer.gserviceaccount.com),我就能够读取日历。

我希望能够读写我们域中的所有用户日历(谷歌商务应用程序),而无需将个人日历共享到服务帐户。如果我将我(或其他人)的日历共享到服务帐户的电子邮件(xxx@developer.gserviceaccount.com),我就能够阅读日历。

这就是我所做的:

  1. 我在开发人员控制台中创建了一个项目
  2. 我创建了一个服务帐户并下载了。p12文件
  3. 我去了行政部。谷歌。com,并将新创建的客户端ID添加到安全性中--

代码如下:

<?php

session_start();
include_once "templates/base.php";

set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';


$client_id = 'xxxx.apps.googleusercontent.com';
$service_account_name = 'xxxx@developer.gserviceaccount.com';
$key_file_location = '/home/LALALA/public_html/xxxx-privatekey.p12';

echo pageHeader("Service Account Access");
if ($client_id == '<CLIENT_ID>'
    || !strlen($service_account_name)
    || !strlen($key_file_location)) {
  echo missingServiceAccountDetailsWarning();
}

$client = new Google_Client();

$client->setApplicationName("Calendar");
$client->setClientId($client_id);
$client->setClientSecret("notasecret");
//$bookService = new Google_Service_Books($client);
$service = new Google_Service_Calendar($client);

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}
$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()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

$events = $service->events->listEvents('some.email@our.domain.com');

while(true) {
  foreach ($events->getItems() as $event) {
    echo $event->getSummary()."<br />";
  }
  $pageToken = $events->getNextPageToken();
  if ($pageToken) {
    $optParams = array('pageToken' => $pageToken);
    $events = $service->events->listEvents('primary', $optParams);
  } else {
    break;
  }
}


?>

所以现在我在寻找一些能帮我解决这个问题的天才。我将非常感激,甚至愿意为能够使这项工作发挥作用的人做一点捐赠。

共有1个答案

羊舌承天
2023-03-14

尝试以下操作:

$cred = new Google_Auth_AssertionCredentials(
  $service_account_name,,
  array('https://www.googleapis.com/auth/calendar'),
  $key,
  'notasecret',
  'http://oauth.net/grant_type/jwt/1.0/bearer',
  'some.email@our.domain.com'
);

告诉Google你想模拟的人是谁,然后你就可以为这个用户操作Google日历的所有内容。

 类似资料:
  • 我们需要访问谷歌日历API与服务器应用程序,以创建事件和邀请与会者。谷歌建议使用服务帐户的应用程序。 这里的主要问题是与会者邀请参加活动,因为如果没有域范围的授权,服务帐户就不能这样做(请参见img)。 组织不希望授予服务帐户访问所有用户数据的权限。所以,我想知道我们是否可以将域范围的授权委托给域的一个用户?(限制访问以使用其他用户的数据)。 附言。它只是关于谷歌日历API。 非常感谢你的帮助。

  • 问题内容: 我已经阅读了2天的教程并看到了示例,但没有成功。我想在NodeJS环境中使用Google Apps Gmail帐户发送电子邮件,但是我得到了Google API的回复: 到目前为止,这是我所做的: 在Google Cloud Platform中创建了一个项目 创建一个服务帐号 已为服务帐户启用 以格式下载了服务帐户的密钥 > 我创建了 为项目启用了Gmail API 在Google A

  • 我在我的Google Apps域上创建了一个服务号,启用了域范围的委托,并在服务号的客户端ID上从我的域的控制面板启用了完整的gmail和pubsub API范围。 我可以成功实例化gmail API客户端,并通过以下方式模拟域的一个帐户: 我正在尝试使用以下命令在模拟用户的帐户上设置推送通知webhook。指定的主题名称有效。 在呼叫观看后,我收到以下错误: 调用其他gmail API方法(列表

  • 我目前使用的谷歌服务帐户启用了域范围的委托(我使用了这个链接https://developers.Google.com/identity/protocols/oauth2/service-account,和这个链接https://developers.Google.com/admin-sdk/reports/v1/guides/developy),并且启用了“https://www.googlea

  • 为了访问GMail API(并将呼叫拟人化),我使用了一个服务帐户(从谷歌云平台创建)。我的json文件看起来像这样 我还使用oAuth2client库使其更容易,但我找不到创建凭据然后指定范围和委托帐户的方法。 我试过了 但是我得到了一个错误,因为它需要一个PKCS-8密钥。 我该怎么做?(如果有帮助,我的代码在应用程序引擎 Flex 上运行) 谢啦

  • 我在一家公司工作,为他们开发和管理一个网站。 我控制了网络服务器,但公司正在管理域名系统。 由于其安全策略,禁止web服务器发出出站电子邮件-他们不会将适当的SPF/DKIM记录添加到DNS以允许此操作。相反,我被告知,他们将通过将流量转发到名称服务器(由我选择),将域的权限“委托”给我,我负责创建新的DNS记录来处理该流量。在这些新的DNS记录中,我将添加适当的SPF/DKIM记录。 就像我在管