Довольно долго долбаюсь над документацией гугла, но так и не удалось сложить правильной картины о том, как оно работает и тем более объяснить - почему.
Прошу помощи - мне нужно получается чтобы при запросе к скрипту он получал права на запись и считывание таблицы в массив. В общем-то у меня получилось считать и записать. Из браузера. Но вот автоматический токен из скрипта не получается, а каждый раз его вручную обновлять - ну не может быть чтобы гуглы такое сделали.
Раздельные понятия:
1. аккаунт Гугла
2. аккаунт Google Api
Как я понял оно работает:
1. Создаем аккаунт гугла на любую почту
2. В настройках создаем сервисный аккаунт для Google Api
3. Там же создаем еще один аккаунт Google Api и там выбираем web-приложение
4. Скачиваем client_secret.json
5. Ставим либу от google `google-api-php-client-2.1.1`
6. Из этой либы пишем вот такой код:
// config
$client_secret_fpath = '<fpath to client_secret.json>';
$client_secret = json_decode(file_get_contents($client_secret_fpath), true);
// process
// init client
$client = new Google_Client();
$client->setAuthConfig($client_secret_fpath);
$client->addScope(Google_Service_Sheets::SPREADSHEETS);
$client->setIncludeGrantedScopes(true);
$client->setAccessType('offline');
7. Проверяем токен в файле или в сессии, где удобно
$token_fpath = __DIR__ . '/token.ini';
if (!is_file($token_fpath) || (!$access_token = json_decode(file_get_contents($token_fpath), true))):
$auth_url = $client->createAuthUrl();
// ... стопэээээ, ни curl, ни wget не спасут, redirect делать нельзя, т.к. терминал
endif;
Вот тут я теряюсь:
Сгенерированная ссылка - КЛИЕНТСКАЯ. Если на нее перейдет браузер - она работает и дает токен в ответ, после нажатия кнопки "Разрешить" в стандартной форме от гугла же.
Но, при всем своем великолепии - PHP не может НАЖАТЬ эту кнопку, он просто выдает контент страницы вместо редиректа с кодом.
Как тут быть?
Ну и потом...
9. Сохранить токен в файл
10. Поставить проверку токена на истечение срока действия, и сделать запрос на revoke() когда это произойдет...