2014-02-20 3 views
4

У меня возникли вопросы, требующие календарь: Вставить с помощью API Google, https://www.googleapis.com/calendar/v3/calendarsGoogle Calendar OAuth access_token не работает для функций POST

Я не верю, что есть вопросы, разрешение/разрешение, то access_token приобретается через refresh_token в следующей области: «https://www.googleapis.com/auth/calendar»

Когда я использую действительный access_token для выполнения GET не существует никаких проблем, но это POST, и я последовательно получить этот ответ:

{"error": 
    { "errors": 
    [{ "domain": "global", 
     "reason": "authError", 
     "message": "Invalid Credentials", 
     "locationType": "header", 
     "location": "Authorization" 
    }], 
    "code": 401, 
    "message": "Invalid Credentials" 
    } 
} 

Вот код Railo я бег, я раздел его все притворство и нюанс:

<cfhttp url="https://www.googleapis.com/calendar/v3/calendars" charset="utf-8" method="post"> 
    <cfhttpparam type="header" name="Authorization" value="bearer #arguments.access_token#" /> 
    <cfhttpparam type="formfield" name="summary" value='hello world' /> 
</cfhttp> 

Вот пример ГЕТ, который работает просто отлично:

<cfhttp url="https://www.googleapis.com/calendar/v3/calendars/#arguments.calendarID#/events?access_token=#arguments.access_token#" charset="utf-8" method="get" /> 

Так далеко я попытался разместить access_token различными способами. В качестве параметра запроса, как структуры json в cfhttpparam type = "body" без везения

This stackoverflow question указывает, что в документации API календаря Google не упоминается требуемый параметр «minAccessRole». Я поиграл с этим тоже безрезультатно.

ответ

2

Некоторое время, удаленное из проблемы, часто приносит ясность.

С пробной версией и ошибкой я смог получить некоторую обратную связь с кодом API. В какой-то момент, показанный мне, Content-Type I отправлял «октет-поток».

Я добавил следующую строку, чтобы указать Content-Type. Я выбрал «application/json», так как https://developers.google.com/oauthplayground/ имел это содержимое по умолчанию для операции: вставка календаря.

<cfhttpparam type="header" name="Content-Type" value="application/json" /> 

Тогда мне пришло в голову, что я пытался отправить поля формы API, а не JSON. Окончательный рабочий код для callooks примерно такой:

<cfhttp url="https://www.googleapis.com/calendar/v3/calendars" charset="utf-8" method="post"> 
    <cfhttpparam type="header" name="Content-Type" value="application/json" /> 
    <cfhttpparam type="header" name="Authorization" value="bearer #arguments.access_token#" /> 
    <cfhttpparam type="body" value='{"summary":"newCalendar"}' /> 
</cfhttp> 
Смежные вопросы