Google CalDAV получает 405 при попытке изменить существующее событие через 'PUT' - PullRequest
0 голосов
/ 17 октября 2018

Я работаю с функцией Google CalDAV и у меня возникают проблемы при попытке обновить событие в календаре.

Я получаю ответ "405 - Метод не разрешен" на мои запросы PUT.

$calendar = 'BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME:Primary Calendar
X-WR-TIMEZONE:America/New_York
BEGIN:VTIMEZONE
TZID:America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;VALUE=DATE:20181010
DTEND;VALUE=DATE:20181011
DTSTAMP:20181016T192214Z
ORGANIZER;CN=cest@tave.wtf:mailto:cest@tave.wtf
UID:076e0pqgifk0vli961dojq886p@google.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-    ACTION;CN=kody@tave.com;X-NUM-GUESTS=0:mailto:kody@tave.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-    PARTICIPANT;PARTSTAT=ACCEPTED;CN=cest457@tave.wtf;X-NUM-GUESTS=0:mailto:cest457@tave.wtf
CREATED:20181016T132132Z
DESCRIPTION:this is a description from caldav too
LAST-MODIFIED:20181016T192214Z
LOCATION:
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:test google event 2, updated in caldav stuff
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR';

    $url = 'https://apidata.googleusercontent.com/caldav/v2/' . $GoogleCalendarSync->calendarID . '/events';
    $opts = [
        'allow_redirects' => true,
        'timeout' => 40,
        'connect_timeout' => 10,
        'headers' => [
            'Authorization' => 'Bearer ' . $this->config['token']['access_token'],
            'If-None-Match' => '*',
            'Content-Type' => 'text/calendar',
        ],
        'body' => $calendar,
    ];

    $Client = new GuzzleHttp\Client();

    try {
        $Response = $Client->request('PUT', $url, $opts);
    } catch (Exception $e) {
        App::recoverableError(__METHOD__, 'Failed to update calendar', [
            'exception' => $e,
            'GoogleCalendarSync' => (array) $GoogleCalendarSync,
        ]);

        return false;
    }

    return (string) $Response->getBody();

Я не уверен, что используется неправильный URL, хотя я верю в этоправильный.(Если нет, где я могу его найти?) Документация Google здесь крайне ограничена.

Я также проверил, что токен доступа (сгенерированный посредством потока OAuth) действительно правильный, так как я тоже его используюуспешно получить календарь в другом отдельном запросе.Проблемы возникают только из-за запросов "PUT".

Спасибо за ваше время!

1 Ответ

0 голосов
/ 17 октября 2018

Конечно же, после нескольких часов поиска и настройки кода, я нашел ответ менее чем через 30 минут после того, как задал этот вопрос.

Проблема заключалась в том, что в используемом URL отсутствовал объект календаря наконец.

url = 'https://apidata.googleusercontent.com/caldav/v2/' . $GoogleCalendarSync->calendarID . '/events';

против

url = 'https://apidata.googleusercontent.com/caldav/v2/' . $GoogleCalendarSync->calendarID . '/events/basic.ics';
...