Используйте код авторизации от клиента js для получения данных с php от пользователя (автономный доступ) - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь получить данные через бэкэнд php, используя js-библиотеку Google API.

На первом шаге пользователь авторизует приложение через OAuth во внешнем интерфейсе

const scopes = [
        'https://www.googleapis.com/auth/analytics',
        'https://www.googleapis.com/auth/analytics.readonly',
        'https://www.googleapis.com/auth/analytics.edit',
]

gapi.load('client:auth2', () => {
        this.gaAuth = gapi.auth2.init({
            client_id: '965399848242-skdqgktduruufpqtcuhvm9oqlpk21qq4.apps.googleusercontent.com',

            scope: scopes.join(' ')
        }).grantOfflineAccess().then(
            success => {

                // send and save authorization code to server/database

            },
            error => {
            });
    });

Теперь я хочуполучить данные аналитики через php, используя код авторизации, который будет получен из внешнего интерфейса (см. код ниже)

  $googleClient = new Google_Client();
  $googleClient->setAuthConfig(storage_path('google/client_secret.json'));
  $googleClient->fetchAccessTokenWithAuthCode($authorizationCodeFromFrontend);

  $googleClient->setScopes([
        'https://www.googleapis.com/auth/analytics.readonly',
        'https://www.googleapis.com/auth/analytics.edit',
        'https://www.googleapis.com/auth/analytics'
   ]);

  $analyticsClient = new Google_Service_Analytics($googleClient); 

  return response()->json($analyticsClient
            ->management_accounts
            ->listManagementAccounts()
            ->getItems());

Но я получаю следующую ошибку:

{"error":{"errors":[{"domain":"global","reason":"required","message":"Login Required","locationType":"header","location":"Authorization"}],"code":401,"message":"Login Required"}}

Редактировать: после некоторой отладки яувидел, что я получаю ошибку от fetchAccessTokenWithAuthCode метод:

 'error' => 'invalid_grant',
 'error_description' => 'Bad Request', 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...