- Создал Google Cloud Project < /li>
включенная Api Google Calendar для заинтересованной учетной записи < /li>
. the Google Calendar's Settings, to allow for the privileges Make changes / Manage access for that e-mail. - downloaded the most recent version of the google api client (https://packagist.org/packages/google/apiclient).
- Went to Google Service Accounts > Keys > Generated new key file as JSON, let's say access.json.
- Implement code for generation of calendar API appointment, including recent patches (https://developers.google.com/calendar/ ... er_07_2020), within PHP:
Код: Выделить всё
putenv('GOOGLE_APPLICATION_CREDENTIALS=my/key/data/directoy/access.json');
$client = new Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Calendar::CALENDAR);
$client->setSubject("{address_explained_below}");
// Set up the Calendar API service
$service = new Google_Service_Calendar($client);
// Create a new event on Google Calendar
$event = new Google_Service_Calendar_Event(
[
'summary' => 'Meeting',
'start' => [
'dateTime' => '2023-04-07T10:00:00-07:00',
// Replace with your desired start time
'timeZone' => 'America/Los_Angeles',
// Replace with your desired timezone
],
'end' => [
'dateTime' => '2023-04-07T11:00:00-07:00',
// Replace with your desired end time
'timeZone' => 'America/Los_Angeles',
// Replace with your desired timezone
]
]
);
// Set the event's conference data to use Google Meet
$conferenceRequest = new Google_Service_Calendar_CreateConferenceRequest();
$conferenceRequest->setRequestId(uniqid());
$solution_key = new Google_Service_Calendar_ConferenceSolutionKey();
$solution_key->setType("hangoutsMeet");
$conferenceRequest->setConferenceSolutionKey($solution_key);
$conference = new Google_Service_Calendar_ConferenceData();
$conference->setCreateRequest($conferenceRequest);
$event->setConferenceData($conference);
// Insert the event into the user's calendar
$calendarId = 'myCalendarsID';
$event = $service->events->insert(
$calendarId,
$event,
[ 'conferenceDataVersion' => 1 ]
);
var_dump($event);
// Retrieve the generated Google Meet link from the event's conference data
$meetLink = $event->getHangoutLink();
< /code>
Я действительно пытался следовать советам всех других сообщений по этому вопросу на этом форуме; Но ничего не сделало трюк, и теперь я получаю ошибку 400 плохой запроса Код: Выделить всё
hangoutsMeetКод: Выделить всё
GET https://www.googleapis.com/calendar/v3/calendars/{calendarId}Я действительно могу подтвердить, что Hangoutsmeet находится в пределах AltingConferenceOltionTypes .
Код: Выделить всё
{
"kind": "calendar#calendar",
"etag": "secret",
"id": "secret",
"summary": "secret",
"timeZone": "secret",
"conferenceProperties": {
"allowedConferenceSolutionTypes": [
"hangoutsMeet"
]
}
}
< /code>
Поэтому я полагаю, что, согласно @lorena gomez (спасибо!) Комментарий, что я должен «предоставить делегирование по всей домену своей учетной записи службы и выдать за пользователя права на этот календарь», хотя я не совсем ясно в том, что это на самом деле означает /делает. Похоже, что это сработало, хотя я не вижу никакой разницы в панели услуг на экране «IAM и Management» в рамках соответствующей учетной записи обслуживания. Это делегирование может занять некоторое время, чтобы оказать влияние?$client->setSubject($user_to_impersonate);служит для того, чтобы выдать себя за пользователя правами на этот календарь. Но каково значение $ user_to_impersonate здесь? Я предоставил адрес электронной почты учетной записи службы, для которой я предоставил делегирование по всей области для https://www.googleapis.com/auth/calendar , и в этом случае я все еще получаю:
Код: Выделить всё
Google_Service_Exception: {
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid conference type value."
}
],
"code": 400,
"message": "Invalid conference type value."
}
}
< /code>
Тогда я попробовал его с адресом электронной почты учетной записи Google, которая фактически владеет календарем, что привело к: < /p>
Google_Service_Exception: {
"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested."
}
Error code: 401
< /code>
Я затем попробовал его с идентификатором пользователя учетной записи службы, которая была предоставлена делегированием по всей домену, которая, когда я получаю: < /p>
Caught Google_Service_Exception: {
"error": "invalid_request",
"error_description": "Invalid principal"
}
Error code: 400
< /code>
Значит, я не понимаю, что мне все еще не хватает? Я обновил свой код выше в состоянии, как и сейчас (string address_expliend_below Я теперь сделал последнюю попытку, когда я создал новую учетную запись, включил в доменную делегацию для него, сгенерировал ключи доступа и загрузил их на сервер. Когда затем запустил приведенный выше код с адресом электронной почты этой недавно созданной учетной записи службы, я получил 404, не найденную ошибку. Затем я пошел в настройки календаря Google в соответствующем календаре и добавил адрес электронной почты учетной записи услуги в разделе «Общие с конкретными людьми или группами» (я перевел эту часть; это часть, где вы можете предоставить доступ к вашему календарю для других). После этого и повторного разъединения приведенного выше сценария, я снова получаю неверное значение типа конференции 400 .
Единственное, о чем я могу придумать, это то, что Putenv вызов устанавливает значение переменной (проверяется с getenv ) к абсолютному пути к .json , с учета сервера. Это намерение? Как учетные данные читаются/доступны? Просто спросите, потому что файл .json находится в каталоге 0500 , а сам файл .json также является 0500 , но это должно быть в порядке? И ну, я застрял. Потому что в настоящее время это не так ...
Подробнее здесь: https://stackoverflow.com/questions/759 ... -meet-link
Мобильная версия