API событий календаря Google для вставки метания 400

Я проверил другие сообщения, связанные с этой проблемой, и они не совпадают: я использую «ответ», я скопировал дату / время с веб-сайта google api, поэтому формат правильный, и я поиграл с заголовками . Любые другие идеи, почему это не работает?

Я получаю следующую ошибку:

Error: failed [400] {  "error": {   "errors": [    {     "domain": "global",     "reason": "required",     "message": "Missing end time."    }   ],   "code": 400,   "message": "Missing end time."  } } [object Object]

Мой код ниже разбит на шаги: URL-адрес, по которому я собираюсь выполнить POST, токен доступа пользователя, параметры для вставленного календарного события, включая заголовки и событие с началом, концом и сводкой событий, а также фактическая http-запись и функция обратного вызова :

calendarSchedule() {
    if(Meteor.user() && moment(Meteor.user().services.google.expiresAt) > moment()._d) {
      var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events";
      var userAccessToken = Meteor.user().services.google.accessToken;

      var options = {
        headers : {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + userAccessToken,
          'X-JavaScript-User-Agent': "Google APIs Explorer",
        },
        calendarId: 'primary',
        resource : {
          start: { dateTime: "2016-05-03T18:03:58+02:00" },
          end: { dateTime: "2016-05-03T18:03:58+02:00" },
          summary: "testSummar",
        }
      };

      HTTP.post(url, options,
        function(error,result) {
          console.log("posted to calendar? "+ error+ result);
        });
    }
  }

person Denzil Sikka    schedule 14.02.2017    source источник


Ответы (1)


Я понял это и подумал, что должен опубликовать ответ здесь.

По какой-то причине в этом случае вы используете данные вместо ресурса. Я не уверен, почему в случае, если кто-то еще захочет вмешаться в этот вопрос, но это отличается от того, что находится на сайте календаря API Google.

Мой последний работающий код:

  calendarSchedule() {
    if(Meteor.user() && moment(Meteor.user().services.google.expiresAt) > moment()._d) {
      var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events";
      var userAccessToken = Meteor.user().services.google.accessToken;

      var currentEvent = {
        'summary': this.props.text,
        // 'location': this.refs.location.textContent,
        'start': {
          'dateTime': moment()._d,
          'timeZone': this.refs.timeZone,
        },
        'end': {
          'dateTime': moment(moment()._d).add(1, 'hours'),
          'timeZone': this.refs.timeZone,
        },
        'attendees': [],
        'reminders': {
          'useDefault': true,
        }
      };

      var options = {
        headers : {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + userAccessToken,
          'X-JavaScript-User-Agent': "Google APIs Explorer",
        },
        calendarId: 'primary',
        data: currentEvent,
      };

      var searchResult = HTTP.post(url, options,
        function(error,result) {
          console.log("posted to calendar? "+ error+ result);
        });
    }
  }
person Denzil Sikka    schedule 14.02.2017