2017-02-14 31 views
0

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

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

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

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

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); 
     }); 
    } 
    } 

ответ

0

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

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

Мой окончательный код, который работает:

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); 
     }); 
    } 
    }