Я знаю, что многие подобные вопросы были заданы, но я изо всех сил пытаюсь понять. Я успешно использовал библиотеки php google для v3 для взаимодействия с функциями календаря. Код, который у меня есть:
<?php
require_once "google-api-php-client/autoload.php";
session_start();
$client = new Google_Client();
$client->setApplicationName("My app");
$client->setClientId("CI.apps.googleusercontent.com");
$client->SetClientSecret("SECRET");
$client->setRedirectUri("redirect");
$client->setDeveloperKey("key");
$client->setScopes(array("https://www.googleapis.com/auth/calendar"));
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);//update token
}
$service=new Google_Service_Calendar($client);
...
?>
Это работает нормально, но календарь, который я хочу изменить, всегда является same-, приложение зарегистрировано в той же учетной записи, что и календарь. Есть ли способ обойти аутентификацию oauth2, чтобы я мог просто настроить записи в календаре, который у меня есть, без необходимости выполнять дополнительный этап аутентификации с перенаправлением? Я использовал Zend для этого, и до недавнего времени он работал нормально, но обновление до версии v3 API и использование oauth2, похожего на это, немного переборщило. Разумеется, я, возможно, неправильно понял - любая помощь совета мне очень помогла бы.
Хорошо - в случае, если кто-либо еще ищет ответ на этот вопрос, я думал, что опубликую свое решение. Я был немного глуп. Если вы хотите аутентифицировать приложение для изменения календаря таким образом, вам нужно создать учетную запись службы на консоли Google, а не в веб-приложении. Затем вам нужно использовать имя учетной записи службы (адрес электронной почты, указанный для идентификатора клиента для учетной записи службы), чтобы позволить скрипту изменять календарь. Сделайте это вручную, перейдя к настройке календаря, который вы хотите изменить. Этот код будет работать нормально.
<?php
session_start();
require_once "google-api-php-client/autoload.php";
$client_id = ''; //Client ID
$service_account_name = ''; //Email Address
$key_file_location = ''; //key.p12
$client = new Google_Client();
$client->setApplicationName("my app");
$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();?>