0

У меня возникла странная проблема с клиентом API консоли Google Search (PHP). Прошлой ночью он работал (в конце концов), а затем этим утром тот же самый код больше не работал. Вместо получения данных в Google Analytics я получаю ошибку 401 «Недопустимые учетные данные».API-интерфейс Google Search Console (PHP) - разрешает один день, а затем на следующий день я получаю сообщение об ошибке «Неверные учетные данные»

Редактировать: У меня есть setSubject, закомментированный, поскольку он работал без этой прошлой ночи. Я пробовал сегодня с этим прокомментированным и без комментариев и не работал.

Редактировать 2: Я думал, что у меня это исправлено. Я изменил области, поэтому у него были оба типа области для API Search Console. Он снова начал загружать данные. Затем через час или два он снова начал возвращать ошибки «Недействительные учетные данные». Затем я изменил положение областей в массиве $ 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 «недействителен». Я хотел бы повторно повторить эту прошлую ночь, этот код работает и возвращает результаты для API Google Search Console.

ответ

0

Это связано с тем, что токен доступа к клиенту google истек. Маршрутизаторы проверки подлинности работают только 3600 секунд. После этого они истекают, и вам придется получить новый, используя токен обновления (который был отправлен вам в первоначальном запросе и который не истекает). Таким образом, проблема не связана с вашим приложением, а с тем, как вы имеете дело с доступом к API Google.

Я в той же ситуации, но пока не нашел подходящего решения. Не уверен, что мне нужно создать новую учетную запись службы, потому что я пропустил сохранение токена обновления. Пробовал с новыми ключами, но это не сработало.

+0

Я думаю, что я собираюсь использовать только OAuth, но у меня тоже есть проблемы с этим! – DL1984