Я использую Microsoft Graph, и мне нужно настроить веб-крючок для получения изменений в электронной почте и событиях календаря.Мне удалось заставить его работать с моим приложением PHP Laravel, но теперь, когда я пытаюсь подписаться на уведомления, у меня возникают проблемы с проверкой notificationUrl
, который указывает на мой публичный сервер.
Скрипт для создания веб-крюка возвращает следующую ошибку:
Client error: POST https://graph.microsoft.com/v1.0/subscriptions resulted in a 400 Bad Request response:
{
"error": {
"code": "InvalidRequest",
"message": "Subscription validation request failed. Response must ex (truncated...)
Мне кажется, что усеченная часть
Ошибка проверки подписки.На этот запрос нужно ответить 200 OK.
Вот мой код для создания подписки:
$data = [
"changeType" => "created",
"notificationUrl" => "https://anatbanielmethod.successengine.net/office365/webhooks/events",
"resource" => "me/events",
"expirationDateTime" => "2018-12-20T18:23:45.9356913Z",
"clientState" => "secret",
];
$result = $graph->createRequest('POST', '/subscriptions')
->attachBody($data)
->execute();
, и вот мой метод для моего notificationUrl
:
public function events()
{
//if validationToken exists return that to validate notificationUrl
if(isset($_REQUEST['validationToken'])){
return response($_REQUEST['validationToken'], 200)
->header('Content-Type', 'text/plain');
}
//process event normally for those that have already been validated
}
Еще раз этот URL общедоступный и живой , и я проверил его, используя Postman для отправки тестовых сообщений, и он работает нормально.Кроме того, я добавил этот маршрут к своему промежуточному программному обеспечению VerifyCsrfToken
, чтобы пост третьей стороны мог найти этот URL.
Первоначально я настроил простой одностраничный PHP-скрипт для проверки правильности notificationUrl
и этого простого сценария.работал нормально.Он успешно проверяет созданных Webhooks, которые указывают на это.Вот этот код скрипта на одну страницу:
<?php
if(isset($_REQUEST['validationToken'])){
echo $_REQUEST['validationToken']; // needed only once when subscribing
} else {
//process like normal not a validation Token request...
}
}
Итак, я ожидаю, что конечная точка Laravel будет работать как простой одностраничный PHP-скрипт, и это когда я тестирую оба URL в Postman, но конечную точку Laravelне проверяется, когда Office365 пытается проверить его при создании нового веб-крючка.
Я искал справку по этому вопросу и прочитал всю документацию Microsoft для разработчиков, которую я могу найти на веб-уроках, и это некоторые из наиболее полезных частей документации, но я до сих пор не могу найти ответ на этот вопрос.этот выпуск:
Есть идеи на этот счет?