You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel接收MS Graph订阅Webhook无响应(已处理但未返回)

这可把我难住了!

5月30日周五更新

我成功创建了订阅,Webhook被调用且Laravel响应正常。我推测这可能和本地Laravel应用向MS Graph的/subscriptions发起的GET请求未关闭,同时又收到MS Graph向/webhooks/ms发送的POST请求有关。我通过Postman调用/subscriptions,MS Graph随后调用了Laravel应用的/webhooks/ms,Webhook被正确接收、处理并响应(这是关键部分)。我不太清楚为什么这样就能正常工作。

目标

我尝试使用Laravel 12应用注册MS Graph订阅。用户点击按钮后,后台向MS Graph订阅端点发送POST请求。MS Graph尝试创建订阅时,会调用我们的回调URL进行验证(URL格式为:https://example.com/webhook/ms?validationToken=sometoken)。回调会提取validationToken,并以纯文本形式返回URL解码后的token,响应状态码为200。

问题现象

向订阅端点的请求看似正常。MS Graph携带validationToken调用回调URL,回调成功提取并处理了请求,但我的应用未返回响应(通过ngrok观察:等待服务器响应)。MS订阅验证(即对/subscription的调用)10秒后超时,返回400响应("Subscription validation request timed out"),回调URL始终无响应。

已尝试的排查步骤

  • 记录了回调URL的请求处理日志,Laravel日志中无错误。
  • 通过Postman调用回调URL,能在50-300毫秒内收到token及200响应。
  • 查看了Mac上的Apache日志。
  • 曾怀疑是CSRF令牌中间件问题,已设置withoutmiddleware(首次使用Laravel 12,可能配置有误,配置方式与Laravel 11一致)。

web.php中的路由代码

Route::post('/webhook/ms', function (Request $request) {

    //Log the start time
    Log::info('Webhook request received at: ' . now()->toDateTimeString());

    //Get the request path
    $path = $request->getPathInfo();

    //Get url params
    $params = $request->query();
    $method = $request->method();
    $host = $request->host();
    $httpHost = $request->httpHost();
    $scheme = $request->schemeAndHttpHost();

    $data = json_decode($request->getContent(), true);


    Log::info('Webhook received from ms', [
        'host' => $host,
        'httpHost' => $httpHost,
        'scheme' => $scheme,
        'method' => $method,
        'params' => $params,
        'path' => $path,
        'data' => $data,
        'headers' => $request->headers->all(),
    ]);


    // Extract the validation token from the request
    $validationToken = trim($request->get('validationToken'));



    if ($validationToken) {
        Log::info('Validation token received: [' . $validationToken . ']');
        Log::info('PHP Validation token received: [' . $_REQUEST["validationToken"] . ']');
        // Log the end time
        Log::info('Webhook request processed at: ' . now()->toDateTimeString());
        return response($validationToken, 200)
            ->header('Content-Type', 'text/plain');

    } else {
        Log::info('No validation token received');
        return response('No validation token received', 400)
            ->header('Content-Type', 'text/plain');
    }


})->withoutMiddleware([ValidateCsrfToken::class]);

MS Graph调用回调URL的请求头

请求头截图

我的环境配置

  • Laravel 12,使用msgraph-sdk-php
  • Mac本地环境
  • Postman 11.46.6

内容的提问来源于stack exchange,提问作者Ian Sweeney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:16:07