Я успешно регистрирую для Google Calendar API изменения уведомлений с помощью PHP:
$service = new Google_Service_Calendar($client); $channel = new Google_Service_Calendar_Channel($service); $channel->setId(<some random ID>); $channel->setType('web_hook'); $channel->setAddress('https://www.myserver.net/triggerCode.php'); $timetoExpire = time()+3600000; $channel->setExpiration($timetoExpire); $watchEvent = $service->events->watch('<some_calendar_name>', $channel);
EXCEPT это работает, только если строка $ channel-> setExpiration закомментирована.
Я получаю сообщение об ошибке, когда ttl недействителен. Я попытался установить срок действия на несколько секунд (например, 6000), количество миллисекунд (например, 600000) и время () плюс несколько миллисекунд, и я всегда получаю ту же ошибку:
Invalid ttl value for channel -1402834554'
Как я должен это установить?
Наконец, он работал. Этот PHP-код работает:
$service = new Google_Service_Calendar($client); $channel = new Google_Service_Calendar_Channel($service); $channel->setId($uniqueID); $channel->setType('web_hook'); $channel->setAddress('https://mydomain.net/notificationCallBack.php'); $timetoExpire = time()+3600000; $optParams = array('ttl' => $timetoExpire); $channel->setParams($optParams); $watchEvent = $service->events->watch($calendarID, $channel);
Вышеуказанное истечение составляет 42 дня, но срок годности истекает до 30 дней. Я предполагаю, что это верхний предел.
Из документа API выглядит так, что событие watch
не включает параметр expiration
.
Запрос принимает:
{ "id": string, "token": string, "type": string, "address": string, "params": { "ttl": string } }
Ответ содержит expiration
, но не сам запрос:
{ "kind": "api#channel", "id": string, "resourceId": string, "resourceUri": string, "token": string, "expiration": long }
Может быть, вы имеете в виду ttl
, который является частью параметров запроса?
FYI: также похоже, что expiration
определяется как Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds.