Google-api-php-Refresh-Token gibt invalid_grant
Habe ich fast gesucht, jedes Ergebnis auf der ersten Seite von google für diese. Aber kann nicht scheinen, um die Antwort zu finden. Ich arbeite mit einem refresh_token von Google ' s API und empfangen:
Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }
Dem, was ich Tue. Zuerst: ich bin erstellen und speichern einer persistenten Verbindung zu den google-api:
$client = new Google_Client();
$client->setClientId('xxxxxx-s73q0pa41aq3i2kcpatmpas6e6kkp99h.apps.googleusercontent.com');
$client->setClientSecret('xxxxxxxxxxxx');
$client->setRedirectUri('http://xxxxxxxx/generaterefreshtoken.php');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setAccessType('offline');
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
if (isset($_REQUEST['logout'])) {
unset($_SESSION['token']);
$client->revokeToken();
}
if ($client->getAccessToken()) {
$jsonarray = json_decode($client->getAccessToken());
$arrGoogleAuth['access_token']=$jsonarray->access_token;
$arrGoogleAuth['refresh_token']=$jsonarray->refresh_token;
//filewrite
$myFile = "refreshtoken.conf";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $client->getAccessToken());
fclose($fh);
/*
die();
$service = new Google_DriveService($client);
$file = new Google_DriveFile();
$file->setTitle('My document.txt');
$file->setDescription('A test document');
$file->setMimeType('text/plain');
$data = file_get_contents('document.txt');
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => 'text/plain',
));
print_r($createdFile);
*/
//The access token may have been updated lazily.
$_SESSION['token'] = $client->getAccessToken();
} else {
$auth = $client->createAuthUrl();
header("Location: $auth");
}
Also im Grunde läuft alles und das token wird gespeichert in einer Textdatei:
{
"access_token":"xxxxxxxxxxxxxxxN4U0ys2wy5monxs0Xh5fu5ayKL0OIENo-d1sN6g3YA",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"xxxxxxxxxxxxDON-l90BNUcJgnkfZWDfg",
"created":1358120143
}
Wenn ich versuche zu auth mit dem folgenden code:
$client = new Google_Client();
$client->setClientId($googleDriveConfig['clientid']);
$client->setClientSecret($googleDriveConfig['clientsecret']);
$client->setRedirectUri(curPageURL);
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->refreshToken(file_get_contents('../_config/refreshtoken.conf'));
$client->authenticate();
Bin ich immer die folgende Fehlermeldung:
Fehler Aktualisierung der OAuth2-token, message: '{ "error" : "invalid_grant" }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bevor Authentifizieren, es muss etwas wie:
$client->refreshToken( $refresh_token ); $_SESSION['token'] = $client->getAccessToken();
erhalten Sie die invalid_grant zurückgegeben, wenn Sie versuchen, zu aktualisieren, die etwas anderes als die, die dich am meisten kürzlich erteilt refresh token.Erhalten Sie eine "invalid_grant" Fehlermeldung, wenn Sie versuchen zu aktualisieren, wenn der token nicht abgelaufen ist.
Stattdessen:
Verwenden:
Sobald Ihr token abgelaufen, Sie aktualisieren sollte funktionieren.
Den invalid_grant bedeutet, dass entweder bedeutet, dass der authorization code wurde bereits verwendet (erhältlich in
$GET['code']
) oder der Art der Anwendung konfiguriert in der Google APIs-Konsole ist ungültig.Stellen Sie sicher, wählen Sie "Web Application" bei der Registrierung Ihrer app in der Google APIs-Konsole.
Die Funktion, die für mich gearbeitet ist wie folgt
$client->setAccessType("refresh_token");
Lief ich in etwas ähnliches, und das problem für mich war, meine system-Uhr (innerhalb des Docker-VM, wo ich war, läuft der code) war nicht synchron mit der realen Zeit. So fordern Sie ein token mit einem ERSTELLUNGSDATUM zu weit in der Vergangenheit oder Zukunft, die OAuth ist abzulehnen.
Ich war, kippte durch den Bericht hier.