如何通过服务帐户身份验证获取营业地点(和评论)

How to get Business Locations (and Reviews) via Service Account authentication

我无法根据我的代码从我的公司获取位置列表(PHP 使用“Google APIs Client Library for PHP" together with "Google_Service_MyBusiness" Classes) when I use the "Service Account" authentication,API return 是一个空的位置列表.

我已经有了 Prerequisites and did the Basic setup,顺便说一句,我在 OAuth Playground 上成功获得了特定 AccountId 下的信息,例如:1111111111,由 "OAuth Playground" 上的另一个响应提供. (PS:我用我的 "PERSONAL" 和 "LOCATION_GROUP" 帐户进行了测试,并且都成功了)。

但是当我尝试通过服务器帐户身份验证对我的代码进行操作时,我无法获取所有信息,只能获取 return 另一个 AccoundId 的帐户数据,例如:2222222222,不同的帐户我上了 OAuth Playground。

我在 OAuth Playground 上执行了身份验证过程,使用的是我创建 "Service Account" 的同一个项目,顺便说一下,这个 "Service Account" 的权限是 OWNER。

之前,我在 Google 我的公司中的角色是 "SITE_MANAGER",所以我看到 a forum answer 只有 "MANAGER" level/role 可以列出Locations,所以我请求更改我的权限,但在 Locations 列表上没有成功。

所以,我看到另一个 Google My Business support article 建议创建一个 "Location Group" 并将我当前的 "Location" 放入这个组以便于处理它,我做了但又没有成功。

我的代码很简单,基于Google guide, OAuth 2.0 for Server to Server Applications, and some Forum Questions(顺便说一句,作者的问题和我有同样的问题):

<?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);
        }
    }
}

我预计我的公司位置(还有评论,但这是下一步),但我得到的位置列表是空的。

最后,我第一次使用 ClientId/ClientSecret 密钥和之前在 Google OAuth 2 Playground 上收到的刷新令牌获得了成功,而不是 "Service Account" 认证方式:)

$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(' ###### ')

现在我获得了申请所需的所有数据。