Настроил интеграцию с google calendar. Использовал библиотеку для php google/apiclient. Стандартный код такой
function getClient()
{
$client = new Google_Client();
$client->setApplicationName(APP_NAME);
$client->setScopes('https://www.googleapis.com/auth/calendar');
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setAccessType('offline');
$client->setRedirectUri('RETURN_URL');
$client->setApprovalPrompt('force');
return $client;
}
// $refresh_token - ранее полученный токен
$client = getClient();
$client->refreshToken($refresh_token);
$service = new \Google_Service_Calendar($client);
// далее работаю с календарем
Как можно увидеть я использую только refresh_token. И токен доступа генерирую динамически при запросе. Не могу утверждать что это правильное решение. Но я посчитал что поскольку запросы в гугл календарь не будут частыми, нет смысла морочиться с сохранением токена доступа. И я просто генерирую его динамически.
А теперь какая проблема у меня возникла. У некоторых аккаунтов слетает refresh_token и гугл начинает возвращать ошибку - "error" : "invalid_grant".
На сколько я понял refresh_token не должен иметь срока действия.
Код для интеграции через OAuth 2.0 такой.
echo getClient()->createAuthUrl();
// далее в RETURN_URL разбираю ответ и сохраняю $refresh_token