Я исправил проблему. Токен должен сохраняться в файле точно так же, как возвращенный из Google. но моя ошибка заключалась в том, что я разбираю токен и сохраняю только $token['access_token']
. так:
require __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfigFile(__DIR__ . '/credentials.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/index.php');
$client->addScope(Google_Service_Drive::DRIVE);
$client->setAccessType('offline');
$client->setApprovalPrompt ("force");
if ( !isset($_GET['code']) ) {
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
$client->authenticate($_GET['code']);
$token=$client->fetchAccessTokenWithAuthCode($_GET['code']);
$client->setAccessToken($accessToken);
file_put_contents(__DIR__ .'/'.$tokenPath, json_encode($client->getAccessToken()));
}
и читать токен из файла и использовать json_decode
:
require __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfigFile(__DIR__ . '/credentials.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/index.php');
$client->addScope(Google_Service_Drive::DRIVE);
$client->setAccessType('offline');
$tokenPath = 'token.json';
if (file_exists($tokenPath)) {
$accessToken = json_decode(file_get_contents(__DIR__ .'/'.$tokenPath), true);
$client->setAccessToken($accessToken);
}
var_dump($client->isAccessTokenExpired());