Microsoft Graph API: ошибка запроса уведомления о подписке - PullRequest
0 голосов
/ 15 января 2019

Я создаю подписку для веб-хуков. Для реализации я использую 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.

1 Ответ

0 голосов
/ 15 января 2019

Наивный вопрос: включаете ли вы в свой ответ для проверки декодированный токен проверки, полученный во входящем вызове проверки?

Вы цитировали:

$token = $request->input('validationToken');

является 'validationToken' заполнителем для фактического значения (после декодирования), которое было включено в вызов POST:

POST https://{notificationUrl}?validationToken={opaqueTokenCreatedByMicrosoftGraph}

...