Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menyelesaikan Ralat 'invalid_grant' Apabila Menyegarkan Token Akses API Google Analitis?

Bagaimana untuk Menyelesaikan Ralat 'invalid_grant' Apabila Menyegarkan Token Akses API Google Analitis?

Barbara Streisand
Barbara Streisandasal
2024-12-02 09:58:17153semak imbas

How to Troubleshoot the

Menyegarkan Token Akses dengan Klien API Google

Apabila berinteraksi dengan API Google Analitis (V3), adalah penting untuk mengendalikan tamat tempoh token untuk mengekalkan akses kepada data. Klien API Google menyediakan kaedah refreshToken() untuk mendapatkan token akses baharu menggunakan token muat semula. Walau bagaimanapun, anda mungkin menghadapi ralat "invalid_grant" semasa cuba menggunakan kaedah ini.

Memahami Tamat Tempoh Token

Token akses mempunyai jangka hayat yang terhad, biasanya satu jam. Selepas token tamat tempoh, token akses baharu mesti diperolehi. Kaedah refreshToken() boleh digunakan untuk mendapatkan semula token akses baharu.

Menyahpepijat Ralat "invalid_grant"

Ralat "invalid_grant" menunjukkan bahawa token refresh menjadi digunakan tidak sah atau telah tamat tempoh. Untuk menyelesaikan masalah ini, sahkan perkara berikut:

  • Pastikan anda menggunakan token muat semula yang betul yang dikaitkan dengan token akses tamat tempoh.
  • Semak sama ada token muat semula belum tamat tempoh (ianya jangka hayat adalah lebih kurang 6 bulan).

Kod Contoh

Di bawah ialah contoh ringkas yang menunjukkan cara memuat semula token akses dan menyimpannya dalam pangkalan data:

<?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);

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'invalid_grant' Apabila Menyegarkan Token Akses API Google Analitis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn