Получение проблем с токенами доступа с использованием клиентских библиотек PHP - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь интегрировать несколько вызовов Google API в пользовательский модуль Drupal 8.

В основном я пытаюсь сначала получить свой пользовательский класс, чтобы получить токен доступа от Google через OAuth, прежде чем я попытаюсь сделать что-то еще,Я делаю это с помощью функции класса со всем просто в одном месте.Функция выглядит следующим образом:

public function testTokenRequest(): void
{
    // Setup Google Client Config within context of initialized class
    $this->googleClient->setClientId($this->googleClientID);
    $this->googleClient->setClientSecret($this->googleClientSecret);
    $this->googleClient->setDeveloperKey($this->googleApiKey);

    // Add Google MyBusiness scope
    $this->googleClient->setScopes(array('https://www.googleapis.com/auth/plus.business.manage'));

    try {
        $accessToken = $this->googleClient->getAccessToken(); // null returned where breakpoint hit

        $this->googleAccessToken = $accessToken; // Put xdebug breakpoint here
    } catch (Exception $exception) {
        echo $exception->getMessage();
    }
}

В настоящее время все, что я получаю, - это нулевое значение, возвращаемое для вызова $accessToken = $this->googleClient->getAccessToken();.

Неуверенный, где я иду неправильно, возможно вызов AddScopes, потому что поставщикдокументация для apiclient делает это немного по-другому, то есть $client->addScope(Google_Service_Plus::PLUS_ME);, но я не смог найти правильный класс для использования в области действия MyBusinessAPI, поэтому вместо этого использовал строку детской площадки OAuth https://www.googleapis.com/auth/plus.business.manage

Я получаю OAuth Playground AccessTokenвозвращается, когда я его использую, но вместо этого получаю сообщение об ошибке «Отказано в доступе», хотя в мой белый список добавлен API-интерфейс GMB под учетными данными.

1 Ответ

0 голосов
/ 24 января 2019

Google MyBusiness основан на Oauth2.Токен доступа не будет получен до тех пор, пока пользователь не утвердит ваше приложение. Обычно функция возвращает ноль, если пользователь еще не утвердил приложение.

Вот пример того, как создать ссылку, гдеотправьте пользователя для запуска аутентификации и авторизации для вашего приложения.

        $client = new \Google_Client();
        $client->setAuthConfig(getcwd() . '/../client_secret.apps.googleusercontent.com.json');
        $client->setAccessType("offline");        // offline access
        $client->setIncludeGrantedScopes(true);   // incremental auth
        $client->addScope(
            array(
                'https://www.googleapis.com/auth/userinfo.email',
                'https://www.googleapis.com/auth/userinfo.profile',
                'https://www.googleapis.com/auth/plus.business.manage'
            )
        );
        $client->setRedirectUri('http://server.com/code');
        $client->setApprovalPrompt('force');

        return new Response(
            '<html><body>Authenticate here : <a href="' .
            $auth_url = filter_var($client->createAuthUrl(), FILTER_SANITIZE_URL)
            . '">HERE</a></body></html>'
        );

В приведенном выше примере предполагается, что на вашем сервере также будет реализована конечная точка /code, куда пользователь перенаправляется с токеном авторизации, затем необходимопозвоните в API для обмена токеном с кодом доступа и обновления.

Этот документ поможет вам разобраться https://developers.google.com/api-client-library/php/auth/web-app

...