如何通过服务帐户身份验证获取营业地点(和评论)
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(' ###### ')
现在我获得了申请所需的所有数据。
我无法根据我的代码从我的公司获取位置列表(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(' ###### ')
现在我获得了申请所需的所有数据。