2016-11-07 11 views
1

Я пытаюсь использовать Google API (PHP) для ежедневной синхронизации между системным календарем и календарями Google. Я хочу, чтобы системный пользователь имел возможность настроить доступ к своему календарю один раз из системы, а затем система может синхронизировать календари каждый день с помощью задания cron.Обновление токенов с Google API для Google Calendar v3

Мне удалось получить весь процесс работы, от авторизации доступа к синхронизации календарей, но я застрял с временем истечения срока годности.

Как я думал, это сработало в v3, старый токен будет действовать как токен обновления. Итак, как только пользователь предоставил авторизацию, мне просто нужно передать старый токен в Google, и это позволит мне запустить синхронизацию.

Это, похоже, работает, если я нахожусь в течение 1 часа после первого токена. Пройдя час, он перестает работать, и мне нужно, чтобы пользователь снова разрешил доступ.

Есть ли способ заставить пользователя авторизовать доступ один раз, а затем синхронизировать календари один раз в день, если пользователь не должен снова разрешать доступ?

Спасибо!

ответ

1

Ну, во время вашего разрешения с Google вы получите токен, срок действия которого истекает через 3600 секунд или один час, и это нормально, истекло. Поэтому вам нужно использовать токен обновления, чтобы получить новый рабочий токен.

Вот шаги, которые вам нужны:

$token = $client->getAccessToken(); 
$authObj = json_decode($token); 
if(isset($authObj->refresh_token)) { 
save_refresh_token($authObj->refresh_token); 
} 

Важно, чтобы сохранить этот refresh_token, то вы можете обновить его с

$client->refreshToken($your_saved_refresh_token); 

А затем установите новый маркер доступа к сессии :

$_SESSION['access_token'] = $client->getAccessToken(); 

Для получения дополнительной информации, проверьте это SO question.

+0

Спасибо, я только что проверил все и обнаружил токен обновления только в первый раз, когда вы получаете доступ. Благодаря! –