我尝试在我的服务器中实施Google日历推送通知。 使用outhplayground,我能够成功订阅该服务。 当日历中发生更改时,我会收到注册网址的通知。 唯一的问题是我收到的回复没有数据。这是一个空洞的回应。
有谁能告诉我这是什么问题。我在后端使用PHP代码来访问命中我的网址。
authplayground代码:
POST /calendar/v3/calendars/calendarname@gmail.com/events/watch HTTP/1.1
Host: www.googleapis.com
Content-length: 161
Content-type: application/json
Authorization: Bearer access_token
{
"id": "01234267-89a6-cdef-0123456789ab", // Your channel ID.
"type": "web_hook",
"address": "https://example.com/response" // Your receiving URL.
}
接受请求的代码:
$json = file_get_contents('php://input');
$request = json_decode($json, true);
$post_request = $_POST;
$get_request = $_REQUEST;
当我得到一个空的回复时,我尝试编写代码以接受任何可能的方式。
答案 0 :(得分:2)
Google将标题中的响应作为数组发送。
试试这个:
$response = apache_request_headers();
if($response) {
print_r($response);
}else {
echo 'The apache_request_headers() did not find any headers.'; //Or google is not sending any.
}
您也可以尝试:
getallheaders()
如果apache_request_headers不起作用。
测试这可能很困难。您可能希望设置一个日志,将您的页面获取的任何数据发送到数据库中的表,以便您可以返回并检查以查看您正在进行的进度类型。
答案 1 :(得分:0)
您可以获取如下所示的值:
$channelId = $_SERVER['HTTP_X_GOOG_CHANNEL_ID'];
$resourceId = $_SERVER['HTTP_X_GOOG_RESOURCE_ID'];
if($channelId) {
file_put_contents('webhook.txt', $channelId.' ||| '.$resourceId);
}
您可以在此处获得其他headers
:https://developers.google.com/calendar/v3/push#understanding-the-notification-message-format