3

当我使用“服务帐户”身份验证时,我无法在我的代码下从我的企业获取位置列表(PHP 使用“ Google APIs Client Library for PHP ”和“ Google_Service_MyBusiness ”类) ,API 返回一个空的位置列表.

我已经具备了先决条件并进行了基本设置,顺便说一句,我在 OAuth Playground 上成功获得了信息,在特定的 AccountId 下,例如:1111111111,由“OAuth Playground”上的另一个响应提供。(PS:我用我的“PERSONAL”和“LOCATION_GROUP”帐户进行了测试,并且都成功了)。

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

我在 OAuth Playground 上进行了身份验证过程,使用创建“服务帐户”的同一个项目,顺便说一下,这个“服务帐户”的权限是 OWNER。

以前,我在 Google 我的企业中的角色是“SITE_MANAGER”,所以我看到了一个论坛答案,其中只有“MANAGER”级别/角色可以列出位置,所以我请求更改我的权限,但继续不成功在位置列表上。

因此,我看到另一篇Google My Business 支持文章建议创建一个“位置组”并将我当前的“位置”放入该组以方便处理,我这样做了,但再次没有成功。

我的代码很简单,基于Google 指南OAuth 2.0 for Server to Server Applications和一些论坛问题(顺便说一句,作者的问题与我的问题相同):

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

我期望我的业务的位置(也是评论,但它是下一步),但我只是得到空的位置列表。

4

1 回答 1

6

最后,在我第一次授予(我的)应用程序权限时,我使用 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(' ###### ')

现在我得到了我的应用程序所需的所有数据。

于 2019-01-30T19:46:22.537 回答