Я пытаюсь добавить события календаря в свой календарь Google из скрипта php. Обратите внимание, что я могу сделать это успешно прямо со страницы Google поэтому я думаю, что мой календарь настроен правильно. Однако, когда я пытаюсь сделать это из скрипта php, я не могу получить токен OAuth2.
Следующий скрипт, в основном взятый из примера Google, выполняется без ошибок, но всегда заканчивается сообщением «Подключи меня!». ссылка. Когда я нажимаю на эту ссылку, я попадаю на экран проверки, который предупреждает меня, что это приложение хочет управлять моими календарями. Я нажимаю «Принять», а затем просматриваю свой календарь. Немного неудобно, но если он получает токен OAuth, прекрасно.
Затем я возвращаюсь и снова запускаю сценарий, надеясь, что токен доступа теперь будет доступен, но я получаю точно такой же результат. Сколько бы раз я ни запускал этот скрипт, я никогда не получаю токен, который мне нужен для расширения скрипта для добавления событий в календарь.
Я занимаюсь этим несколько дней, и я просто никуда не денусь. Кто-нибудь может помочь? Спасибо.
<?php
require_once '../../src/Google_Client.php';
require_once '../../src/contrib/Google_CalendarService.php';
require_once '../../src/auth/Google_OAuth2.php';
session_start();
$client = new Google_Client();
$client->setApplicationName("Add Google Calendar Entries");
// Visit https://code.google.com/apis/console?api=calendar to generate your
// client id, client secret, and to register your redirect uri.
$client->setClientId('843319906820-1s1d737e77o71a3vaskf434k3ape1fk5.apps.googleusercontent.com');
$client->setClientSecret('AP5imn3e0TEWNyLTCNm8YJj6');
$client->setRedirectUri('https://www.google.com/calendar/');
$client->setDeveloperKey('AIzaSyDIw3ks7AmrIrRxjO9y2gWBhQDYHFWd-uc');
$client->setUseObjects(true);
$cal = new Google_CalendarService($client);
if (isset($_GET['logout'])) {
unset($_SESSION['token']);
}
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
if ($client->getAccessToken()) {
$calList = $cal->calendarList->listCalendarList();
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
$_SESSION['token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
?>
РЕДАКТИРОВАТЬ: попытка реализовать предложение Винисиуса Пинто. Я изменил свое перенаправление, чтобы указывать прямо на этот скрипт. Теперь я получаю такую ошибку:
Неустранимая ошибка: неперехваченное исключение 'Google_ServiceException' с сообщением 'Ошибка при вызове GET https://www.googleapis.com/calendar/v3/users/me/calendarList?key=AIzaSyDIw3ks7AmrIrRxjO9y2gWBhQDYHFWd-: (403) Доступ не настроен. Пожалуйста, используйте Google Developers Console, чтобы активировать API для своего проекта ». в D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ io \ Google_REST.php: 66 Трассировка стека: # 0 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php -client \ src \ io \ Google_REST.php (36): Google_REST :: decodeHttpResponse (Object (Google_HttpRequest)) # 1 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ service \ Google_ServiceResource .php (186): Google_REST :: execute (Object (Google_HttpRequest)) # 2 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ contrib \ Google_CalendarService.php (205): Google_ServiceResource- > __ call ('list', Array) # 3 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ examples \ calendar \ simple.php (43): Google_CalendarListServiceResource-> listCalen в D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ io \ Google_REST.php в строке 66
Похоже, у меня нет правильных API, активированных в консоли разработчика. У меня активированы Calendar API
и Google Cloud Storage JSON API
и больше ничего. Я не вижу других подходящих API и не думаю, что это сообщение сообщает мне, какие API ему нужны.
РЕДАКТИРОВАТЬ 2: Похоже, я использовал неправильный ключ разработчика. Поменял на ключ для серверных приложений. Теперь моя ошибка такова:
Неустранимая ошибка: неперехваченное исключение 'Google_AuthException' с сообщением 'Ошибка обновления токена OAuth2, сообщение:' {"error": "invalid_client"} '' в D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ auth \ Google_OAuth2.php: 288 Трассировка стека: # 0 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ auth \ Google_OAuth2.php (248): Google_OAuth2-> refreshTokenRequest ( Array) # 1 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ auth \ Google_OAuth2.php (225): Google_OAuth2-> refreshToken ('1 / 6ZdJyZALqcbwW ...') # 2 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ service \ Google_ServiceResource.php (167): Google_OAuth2-> sign (Object (Google_HttpRequest)) # 3 D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ contrib \ Google_CalendarService.php (205): Google_ServiceResource -> __ call ('list', Array) # 4 D: \ Hosting \ 11347607 \ html \ scripts \ google-api- php-client \ examples \ calendar \ simple.php (47): Google_CalendarListServiceResource-> listCalendarList () в D: \ Hosting \ 11347607 \ html \ scripts \ google-api-php-client \ src \ auth \ Google_OAuth2.php в строке 288