В ключе Json отсутствует поле токена обновления в API фотографий Google

Я создаю приложение, используя API фотографий Google на php. Вот мой код

function connectWithGooglePhotos()
{
$clientSecretJson = json_decode(
    file_get_contents('credentials.json'),
    true
)['web'];
$clientId = $clientSecretJson['client_id'];
$clientSecret = $clientSecretJson['client_secret'];
$tokenUri = $clientSecretJson['token_uri'];
$redirectUri = $clientSecretJson['redirect_uris'][0];
$scopes = ['https://www.googleapis.com/auth/photoslibrary'];

$oauth2 = new OAuth2([
    'clientId' => $clientId,
    'clientSecret' => $clientSecret,
    'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
    'redirectUri' => $redirectUri,
    'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
    'scope' => $scopes,
]);

// The authorization URI will, upon redirecting, return a parameter called code.
if (!isset($_GET['code'])) {
    $authenticationUrl = $oauth2->buildFullAuthorizationUri(['access_type' => 'offline']);
    header('Location: ' . $authenticationUrl);
} else {
    // With the code returned by the OAuth flow, we can retrieve the refresh token.
    $oauth2->setCode($_GET['code']);
    $authToken = $oauth2->fetchAuthToken();
    $refreshToken = $authToken['access_token'];

    // The UserRefreshCredentials will use the refresh token to 'refresh' the credentials when
    // they expire.
    $_SESSION['credentials'] = new UserRefreshCredentials(
        $scopes,
        [
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'refreshToken' => $refreshToken,
        ]
    );

    $photosLibraryClient = new PhotosLibraryClient(['credentials' => $_SESSION['credentials']]);
}

return $photosLibraryClient;
}

Вот ошибка при перенаправлении для аутентификации

Неустранимая ошибка: Uncaught InvalidArgumentException: в json-ключе отсутствует поле refresh_token в C: \ xampp \ htdocs \ gphotos \ vendor \ google \ auth \ src \ Credentials \ UserRefreshCredentials.php: 78 Трассировка стека: # 0 C: \ xampp \ htdocs \ gphotos \ config.php (49): Google \ Auth \ Credentials \ UserRefreshCredentials -> __ construct (Array, Array) # 1 C: \ xampp \ htdocs \ gphotos \ index.php (5): connectWithGooglePhotos () # 2 {main} брошено в C: \ xampp \ htdocs \ gphotos \ vendor \ google \ auth \ src \ Credentials \ UserRefreshCredentials.php в строке 78

Любые решения будут оценены по достоинству!


person Community    schedule 22.04.2019    source источник
comment
Робин, проверь мой ответ. Сообщите мне, если у вас все еще возникнут проблемы   -  person Danyal Sandeelo    schedule 22.04.2019


Ответы (1)


'refreshToken' должен быть 'refresh_token', потому что ключ для токена обновления - refresh_token

поэтому вам нужно изменить свои учетные данные на

[
   'client_id' => $clientId,
   'client_secret' => $clientSecret,
   'refresh_token' => $refreshToken,
]
person Danyal Sandeelo    schedule 22.04.2019
comment
Даньял, не могли бы вы еще раз проверить код и рассказать мне, почему токен обновления не работает. Он истекает через 1 час и показывает мне ошибку, например, токен отозван - person ; 24.04.2019
comment
какое исключение вы получаете? - person Danyal Sandeelo; 24.04.2019
comment
Теперь я не на своем компьютере, но он сказал, что срок действия вашего токена истек или он отозван - person ; 24.04.2019
comment
{error: invalid_grant, error_description: срок действия токена истек или он отозван. } - person ; 24.04.2019
comment
это означает, что срок действия токена обновления истек. Вам нужно его регенерировать - person Danyal Sandeelo; 24.04.2019
comment
Есть ли способ автоматически сгенерировать токен по истечении срока его действия? - person ; 24.04.2019
comment
как вы получили токен обновления, вам нужно его регенерировать - person Danyal Sandeelo; 24.04.2019