Я создаю подписку для веб-хуков. Для реализации я использую https://github.com/microsoftgraph/msgraph-sdk-php
пакет.
Ниже приведена реализация функциональности
class WebhookRepository
{
public function __construct()
{
$this->graph = new Graph();
}
public function subscribe($accessToken)
{
try {
$this->graph->setAccessToken($accessToken);
$sub = new Model\Subscription();
$sub->setChangeType("created,updated");
$sub->setNotificationUrl(notificationUrl);
$sub->setResource("/me/mailfolders('inbox')/messages");
$sub->setClientState('SecretClientState');
$dateTime = new Carbon();
$dateTime->addDays(3);
$sub->setExpirationDateTime($dateTime);
$subResult = $this->graph->createRequest("POST", "/subscriptions")
->attachBody($sub)
->setReturnType(Model\Subscription::class)
->execute();
} catch (\Exception $e) {
}
}
}
И когда я выполняю этот запрос, он отправляет мне запрос на notificationUrl
с validateToken. Как указано в документации, я посылаю тот же ответ, что и в step 2
https://docs.microsoft.com/en-us/graph/webhooks#managing-subscriptions
А есть реализация уведомляющего функционала
public function notify(Request $request)
{
$token = $request->input('validationToken');
$response = response()->make($token, 200);
$response->header('content-type', 'text/plain');
return $response;
}
и эта функция уведомления возвращает 200 код ответа с типом содержимого text/plain
. с validateToken. Но в ответе на подписку я получаю эту ошибку
string(246) "Client error: `POST https://graph.microsoft.com/beta/subscriptions` resulted in a `400 Bad Request` response:
{
"error": {
"code": "InvalidRequest",
"message": "Subscription validation request timed out.",
"inner (truncated...)
"
Я застрял здесь. не получено ни одного примера для функции уведомления о том, как отправить токен проверки в запросе.
К вашему сведению: я использую это в Laravel 5.5
Framework.