如何通过服务帐户身份验证获取商户位置(和评论)

时间:2019-01-29 02:04:24

标签: php google-my-business-api

当我使用Google APIs Client Library for PHP时,我无法使用我的代码(使用“ Google_Service_MyBusiness”类和“ "Service Account" authentication”类的PHP)从我的公司获取位置列表。 API返回一个空的位置列表。

我已经有了Prerequisites并进行了Basic setup,顺便说一下,我在OAuth Playground上成功获得了该信息,该信息由特定的AccountId(例如1111111111)提供,由该地址上的另一个响应提供“ OAuth游乐场”。 (PS:我用我的“ PERSONAL”和“ LOCATION_GROUP”帐户进行了测试,并且都取得了成功。)

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

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

以前,我在Google我的商家上的公司角色是“ SITE_MANAGER”,因此我看到a forum answer上只有“ MANAGER”级别/角色可以列出位置,因此我请求更改权限,但是继续,因为在位置信息列表上没有成功。

因此,我看到另一个Google My Business support article建议创建一个“位置组”,并将我当前的“位置”放入该组中,以使其易于使用,但我这样做并没有成功。

我的代码很简单,基于Google guideOAuth 2.0 for Server to Server Applications和一些Forum Question(顺便说一下,作者的问题和我的问题相同):

<?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 :(得分:0)

最后,我第一次使用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(' ###### ')

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