Как настроить 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 неверный запрос": как и предполагалось, в структуре запроса что-то не так (скрытый символ в идентификаторе параметра).

0 ответов

Другие вопросы по тегам