Как настроить API Microsoft Graph (Bookings) для веб-приложений на PHP (wordpress)
Я новичок в Microsoft Graph API и борюсь с его правильной настройкой (использование с веб-приложением без маски входа), поэтому некоторые ошибки перечислены ниже с конкретным кодом.
Моя цель - получить информацию о календаре зарегистрированного пользователя MS-Teams из моего веб-приложения (плагин wordpress через PHP в серверной части), обновить представление календаря во внешнем интерфейсе и отправить сообщение о бронировании по почте для пользователя через Bookings-API (через Backend).
В настоящее время я пробую это с локального компьютера и локального wordpress (через localhost...). Я уже выполнил это с помощью учетной записи пользователя, вошедшего в систему (показывая маску входа в MS во внешнем интерфейсе, и теперь я хочу обрабатывать токен-процесс в бэкэнде, чтобы пользователи внешнего интерфейса не заметили).
Моя проблема в том, что я получал сообщение "Авторизация отклонена"
Uncaught GuzzleHttp\Exception\ClientException: Client error: `GET https://graph.microsoft.com/beta/bookingBusinesses?select=id` resulted in a `401 Unauthorized`
из следующего кода (пример кода):
$url = 'https://login.microsoftonline.com/{tenant-ID}/oauth2/v2.0/token';
$data = array(
'client_id' => 'xxxxxx-xxxxxx-xxxxxx-xxxxxx',
'client_secret' => 'xxxxxx',
'grant_type' => 'client_credentials',
'scope' => 'https://graph.microsoft.com/.default'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
затем я нашел этот ответ и изменил код (пример кода) на это:
$url = 'https://login.microsoftonline.com/{tenant-ID}/oauth2/v2.0/token';
$data = array(
'client_id' => 'xxxxxx-xxxxxx-xxxxxx-xxxxxx',
'client_secret' => 'xxxxxx',
'grant_type' => 'password',
'resource' => 'https://graph.microsoft.com',
'username' => 'Firstname Lastname/test.this@foo.bar',
'password' => 'xxxxxxx'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
В результате появляется следующая ошибка:
file_get_contents(): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
Это указывает на то, что я делаю что-то не так в запросе, но я также предполагаю, что, возможно, я испортил "настройку" своего приложения (после многих попыток в части "регистрация приложения" портала.)
Мое текущее зарегистрированное приложение настроено на:
Общие:
- платформа: Интернет
Авторизация:
- перенаправление: http://localhost:{порт}/sample-page/
- неявно предоставить: токен доступа
- Аккаунты в любой орг.
- Standardclienttype: нет
Сертификаты и секреты:
- Секрет клиента: xxxxx
Разрешения API: (все предоставлены)
Bookings.Manage.All
Bookings.Read.All
Bookings.ReadWrite.All
BookingsAppointment.ReadWrite.All
Календари. Читать
Календари.
User.ReadBasic.All
Может, все они мне не нужны?
Я также пытался использовать https://github.com/thephpleague/oauth2-client с "Client Credentials Grant", но получил ту же ошибку.
Может кто поможет, немного запуталась:(
Обновление для ошибки "400 неверный запрос": как и предполагалось, в структуре запроса что-то не так (скрытый символ в идентификаторе параметра).