Как получить бизнес местоположения (и отзывы) с помощью аутентификации учетной записи службы - PullRequest
0 голосов
/ 29 января 2019

Я не могу получить список Locations из моей компании по моему коду (PHP использует " Клиентскую библиотеку API Google для PHP " вместе с " Google_Service_MyBusiness " Классами), когда яиспользуйте аутентификацию "Сервисная учетная запись" , API возвращает пустой список местоположений.

У меня уже есть Предпосылки и выполнена Базовая настройка кстати, я с успехом получил информацию об OAuth Playground под определенным AccountId, например: 1111111111, предоставленную другим ответом там на «OAuth Playground».(PS: я проверил с моими учетными записями «PERSONAL» и «LOCATION_GROUP» и добился успеха с обоими). ​​

Но когда я пытаюсь сделать это через мой код через аутентификацию учетной записи сервера, я не могу получить всеинформация, только данные учетной записи, которые возвращают другой AccoundId, например, 2222222222, отличающийся от учетных записей, которые я получил на OAuth Playground.

Я выполнял процесс аутентификации на OAuth Playground, используя тот же проект, в котором я создал "Сервисная учетная запись ", кстати, разрешение этой" Сервисной учетной записи "является ВЛАДЕЛЕЦОМ.

Раньше моя роль в моей компании в Google My Business была" SITE_MANAGER ", поэтому я увидел форумответ , где только уровень / роль «МЕНЕДЖЕР» может перечислять местоположения, поэтому я попросил изменить свое разрешение, но это не помогло в списке местоположений.

Итак, я увидел еще один GoogleВ статье поддержки моего бизнеса , в которой рекомендуется создать «Группу местоположений» и поместить мое текущее «Местоположение» в эту группу, чтобы упростить ее обработку, я сделал этои снова безуспешно.

Мой код прост, основан на Руководстве Google , OAuth 2.0 для серверных приложений и некоторых Вопрос на форуме s (кстати, вопрос автора имеет ту же проблему, что и я):

<?php

putenv('GOOGLE_APPLICATION_CREDENTIALS=service-account-credentials.json');

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope("https://www.googleapis.com/auth/plus.business.manage");

require_once('Google_Service_MyBusiness.php');
$mybusinessService = new Google_Service_MyBusiness($client);

$accounts = $mybusinessService->accounts;
$accountsList = $accounts->listAccounts()->getAccounts();

foreach ($accountsList as $accKey => $account) {
    var_dump('$account->name', $account->name);

    $locations = $mybusinessService->accounts_locations;
    $locationsList = $locations->listAccountsLocations($account->name)->getLocations();
    var_dump('$locationsList', $locationsList);


    // Final Goal of my Code
    if (empty($locationsList)===false) {
        foreach ($locationsList as $locKey => $location) {
            $reviews = $mybusinessService->accounts_locations_reviews;
            $listReviewsResponse = $reviews->listAccountsLocationsReviews($location->name);
            $reviewsList = $listReviewsResponse->getReviews();
            var_dump('$reviewsList', $reviewsList);
        }
    }
}

Я ожидал Местоположение моей компании (также отзывы, но это следующий шаг), но я только что получил пустое Местоположениесписок.

1 Ответ

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

Наконец, я добился успеха, используя ключи ClientId / ClientSecret вместе с токеном обновления, ранее полученным на Google OAuth 2 Playground, когда я впервые даю разрешение (моему) приложению вместо способа аутентификации «Сервисная учетная запись»:)

$client = new Google_Client();

$client->setClientId($clientId);
$client->setClientSecret($clientSecret);

$client->addScope("https://www.googleapis.com/auth/plus.business.manage");
$client->setSubject('my email user on GMB');
$client->refreshToken(' ###### ')

Теперь я получил все необходимые данные для своего приложения.

...