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

PHP项目无法接收Strava Webhook事件数据的求助

解决Strava Webhook无法获取事件数据的问题

Strava Webhook发送的是JSON格式的POST请求,而非PHP默认解析的表单编码数据,所以$_POST/$_REQUEST会返回空数组。以下是具体解决方案:

1. 读取原始请求数据

直接通过php://input获取Strava发送的原始JSON内容,再解码为数组即可拿到用户ID等事件数据:

// 处理Strava的验证请求(配置Webhook时的GET请求)
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    if (isset($_GET['hub_challenge'])) {
        echo $_GET['hub_challenge'];
        exit;
    }
}

// 处理活动变更的POST事件
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 读取原始JSON数据
    $rawJson = file_get_contents('php://input');
    $eventData = json_decode($rawJson, true);

    // 验证解析结果
    if (!$eventData) {
        http_response_code(400);
        exit('无效的JSON数据');
    }

    // 获取目标用户ID及事件类型
    $userId = $eventData['owner_id'] ?? null;
    $actionType = $eventData['aspect_type'] ?? ''; // create/update/delete

    if ($userId) {
        // 这里编写你的用户数据更新逻辑
        error_log("用户{$userId}的活动发生{$actionType}操作");
    }

    // 必须返回200状态码,否则Strava会重复发送请求
    http_response_code(200);
    exit;
}

2. 排查注意事项

  • 确认服务器allow_url_fopen配置为开启(大部分环境默认开启),否则file_get_contents无法读取php://input;
  • 可以将$rawJson写入日志,直接查看Strava发送的原始内容,方便排查解析问题:error_log('Strava Webhook原始数据: ' . $rawJson);;
  • 检查服务器安全插件/防火墙是否拦截了JSON格式的POST请求,确保请求能正常到达webhook.php。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:34:53