Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menyelesaikan Ralat 'invalid_grant' Apabila Menyegarkan Token Akses API Google Analitis?
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:
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!