ホームページ >バックエンド開発 >PHPチュートリアル >Google Analytics API アクセス トークンを更新する際の「invalid_grant」エラーのトラブルシューティング方法

Google Analytics API アクセス トークンを更新する際の「invalid_grant」エラーのトラブルシューティング方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 09:58:17151ブラウズ

How to Troubleshoot the

Google API クライアントを使用したアクセス トークンの更新

Google Analytics API (V3) を操作する場合、トークンの有効期限を管理してトークンを維持することが重要です。データへのアクセス。 Google API クライアントは、リフレッシュ トークンを使用して新しいアクセス トークンを取得するための refreshToken() メソッドを提供します。ただし、このメソッドを使用しようとすると、「invalid_grant」エラーが発生する可能性があります。

トークンの有効期限について

アクセス トークンの有効期限は限られており、通常は 1 時間です。トークンの有効期限が切れたら、新しいアクセス トークンを取得する必要があります。新しいアクセス トークンを取得するには、refreshToken() メソッドを使用できます。

「invalid_grant」エラーのデバッグ

「invalid_grant」エラーは、リフレッシュ トークンが無効であることを示します。使用されたものは無効であるか、有効期限が切れています。この問題をトラブルシューティングするには、次の点を確認してください:

  • 期限切れのアクセス トークンに関連付けられた正しいリフレッシュ トークンを使用していることを確認します。
  • リフレッシュ トークンの有効期限が切れていないことを確認します (寿命は約 6 か月です)。

コード例

以下は、アクセス トークンを更新してデータベースに保存する方法を示す単純な例です。

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

以上がGoogle Analytics API アクセス トークンを更新する際の「invalid_grant」エラーのトラブルシューティング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。