2014-12-11 5 views
0

Я знаю, что многие подобные вопросы были заданы, но я борюсь за понимание. Я успешно использовал библиотеки php google для v3 для взаимодействия с функциями календаря. Код у меня есть:google api calendar php

<?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); 
... 
?> 

Это работает нормально, но календарь я хочу изменить это всегда приложение кампанией с таким же зарегистрирован на тот же счет, что и календарь. Есть ли способ обойти аутентификацию oauth2, чтобы я мог просто настроить записи в календаре, который у меня есть, без необходимости выполнять дополнительный этап аутентификации с перенаправлением? Я использовал Zend для этого, и до недавнего времени он работал нормально, но обновление до версии v3 API и использование oauth2, похожего на это, немного переборщило. Разумеется, я, возможно, неправильно понял - любая помощь совета мне очень помогла бы.

+0

ОК - так я понял это - на всякий случай кто-то ищет ... (в основном глупость с моей стороны). Если вы хотите, чтобы ваше приложение управляло календарем, вам необходимо настроить учетную запись службы на консоли Google. Затем вам необходимо предоставить доступ к календарю по электронной почте, предоставленной этой учетной записи. Этот код работает: – user2044844

ответ

0

ОК - в случае, если кто-либо другой ищет ответ на этот вопрос, я думал, что опубликую свое решение. Я был немного глуп. Если вы хотите аутентифицировать приложение для изменения календаря таким образом, вам нужно создать учетную запись службы на консоли 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();?>