У меня проблема с подключением через Google Apiclient 2.0.0, как установлено через композитор.
Вот что я сделал до сих пор:
Я установил apiclient через композитор.
я пошел в https://console.cloud.google.com/apis/credentials?my-project и перейдите на страницу «Менеджер API»> «Учетные данные».
Я создал учетные данные для учетной записи службы и загрузил JSON. Затем я загрузил JSON на свой сервер.
Я включил Domain Wide Delegation для этой учетной записи, управляя своими учетными записями служб.
Я подтвердил свое доменное имя на вкладке «Проверка домена».
Затем я перешел к своему календарю и поделился календарем с адресом электронной почты, связанным с моей учетной записью службы, предоставив доступ для управления.
Затем я поделился своим календарем с адресом электронной почты учетной записи службы.
Сейчас я пытаюсь использовать API для подключения и сталкиваюсь с проблемами авторизации.
$json_file = '/path/to/service-account-credentials.json';
$scopes = [
Google_Service_Calendar::CALENDAR,
Google_Service_Calendar::CALENDAR_READONLY
];
// create a new client and authorize
$client = new Google_Client();
// set the basic information of the client
$client->setApplicationName("Apointments");
$client->setSubject( [email protected] );
$client->setAccessType('offline');
// load the json credential file
$client->setAuthConfig( $json_file );
$client->setScopes( $scopes );
// check to see if the token is stored in the session
if( isset( $_SESSION['service_token'] ) )
{
// token was stored, use it with the cilent
$client->setAccessToken( $_SESSION['service_token'] );
}
// test the authorization to see if it is expired
if( $client->isAccessTokenExpired() )
{
// Failed authorization, get a new token
$client->refreshTokenWithAssertion();
}
// store the token in the session
$_SESSION['service_token'] = $client->getAccessToken();
Из трассировки стека я определила строку кода, которая нарушает работу:
$client->refreshTokenWithAssertion();
Что приводит к сообщению об ошибке:
Ответ клиента об ошибке [url] https://www.googleapis.com/oauth2/v4/token [код состояния] 401 [фраза причины] Несанкционированный
Есть мысли о том, где я ошибся?
Заранее спасибо,
Адам
То, как вы используете сервисную учетную запись, является действительным только для доступа к данным, связанным с вашим приложением или самой учетной записью службы. Так как вы хотите получить доступ Google Calendar
данные, вы должны быть администратором домена Служб Google с правами доступа к любым данным пользователя вашего домена. Данные Календаря Google принадлежат пользователям, поэтому вам нужно указать, к какому пользователю вы пытаетесь получить доступ.
Вам нужно authenticate
пользователю необходимо получить токен доступа и передать его. Если вы получаете токен доступа, вы можете вызвать информацию о токене, передавая токен доступа, чтобы получить больше информации о том, с кем связан пользователь.
Вот демонстрационное приложение Quick start, используйте его в качестве справочного материала: https://developers.google.com/+/web/samples/php
Других решений пока нет …