当我使用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 guide,OAuth 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);
}
}
}
我希望获得我的公司位置(还有评论,但下一步),但是我只是得到了空的位置列表。
答案 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(' ###### ')
现在我已经获得了应用程序所需的所有数据。