У меня странная проблема с клиентом API консоли поиска Google (PHP). Прошлой ночью он работал (в конце концов), а сегодня утром точно такой же код больше не работает. Вместо того, чтобы получать данные Search Analytics, я получаю ошибку 401 «Неверные учетные данные».
Изменить: я прокомментировал setSubject, как он работал без той прошлой ночью. Я попробовал сегодня с этим комментарием и без комментариев, и ни одна из них не работает.
Редактировать 2: я думал, что это исправлено. Я изменил области видимости, чтобы они имели оба типа области видимости для API консоли поиска. Это начало загружать данные снова. Затем через час или два он снова начал выдавать ошибки «Недействительные учетные данные». Затем я изменил положение областей в массиве $ scopes, и он снова начал работать. Кажется, где-то что-то не так.
Вот мой код:
namespace App\Services;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config;
class Google {
private function googleApiAuthorise()
{
$client = new \Google_Client();
putenv('GOOGLE_APPLICATION_CREDENTIALS=/keys/Tool-xxxxxxxxxx.json');
$client->useApplicationDefaultCredentials();
//$client->setSubject('[email protected]');
$scopes = ['https://www.googleapis.com/auth/webmasters.readonly'];
$client->setScopes($scopes);
if( $client->isAccessTokenExpired()) {
$client->refreshTokenWithAssertion();
}
return $client;
}
public function getSearchAnalytics()
{
$client = Google::googleApiAuthorise();
$service = new \Google_Service_Webmasters($client);
$request = new \Google_Service_Webmasters_SearchAnalyticsQueryRequest;
$request->setStartRow(0);
$request->setStartDate('2016-06-01');
$request->setEndDate('2016-10-02');
$request->setSearchType('web');
$request->setRowLimit(100);
$request->setDimensions(array('query','country','device','page'));
$query_search = $service->searchanalytics->query("http://www.example.com/", $request);
$rows = $query_search->getRows();
return $rows;
}
}
У меня тогда есть контроллер:
$result = $google->getSearchAnalytics();
var_dump($result);
Когда я посещаю маршрут, который запускает этот контроллер, я получаю 401 «Неверные учетные данные». Я хотел бы повторить эту прошлую ночь, этот код как работающий и возвращающий результаты для Google Search Console API.
Это связано с тем, что срок действия маркера доступа клиентов Google истек. Токены аутентификации работают только 3600 секунд. После этого они истекают, и вам нужно будет получить новый, используя токен обновления (который был отправлен вам в первоначальном запросе и который не истекает). Таким образом, проблема связана не с вашим приложением, а с тем, как вы обращаетесь с доступом к API Google.
Я нахожусь в той же ситуации, но пока не нашел правильного решения. Не уверен, если мне нужно создать новую учетную запись службы, потому что я пропустил сохранение токена обновления. Пробовал с новыми ключами, но это не сработало.
Других решений пока нет …