Итак, основываясь на информации, которую вы имеете в своем вопросе, я сделаю предположение о вашей проблеме.Если это не поможет, я вернусь к этому вопросу после того, как вы опубликуете дополнительный код, чтобы мы могли на него посмотреть.
Ваш JSON-файл, содержащий маркер пользователя, должен выглядеть примерно так после того, как вы его декодируете:
$token = array(
'access_token' => 'token value',
'expires_in' => 3600,
'scope' => 'a url specifying scope',
'token_type' => 'Bearer',
'created' => 'a timestamp for created date',
'refresh_token' => 'refresh token value'
);
Этот массив может быть передан в $client->setAccessToken($token)
в виде массива.
Если вы считаете, что ваш скрипт вызывает только токен доступа, то:
$client->setAccessToken($token['access_token']);
Если вы запускаете $client->isAccessTokenExpired()
и получаете сообщение об ошибке, подобное той, которую вы опубликовали в своем вопросе, можно предположить, что в вашем токене отсутствует поле expires_in
и поле created
.
isAccessTokenExpired()
вернет ответ bool.Обратите внимание, что вы ничего не передаете в функцию, потому что $client
уже должен иметь информацию, необходимую для проверки, истек ли токен.
Если ваш токен не имеет значений, которые я разместил вышевам нужно будет получить новый токен с соответствующими областями действия.
Общий процесс получения нового токена:
Взято из Краткое руководство по API Календаря Google - PHP
// If there is no previous token or it's expired.
if ($client->isAccessTokenExpired()) {
// Refresh the token if possible, else fetch a new one.
if ($client->getRefreshToken()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
} else {
// Request authorization from the user.
$authUrl = $client->createAuthUrl();
printf("Open the following link in your browser:\n%s\n", $authUrl);
print 'Enter verification code: ';
$authCode = trim(fgets(STDIN));
// Exchange authorization code for an access token.
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
$client->setAccessToken($accessToken);
// Check to see if there was an error.
if (array_key_exists('error', $accessToken)) {
throw new Exception(join(', ', $accessToken));
}
}
// Save the token to a file.
if (!file_exists(dirname($tokenPath))) {
mkdir(dirname($tokenPath), 0700, true);
}
file_put_contents($tokenPath, json_encode($client->getAccessToken()));
}
Убедитесь, что ваш клиентский объект установлен правильно:
$scopes = implode(' ',
array(Google_Service_Calendar::CALENDAR)
);
$client = new Google_Client();
$client->setAuthConfig('path to credentials');
$client->addScope($scopes);
$client->setAccessType('offline');
Также id_token
и access_token
- это не одно и то же.Вы должны прочитать разницу между ними.Поскольку вы не упомянули, что вы пытаетесь сделать или какие методы вы используете, все еще остается догадкой.
id_token против access_token
Надеюсь, что это может дать вам некоторое представление.