Heim > Backend-Entwicklung > PHP-Tutorial > Wie behebe ich den Fehler „invalid_grant' beim Aktualisieren von Google Analytics-API-Zugriffstokens?

Wie behebe ich den Fehler „invalid_grant' beim Aktualisieren von Google Analytics-API-Zugriffstokens?

Barbara Streisand
Freigeben: 2024-12-02 09:58:17
Original
168 Leute haben es durchsucht

How to Troubleshoot the

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:

  • Stellen Sie sicher, dass Sie das richtige Aktualisierungstoken verwenden, das dem abgelaufenen Zugriffstoken zugeordnet ist.
  • Überprüfen Sie, dass das Aktualisierungstoken nicht abgelaufen ist (s Die Lebensdauer beträgt ca. 6 Monate).

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage