Первоначальная задача была такой простой: получить последний пост со страницы Google+.
Потребовалось 3 дня, чтобы выяснить, что все примеры в Интернете кажутся либо устаревшими, либо неправильными, либо недействительными. Документы для разработчиков Google также не очень помогают, все больше и больше усложняя ситуацию с каждой новой запутанной страницей документации. Итак, ребята, я сдаюсь.
Сначала я попытался реализовать процедуру OAuth 2.0, которая была задокументирована в их документации (https://developers.google.com/identity/protocols/OAuth2WebServer). Как следует из названия, речь идет именно о подключении из серверного приложения. Я последовал за ним, и, на первый взгляд, это сработало: я получил ответный звонок, успешно прошел аутентификацию, получил токен доступа, сохранил его и сделал простой вызов для получения сообщений.
// Initialization
$this->googleClient = new Google_Client();
$this->googleClient->setAuthConfig(Json::decode($config->get('client_json')));
$this->googleClient->setAccessType('offline');
$this->googleClient->setIncludeGrantedScopes(TRUE);
$this->googleClient->addScope('https://www.googleapis.com/auth/plus.me');
$this->googleClient->setRedirectUri(Url::fromRoute('mymodule.gplus.callback')->setAbsolute()->toString());
// The callback
$client->authenticate($code);
$accessToken = $client->getAccessToken();
(Единственное, что здесь показалось глупым, — это область действия. Я понятия не имел, на какую область мне претендовать, если мне нужно просто прочитать общедоступный пост с общедоступной страницы, поэтому я просто выбрал первую случайную запись, которая выглядела связанной.)
Как я уже сказал, я получил токен и мог получать свои сообщения:
// Using Google_Service_Plus
$this->client()->setAccessToken($access_token);
$this->googleServicePlus = new Google_Service_Plus($this->client($reset));
$this->googleServicePlus->activities->listActivities($endpoint, 'public', ['maxResults' => 1]);
Но через 1 час он просто перестал работать, утверждая, что токен устарел или что-то в этом роде, и его нужно обновить. И вот тут наступает проблема: я не нашел способа обновить токен. $response
из authenticate()
больше не возвращает токен обновления (хотя он много раз упоминался в других ответах), поэтому у меня даже нет возможности его обновить.
Я попытался покопаться в библиотеке (из моего composer.json
: "google/apiclient": "^2.0"
) и понял, что метод authenticate()
на самом деле устарел, есть несколько других методов, которые, похоже, играют с токенами. Я попробовал \Google_Client::fetchAccessTokenWithAssertion()
, который запросил некоторые учетные данные приложения по умолчанию... что приводит нас к совершенно другой теме и способу аутентификации, описанному здесь: https://developers.google.com/identity
Так стоит ли мне отказаться от всего, что я делал, и теперь внедрять что-то новое? Как я мог просто выполнить эту простую задачу получения новостей?
Извините за длинный вопрос.