如何使用PHP将事件添加到Office 365中的另一个用户日历?

时间:2018-07-30 17:47:57

标签: php microsoft-graph microsoft-graph-sdks

我正在使用Microsoft Graph,并希望使用户能够通过我们正在编写的应用程序向其他用户的日历中添加项目。

我正在使用以下代码,并且可以添加到我自己的日历中。

//

当我将createRequest更改为

$subject = 'Subject';
$body = 'Body content';
$start = time();
$end = time() + (30 * 60);
$startStr = date('Y-m-d', $start) . 'T' . date('H:i:s', $start) . ".0000000";
$endStr = date('Y-m-d', $end) . 'T' . date('H:i:s', $end) . ".0000000";

$data = array();
$data['subject'] = $subject;
$data['body'] =  array();
$data['body']['content'] = $body;
$data['start'] = array();
$data['start']['dateTime'] = $startStr;
$data['start']['timeZone'] = 'UTC';
$data['end'] = array();
$data['end']['dateTime'] = $endStr;
$data['end']['timeZone'] = 'UTC';

echo 'subject: ' . $subject . '<br>';
echo 'body: ' . $body . '<br>';
echo 'start: ' . $startStr . '<br>';
echo 'end: ' . $endStr . '<br>';

$token = $_SESSION['access_token'];
$graph = new Graph();
$graph->setAccessToken($token);
$request = $graph->createRequest("post", '/me/calendar');
$request->attachBody($data);
$response = $request->execute(); 

其中xxxx是另一个用户名,我得到以下响应

$request = $graph->createRequest("post", '/xxxx/calendar');

我用来登录的权限是

400 Bad Request

要将项目发送到另一个用户日历,我还需要做什么?

1 个答案:

答案 0 :(得分:3)

您是missing the permissions才能使用另一个用户的日历。您有几种方法可以做到这一点:

  1. 您可以向用户发送会议邀请。这将对大多数用户有效,因为默认行为是将会议邀请自动添加到用户的日历中。只需与目标用户作为与会者创建会议即可。
  2. 由于您具有Calendar.ReadWrite.Shared,因此目标用户需要与您共享日历。
  3. 已为Calendar.ReadWrite设置了应用程序权限。

最合适的选择取决于需求,应用程序的结构以及谁是进行更改的参与者。