Я нашел решение, которое, по моему мнению, является «официальным» для того, что вы хотите сделать.
Сначала вам нужно активировать Google API «Идентификатор клиента для установленных приложений».
Перейдите в консоль Google API и создайте проект.
Затем активируйте календарь.
Перейдите к опции «Доступ к API» и используйте кнопку «Создать клиента OAuth 2.0».
Дайте название (и логотип, если хотите) продукту.Нажмите «Далее».
Выберите опцию «Установленное приложение» и нажмите «Создать идентификатор клиента».
Теперь у вас настроен доступ.Теперь вам понадобятся некоторые коды.Для их получения:
* «Код аутентификации».Чтобы получить его, вам нужна следующая информация:
ОБЛАСТЬ ПРИМЕНЕНИЯ: https://www.google.com/calendar/feeds/ (если вы хотите получить доступ к API календаря. Есть и другие, вы можете найти их на OAuth 2.0 Playground)
CLIENT_ID: вы найдете его в разделе доступа к API на консоли Google API.
REDIRECT_URI: получите его в том же месте.
Теперь скопируйте следующий код в файлпоместите значения в переменные, выполните код (php -q script_name.php) и перейдите к напечатанному URL.
<?php
$scope = '';
$client_id = '';
$redirect_uri = '';
$params = array(
'response_type' => 'code',
'client_id' => $client_id,
'redirect_uri' => $redirect_uri,
'scope' => $scope
);
$url = 'https://accounts.google.com/o/oauth2/auth?' . http_build_query($params);
echo $url."\n";
?>
На веб-странице вас попросят разрешить доступ.Сделайте это, и вы получите код, который является вашим кодом аутентификации.
* «Обновить код».Чтобы получить его, вам потребуется:
Данные, которые вы использовали ранее, а также код «секрет клиента» в консоли API, между «идентификатором клиента» и «URI перенаправления».
Как и раньше, скопируйте следующий код и поместите переменные на место (поле кода - это код аутентификации).Выполните, и в результате появится «Обновить токен».
<?php
$url = 'https://accounts.google.com/o/oauth2/token';
$post_data = array(
'code' => '',
'client_id' => '',
'client_secret' => '',
'redirect_uri' => '',
'grant_type' => 'authorization_code',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$token = json_decode($result);
echo $token->refresh_token . "\n";
?>
На данный момент у вас есть все, что вам нужно.Будьте осторожны, если однажды вы измените код аутентификации.Вам нужно будет получить новые ключи.
Чтобы получить доступ к службе календаря, здесь у вас есть пример: Измените значения переменной перед ее использованием.В этом примере получаются основные события календаря, но вы можете изменить адрес для любого в API календаря (http://code.google.com/intl/ca/apis/calendar/v3/getting_started.html#background_operations)
<?php
$scope = 'https://www.google.com/calendar/feeds/';
$client_id = '';
$client_secret = '';
$redirect_uri = '';
$refresh_token = '';
$token_url = 'https://accounts.google.com/o/oauth2/token';
$post_data = array(
'client_secret' => $client_secret,
'grant_type' => 'refresh_token',
'refresh_token' => $refresh_token,
'client_id' => $client_id
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$token_object = json_decode($result);
$access_token = $token_object->access_token;
// Get the results
$rest_url = 'https://www.googleapis.com/calendar/v3/calendars/primary/events';
$header = "Authorization: OAuth " . $access_token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_URL, $rest_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$rest_result = curl_exec($ch);
print_r(json_decode($rest_result));
?>
Сначала сценарий запрашивает «токен доступа», который действителен длячас. Затем скрипт получает сервис REST (любой в области календаря), отправляя токен доступа в заголовке. Чтобы обеспечить лучшую скорость работы скрипта, было бы хорошо хранить токен доступа в кэше, пока он не станет старше.3600 секунд. Таким образом, сценарий избежит одного из двух вызовов.
Советы:
Посетите игровую площадку OAuth 2.0, чтобы понять всю информацию, отправленную в процессе OAuth.lot
Сообщение Эрика Нагеля в его блоге дало мне решение. Вся заслуга в нем. Я не могу связать это, так как у меня недостаточно «репутации».