>백엔드 개발 >PHP 튜토리얼 >Google Analytics API 액세스 토큰을 새로 고칠 때 'invalid_grant' 오류를 해결하는 방법은 무엇입니까?

Google Analytics API 액세스 토큰을 새로 고칠 때 'invalid_grant' 오류를 해결하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-02 09:58:17153검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.