Я узнал от Google, когда искал об этой ошибке, что это связано с системным временем, не соответствующим NTP, или может быть превышен предел маркера обновления. Я попытался проверить системное время с помощью команды chronyc. кажется, все в порядке.
Я также пытался создать проект в консоли Google, чтобы заменить существующий ключ и службу, но я получаю ту же ошибку.
Ошибка:
Fatal error: Uncaught Google_Auth_Exception: Error refreshing the OAuth2 token, message: '{ "error": "invalid_grant", "error_description": "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems." }' in /Google.ads/Auth/OAuth2.php:363 Stack trace: #0 /Google.ads/Auth/OAuth2.php(312): Google_Auth_OAuth2->refreshTokenRequest(Array) #1 /crontask.php(62): Google_Auth_OAuth2->refreshTokenWithAssertion(Object(Google_Auth_AssertionCredentials)) #2 {main} thrown in /Google.ads/Auth/OAuth2.php on line 363
Код для запуска задачи cron, которая должна аутентифицировать Google Analytics
<?php
opcache_reset();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$url_to_replace = 'https://example.com';
$nonhttps_url = 'http://example.com';
$ga_limit = 5;
$ids = 'ga:XXXXXXXX';
$debug = 1;
include('../wp-load.php');
require_once ('Google.ads/autoload.php');
$client_id = 'XXXXXXXXXXXXXXXXXXXXXXX';
$service_account_name = 'XXXXXXXXXXXXXXXXXXXXXXX.iam.gserviceaccount.com';
$key_file_location = 'XXXXXXXXXXXXXXXXXXXX.p12';
//check if config are set correctly
if (!strlen($service_account_name) || !strlen($key_file_location)) {
echo missingServiceAccountDetailsWarning();
exit;
}
//google client object
$client = new Google_Client();
$client->setApplicationName("XXXXXXXXXXXXXXXX");
//google service object
$service = new Google_Service_Analytics($client);
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
//get key
$key = file_get_contents($key_file_location);
//authenticate
$cred = new Google_Auth_AssertionCredentials(
$service_account_name, array('https://www.googleapis.com/auth/analytics'), $key
);
//update client object with credentials
$client->setAssertionCredentials($cred);
//token
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
echo $client->getAccessToken();exit;
Я попытался создать несколько учетных записей служб в консоли Google, чтобы заменить файл ключа, идентификатор клиента и имя учетной записи службы. Но даже для более новых ключей появляется та же самая ошибка.
Вы можете проверить информацию о системном времени, которую я проверял, используя хроник выше. Посоветуйте, пожалуйста, как это решить. Мне просто нужно прочитать данные из Google Analytics. Он не проходит через часть аутентификации.
У меня нет root-доступа к системе. Так что я не могу изменить время.