Aktualisieren von Zugriffstokens mit dem Google API-Client
Bei der Interaktion mit der Google Analytics API (V3) ist es wichtig, den Ablauf des Tokens aufrechtzuerhalten Zugriff auf Daten. Der Google API-Client stellt eine Methode „refreshToken()“ bereit, um mithilfe eines Aktualisierungstokens ein neues Zugriffstoken abzurufen. Beim Versuch, diese Methode zu verwenden, kann jedoch der Fehler „invalid_grant“ auftreten.
Informationen zum Ablauf des Tokens
Ein Zugriffstoken hat eine begrenzte Lebensdauer, normalerweise eine Stunde. Nach Ablauf des Tokens muss ein neues Zugriffstoken erworben werden. Die Methode „refreshToken()“ kann verwendet werden, um ein neues Zugriffstoken abzurufen.
Debuggen des „invalid_grant“-Fehlers
Der „invalid_grant“-Fehler zeigt an, dass das Aktualisierungstoken vorhanden ist Der verwendete Wert ist ungültig oder abgelaufen. Um dieses Problem zu beheben, überprüfen Sie Folgendes:
Code Beispiel
Unten finden Sie ein vereinfachtes Beispiel, das zeigt, wie ein Zugriffstoken aktualisiert und in einer Datenbank gespeichert wird:
<?php use Google\Client; use Google\Service\Analytics; // Set up your client and credentials $client = new Client(); $client->setClientId('YOUR_CLIENT_ID'); $client->setClientSecret('YOUR_CLIENT_SECRET'); $client->setRedirectUri('YOUR_REDIRECT_URI'); $client->setScopes('https://www.googleapis.com/auth/analytics.readonly'); $client->setState('offline'); // Retrieve the original access token (with a refresh token) from your database $original_access_token = json_decode($token, true); $refresh_token = $original_access_token['refresh_token']; // Check if the original access token has expired $time_created = $original_access_token['created']; $time_now = time(); $time_diff = $time_now - $time_created; // Refresh the access token if it has expired if ($time_diff > 3600) { // Check if a refresh token exists in the database $refresh_token_query = "SELECT * FROM token WHERE type='refresh'"; $refresh_token_result = mysqli_query($cxn, $refresh_token_query); // If a refresh token exists, use it to get a new access token if ($refresh_token_result != 0) { $refresh_token_row = mysqli_fetch_array($refresh_token_result); $refresh_token_created = json_decode($refresh_token_row['token'], true)['created']; $refresh_token_time_diff = $time_now - $refresh_token_created; // If the refresh token has expired, update it if ($refresh_token_time_diff > 3600) { $client->refreshToken($refresh_token); $new_access_token = $client->getAccessToken(); // Update the refresh token in the database $refresh_token_update_query = "UPDATE token SET token='$new_access_token' WHERE type='refresh'"; mysqli_query($cxn, $refresh_token_update_query); // Update the original access token in the database $original_access_token_update_query = "UPDATE token SET token='$new_access_token' WHERE type='original'"; mysqli_query($cxn, $original_access_token_update_query); } else { // Use the existing refresh token to get a new access token $client->refreshToken($refresh_token); $new_access_token = $client->getAccessToken(); // Update the original access token in the database $original_access_token_update_query = "UPDATE token SET token='$new_access_token' WHERE type='original'"; mysqli_query($cxn, $original_access_token_update_query); } } else { // If a refresh token does not exist, retrieve a new one $client->refreshToken($refresh_token); $new_access_token = $client->getAccessToken(); // Insert the new refresh token into the database $refresh_token_insert_query = "INSERT INTO token (type, token) VALUES ('refresh', '$new_access_token')"; mysqli_query($cxn, $refresh_token_insert_query); // Update the original access token in the database $original_access_token_update_query = "UPDATE token SET token='$new_access_token' WHERE type='original'"; mysqli_query($cxn, $original_access_token_update_query); } } // Use the new or refreshed access token to make API calls $service = new Analytics($client);
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „invalid_grant' beim Aktualisieren von Google Analytics-API-Zugriffstokens?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!