Heim >Backend-Entwicklung >PHP-Tutorial >Wie behebe ich „invalid_grant'-Fehler beim Aktualisieren von Tokens mit der Google Analytics-API?
Token mit Google API-Client aktualisieren
Bei der Verwendung der Google Analytics API (V3) können Benutzer auf Fehler stoßen, insbesondere beim Versuch, sie abzurufen Daten von anderen Konten als ihrem Testkonto. Dieses Problem manifestiert sich normalerweise als 403-Fehler. Darüber hinaus kann das Problem auch nach dem Widerrufen und erneuten Authentifizierung des Tokens nach Ablauf des Tokens erneut auftreten.
Um dieses Problem zu beheben, besteht die Lösung darin, die Methode „refreshToken“ zu verwenden, um ein neues Authentifizierungstoken zu erhalten. Allerdings kann die Ausführung von $client->refreshToken(refresh_token_key) zu einer ungültigen Gewährungsfehlermeldung („error“: „invalid_grant“) führen.
Bei der Untersuchung des Codes hinter der Methode „refreshToken“ wird Folgendes deutlich Parameter werden gesendet richtig:
Die Das Verfahren zur Token-Aktualisierung ist wie folgt folgt:
$client = new apiClient(); $client->setClientId($config['oauth2_client_id']); $client->setClientSecret($config['oauth2_client_secret']); $client->setRedirectUri($config['oauth2_redirect_uri']); $client->setScopes('https://www.googleapis.com/auth/analytics.readonly'); $client->setState('offline'); $client->setAccessToken($config['token']); // The access JSON object. $client->refreshToken($config['refreshToken']); // Will return error here
Der Schlüssel zur Lösung des Problems ist das Verständnis, dass dieses bei der Authentifizierung erhaltene anfängliche Token über ein Aktualisierungstoken verfügt. Während der ursprüngliche Token innerhalb einer Stunde abläuft, kann der Aktualisierungstoken genutzt werden, um einen neuen Token zu erhalten. Es ist jedoch wichtig zu beachten, dass auch dieses temporäre Token nach einer Stunde abläuft und kein Aktualisierungstoken zugeordnet ist. Um ein neues temporäres Token abzurufen, muss daher das Aktualisierungstoken des ursprünglichen Tokens verwendet werden.
Der Übersichtlichkeit halber bietet der folgende Code eine detaillierte Erklärung:
// Retrieve original token from database $tokenquery = "SELECT * FROM token WHERE type='original'"; $tokenresult = mysqli_query($cxn, $tokenquery); if ($tokenresult != 0) { $tokenrow = mysqli_fetch_array($tokenresult); extract($tokenrow); } $time_created = json_decode($token)->created; $t = time(); $timediff = $t - $time_created; $refreshToken = json_decode($token)->refresh_token; // Initialize Google client $client = new Google_Client(); $client->setApplicationName(''); $client->setScopes(array()); $client->setClientId(''); $client->setClientSecret(''); $client->setRedirectUri(''); $client->setAccessType('offline'); $client->setDeveloperKey(''); // Refresh token if expired if (($timediff > 3600) && ($token != '')) { $refreshquery = "SELECT * FROM token WHERE type='refresh'"; $refreshresult = mysqli_query($cxn, $refreshquery); // If refresh token exists if ($refreshresult != 0) { $refreshrow = mysqli_fetch_array($refreshresult); extract($refreshrow); $refresh_created = json_decode($token)->created; $refreshtimediff = $t - $refresh_created; // If refresh token is also expired if ($refreshtimediff > 3600) { $client->refreshToken($refreshToken); $newtoken = $client->getAccessToken(); $tokenupdate = "UPDATE token SET token='$newtoken' WHERE type='refresh'"; mysqli_query($cxn, $tokenupdate); $token = $newtoken; echo "refreshed again"; } else { $client->setAccessToken($token); echo "use refreshed token but not time yet"; } } else { $client->refreshToken($refreshToken); $newtoken = $client->getAccessToken(); $tokenupdate = "INSERT INTO token (type, token) VALUES ('refresh', '$newtoken')"; mysqli_query($cxn, $tokenupdate); $token = $newtoken; echo "refreshed for first time"; } } // If token is still valid if (($timediff < 3600) && ($token != '')) { $client->setAccessToken($token); } $service = new Google_DfareportingService($client);
Das obige ist der detaillierte Inhalt vonWie behebe ich „invalid_grant'-Fehler beim Aktualisieren von Tokens mit der Google Analytics-API?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!