我正在使用Office 365 REST API在PHP中编写应用程序,该API会下拉会议室的所有事件列表。我已经授权该应用程序并可以通过我的浏览器导航到URL来撤回房间事件列表,但是,一旦我尝试通过CURL发出请求,我就得到以下响应。
{"error":{"code":"ErrorAccessDenied","message":"Access is denied. Check credentials and try again."}}
我的PHP如下
public function getCalendarEvents($token, $calendar) {
$url = "https://outlook.office365.com/api/v1.0/users/$calendar/events";
//$url = "https://outlook.office365.com/api/v1.0/me/events";
$headers = array('Authorization: Bearer ' . $token, 'Content-Type: application/json', 'Accept:application/json');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$output=curl_exec($ch);
$info = curl_getinfo($ch);
//print_r($info['request_header']);
curl_close($ch);
print_r($output);
}
我试过传递房间的电子邮件地址
$url = "https://outlook.office365.com/api/v1.0/users/email@example.com/events";
和
$url = "https://outlook.office365.com/api/v1.0/Users('email@example.com')/Events";
两者都不奏效。我可以使用
为我自己撤回所有日历活动$url = "https://outlook.office365.com/api/v1.0/me/events";
我是Office 365门户网站的管理员,并且设置为拥有房间的完全权限。在我的研究中,我遇到this SO答案,但在Azure中取消选中此选项没有任何区别。
似乎报告了非常类似的问题here
答案 0 :(得分:4)
今天,我们不支持经过身份验证的用户使用OAuth访问其他用户的邮件,日历或联系人。这就是为什么当您检索会议室的日历但是为您自己的日历工作时,您的请求失败的原因。此请求使用浏览器,因为您使用的是基本身份验证,我们不建议您使用此应用程序。如果您确实想使用OAuth尝试请求,可以使用我们的OAuth sandbox。
好消息是,我们非常接近发布对OAuth客户端凭据流的支持,该流程将允许应用程序在租户管理员的同意下访问租户中的任何邮箱。由于您是租户管理员,因此只要我们发布此功能,您就可以授权该应用访问租户会议室的日历。所以,请继续关注未来几周的公告。
[更新] :现在可以使用对服务帐户的支持。有关详细信息,请参阅我们的blog announcement,如果您有任何疑问,请告知我们。
答案 1 :(得分:0)
您必须发送密码。 如果您的程序多次尝试可能被阻止为垃圾邮件发送者。
检查出来: http://support2.microsoft.com/kb/2630976
要解决此问题,请重置用户的密码。为此,请按照下列步骤操作: 打开Web浏览器,浏览到Office 365门户(https://portal.office.com),然后使用用户的过期凭据登录。 系统提示您时,请为该用户输入新的Office 365密码。确保密码符合Office 365的条件。