Я хочу настроить push-уведомления для Google Calendar API , где мой сервер получает уведомление об изменении определенного ресурса в API календаря Google. Я хочу сделать это с помощью клиентской библиотеки API Google для PHP .
Но кажется, у них нет метода для просмотра ресурсов календаря Google в библиотеке PHP. Может быть, в других библиотеках есть метод watch
, но я не уверен в этом.
В основном, чтобы настроить push-уведомления для определенного ресурса, вам нужно отправить запрос на публикацию по URL-адресу, подобному этому ...
POST https://www.googleapis.com/calendar/v3/calendars/[email protected]/events/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json
{
"id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
"type": "web_hook",
"address": "https://mydomain.com/notifications" // Your receiving URL.
}
Я могу легко сделать это с помощью curl в PHP, но моя проблема в том, что запрос не авторизован с помощью токена Google OAuth, поэтому он приводит к ошибке.
Я хочу знать, есть ли способ решения этой проблемы ...
ОБНОВЛЕНИЕ
Я пытался отправить соединение с Google без добавления правильных заголовков, поэтому я получал ошибку авторизации. После исправления этой части у меня все еще возникают проблемы с ошибкой Invalid Credentials
. Вот как выглядит мой фрагмент ...
$url = sprintf("https://www.googleapis.com/calendar/v3/calendars/%s/events/watch", $calendar);
/* setup the POST parameters */
$fields = array(
'id' => "some_unique_key",
'type' => "web_hook",
'address' => sprintf("http://%s//event_status/update_google_events", $_SERVER['SERVER_NAME'])
);
/* convert the POST parameters to URL query */
$fields_string = '';
foreach ($fields as $key => $value) {
$fields_string .= sprintf("%s=%s&", $key, $value);
}
rtrim($fields_string, '&');
/* setup POST headers */
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: OAuth ' . $access_token;
/* send POST request */
$channel = curl_init();
curl_setopt($channel, CURLOPT_HTTPHEADER, $headers);
curl_setopt($channel, CURLOPT_URL, $url);
curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
curl_setopt($channel, CURLOPT_POST, true);
curl_setopt($channel, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($channel, CURLOPT_TIMEOUT, 3);
$response = curl_exec($channel);
curl_close($channel);
error_log($response);