Google Calendar推送通知无数据问题求助
排查Google Calendar推送通知PHP后端无数据问题
我来帮你排查下这个问题,这种收到请求但拿不到数据的情况,在PHP处理Google推送通知时挺常见的,主要集中在请求体的读取方式上,给你列几个最可能的原因和解决办法:
错误使用了
$_POST获取数据
Google Calendar推送的通知请求是application/json格式的,而PHP的$_POST超全局变量只处理application/x-www-form-urlencoded或multipart/form-data类型的请求体,所以直接用$_POST肯定拿不到内容。你需要改用php://input来读取原始请求体,示例代码如下:// 读取原始请求体 $rawData = file_get_contents('php://input'); // 解析为JSON数组 $notificationData = json_decode($rawData, true); // 打印调试(上线前记得移除) var_dump($notificationData);这样就能获取到Google发送的通知数据了,通常包含
channelId、resourceId、resourceUri等关键字段。服务器PHP配置限制
检查你的PHP配置文件(php.ini)中的以下参数:post_max_size:如果这个值设置过小,当请求体大小超过限制时,php://input会返回空值。建议调整为10M左右,满足推送通知的需求。request_order/variables_order:确保配置中包含INPUT标识(大部分默认配置已包含,但如果是自定义配置可能遗漏),否则无法正常读取php://input。
PHP框架的自动解析问题(若使用框架)
如果你用了Laravel、Symfony这类框架,部分框架会自动解析请求体,但如果请求头的Content-Type识别异常,可能导致数据丢失:- Laravel中可以用
$request->getContent()获取原始JSON内容,或直接用$request->all()获取解析后的数组; - Symfony中可通过
$request->getContent()读取原始数据,再手动解析为JSON。
- Laravel中可以用
额外提醒:拿到通知数据后,记得验证请求的合法性,比如核对订阅时的channelId,或通过Google官方提供的方式验证请求来源,避免接收恶意请求。
内容的提问来源于stack exchange,提问作者Vivek Cu
相关产品推荐
相关产品推荐

