Google API 클라이언트로 액세스 토큰 새로 고침
Google Analytics API(V3)와 상호작용할 때 유지 관리를 위해 토큰 만료를 처리하는 것이 중요합니다. 데이터에 대한 액세스. Google API 클라이언트는 새로 고침 토큰을 사용하여 새 액세스 토큰을 얻기 위해 RefreshToken() 메서드를 제공합니다. 그러나 이 방법을 사용하려고 시도하는 동안 "invalid_grant" 오류가 발생할 수 있습니다.
토큰 만료 이해
액세스 토큰의 수명은 제한되어 있으며 일반적으로 1시간입니다. 토큰이 만료된 후에는 새 액세스 토큰을 얻어야 합니다. RefreshToken() 메서드를 사용하여 새 액세스 토큰을 검색할 수 있습니다.
"invalid_grant" 오류 디버깅
"invalid_grant" 오류는 새로 고침 토큰이 사용된 내용이 유효하지 않거나 만료되었습니다. 이 문제를 해결하려면 다음을 확인하십시오.
코드 예
다음은 액세스 토큰을 새로 고치고 데이터베이스에 저장하는 방법을 보여주는 간단한 예입니다.
<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!