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
相关产品推荐
相关产品推荐

