如何使用Microsoft Graph REST API v1.0获取“日历”标签和“日历项”

时间:2018-10-01 14:54:05

标签: office365 outlook-addin office365api outlook-restapi office365-apps

我正在使用Microsoft Graph REST API v1.0开发Outlook Web加载项。经过大量搜索,包括Microsoft的文档,并最终能够使用加载项进行授权并获得“ access_token”,但由于获取用户的“日历”以及“日历事件”而陷入困境,其中包括使用以下代码重复发生的事件

 //// for all calendar label
 var _token="xyz..123";
 $.ajax({
    url: "https://graph.microsoft.com/v1.0/me/calendars",
    headers: {
        'outlook.body-content-type': 'text/html',
        'Authorization': 'Bearer ' + token
    },
    type: 'GET'
}).done(function (data) {
    //// success
}).fail(function (error) {
    //// error
});


//// for calendar events
var _token="xyz..123";
 $.ajax({
    url: "https://graph.microsoft.com/v1.0/me/calendar/events",
    headers: {
        'outlook.body-content-type': 'text/html',
        'Authorization': 'Bearer ' + token
    },
    type: 'GET'
}).done(function (data) {
    //// success
}).fail(function (error) {
    //// error
});

ref:https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/user_list_events

我收到此错误消息

{
"error": {
    "code": "InvalidAuthenticationToken",
    "message": "CompactToken parsing failed with error code: 80049217",
    "innerError": {
        "request-id": "55ea48c0-5d10-423b-9f41-d48d5b1d9454",
        "date": "2018-10-01T14:41:05"
      }
   }
}

请指出我做错了什么地方?谢谢

更新

按照@Lina的建议,我尝试了此方法并切换到Outlook REST API v2.0

Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
    if (result.status === "succeeded") {
        var accessToken = result.value;
        // Use the access token
    } else {
        // Handle the error
    }
});

获得accessToken =“ 123..abc”; 之后,我尝试以这种方式访问​​日历和事件

// get calendars
$.ajax({
    url: 'https://outlook.office.com/api/v2.0/me/calendars' ,
    dataType: 'json',
    headers: { 'Authorization':'Bearer ' +access_token}
  }).done(function (items) {
    //sucess;
  }).fail(function (error) {
    //error
});

// get events
$.ajax({
    url: 'https://outlook.office.com/api/v2.0/me/events' ,
    dataType: 'json',
    headers: { 'Authorization':'Bearer ' +access_token}
  }).done(function (items) {
    //sucess;
  }).fail(function (error) {
    //error
});

在上述两个请求中,我都收到了此错误

"{"error":{"code":"ErrorAccessDenied","message":"The api you are trying to access does not support item scoped OAuth."}}"

相关:Access to Outlook RestAPI from an Outlook web Add-in

帮我解决我所缺少的东西。是否有任何“许可”或“参数”问题? 谢谢

1 个答案:

答案 0 :(得分:0)

如果您使用getAccessTokenAsync方法来获取“ access_token”,则应使用以下所示的请求:

从用户的主日历(../me/events)或其他日历中获取系列主事件和单实例事件的集合。要获取扩展的事件实例,您可以获取日历视图或事件的实例。

GET https://outlook.office.com/api/v2.0/me/events
GET https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}/events

有关更多信息,请参见下面的链接:

Using the Calendar REST API