Доступ к Google My Business API без входа в систему (с использованием служебной учетной записи)

Я хочу получить доступ к местоположениям, связанным с моей учетной записью, и их обзорам, для этого я использую Google My Business API, и у меня есть к нему доступ (он работает на oAuthplayground).

Теперь я хочу получить доступ к API Google My Business без входа в свою учетную запись, для этого я пытаюсь заставить его работать с учетной записью службы. Но пока не повезло, посоветуйте, пожалуйста, как это сделать. Я включил пакет G в учетной записи службы, и я также попытался предоставить доступ к электронной почте (идентификатору) учетной записи службы для управления моим бизнесом, но он остается в состоянии Приглашен, поскольку нет возможности чтобы принять приглашение.

Когда я пытаюсь отправить запрос, используя мою учетную запись в качестве темы.

$client = new Google_Client();
$client->addScope('https://www.googleapis.com/auth/plus.business.manage');
$client->setAuthConfig(dirname(__FILE__) . '/Xyz Review API-service account.json');
$client->setSubject('xyz*****[email protected]');
$business_service_class = new Google_Service_Mybusiness($client);
$result_accounts = $business_service_class->accounts->listAccounts();
echo json_encode($result_accounts);
exit;

Ответ: {"nextPageToken": null}

Если я использую идентификатор учетной записи службы Google в качестве идентификатора электронной почты в теме, я получаю следующий ответ.

$client->setSubject('[email protected]');

Ответ: Ошибка 500 {«ошибка»: «unauthorized_client», «error_description»: «Неавторизованный клиент или область в запросе». }

Если я делаю это совершенно неправильно, пожалуйста, посоветуйте, как это сделать. Спасибо.


person Hmmm    schedule 21.11.2016    source источник
comment
Я не совсем уверен, будет ли API работать со служебной учетной записью, однако, насколько я понимаю, чтобы использовать служебную учетную запись так, как вы хотите, вам необходимо включить делегирование на уровне домена. Я вижу, что Google My Business отображается как служба, включенная в Другие службы Google учетной записи G Suite. Вы пробовали следовать инструкциям здесь developers.google.com/api -client-library / php / auth /? Может, вам просто нужно включить DWD. Сообщите мне, если это сработает.   -  person Morfinismo    schedule 21.11.2016
comment
@Morfinismo Я включил DWD в учетной записи службы, затем попробовал только вызовы API, указанные выше.   -  person Hmmm    schedule 22.11.2016
comment
@ Хммм, у вас когда-нибудь был мой бизнес-API, работающий со служебной учетной записью? если да, то как?   -  person Zath    schedule 15.05.2017
comment
@Zath ... Нет, чувак ... Пытался несколько раз, но у меня ничего не работало. Может и сейчас заработает не уверен насчет текущей версии. Я пытался найти средний рейтинг и все отзывы о местах, связанных с учетной записью Gmail. Попробуйте и скажите, решите ли вы это.   -  person Hmmm    schedule 16.05.2017


Ответы (2)


Я столкнулся с проблемой аутентификации для моей внутренней службы с помощью API Google. В основном существует два метода:

  1. создайте страницу, чтобы принять ваше приложение для доступа к учетной записи Google
  2. создать сертификат для аутентификации приложения с «неявным» утверждением

Как я уже сказал, я использую API Google для внутреннего проекта, поэтому о первом варианте не может быть и речи (служба не является общедоступной). Перейдите на https://console.cloud.google.com и создайте новый проект, затем перейдите к " api manager "затем" учетные данные ", затем создайте" учетные данные службы ".

Если вы выполните все эти шаги, у вас есть сертификат с расширением .p12, это ваш ключ для доступа к google api (помните, что вам нужно включить ключ для доступа к конкретному google api, который вы хотите).

Я вставляю пример, извлеченный из моего проекта, я использую календарь Google, но аутентификация одинакова для каждой службы.

   $client_email = '[email protected]';
    $private_key = file_get_contents(__DIR__ . '/../Resources/config/xxxx.p12');
    $scopes = array('https://www.googleapis.com/auth/calendar');
    $credentials = new \Google_Auth_AssertionCredentials(
        $client_email,
        $scopes,
        $private_key
    );

    $this->client = new \Google_Client();
    $this->client->setAssertionCredentials($credentials);  
person m47730    schedule 30.11.2016
comment
Google_Auth_AssertionCredentials удален из google-api -php версии 2. (Вы можете проверить здесь - github.com/google/google-api-php-client/blob/master/) Я загрузил json вместо .p12, и шаги такие же, все еще не работают. - person Hmmm; 13.12.2016

Вот что у меня получилось в 2021 году, работая с NodeJS:

Чтобы войти в систему в качестве учетной записи службы для проверки подлинности сервера на сервер, вам необходимо включить делегирование домена для своей учетной записи службы. https://developers.google.com/admin-sdk/directory/v1/guides/delegation

Как только вы это сделаете, вы можете сделать вход в свой сервисный аккаунт в Google My Business API, выдав себя за адрес электронной почты утвержденного менеджера My Business. Это в NodeJS, вот что я использовал:

const { google } = require('googleapis'); // MAKE SURE TO USE GOOGLE API
const { default: axios } = require('axios'); //using this for api calls

const key = require('./serviceaccount.json'); // reference to your service account
const scopes = 'https://www.googleapis.com/auth/business.manage'; // can be an array of scopes

const jwt = new google.auth.JWT({
  email: key.client_email,
  key: key.private_key,
  scopes: scopes,
  subject: `[email protected]`
});

async function getAxios() {

  const response = await jwt.authorize() // authorize key
  let token = response.access_token // dereference token
  console.log(response)

    await axios.get('https://mybusiness.googleapis.com/v4/accounts', {
      headers: {
        Authorization: `Bearer ${token}`
      } // make request
    })
    .then((res) => { // handle response
      console.log(res.data);
    })
    .catch((err) => { // handle error
      console.log(err.response.data);
    })
  }

await getAxios(); // call the function
person Julian-Life    schedule 29.07.2021