0

我尝试通过 Outlook 联系人 REST API 获取用户联系人。我成功获得了访问令牌,但是当我尝试获取联系人时,我收到 404 错误。

这是发送的网址

https://outlook.office.com/api/v1.0/me/contacts?%24select=GivenName%2CSurname%2CEmailAddresses&%24orderby=GivenName&%24top=10

和标题

用户代理:php-tutorial/1.0
 授权:Bearer----token here-----
 接受:应用程序/json
 客户端请求 ID:此处为 guid
 返回客户端请求 ID:真
 X-AnchorMailbox:user_email

这是我从Microsoft 教程中直接获取的代码

    公共静态函数 makeApiCall($access_token, $user_email, $method, $url, $payload = NULL)
    {
      // 生成要始终发送的标头列表。
      $标头=数组(
        "User-Agent: php-tutorial/1.0", // 发送 User-Agent 标头是最佳实践。
        "Authorization: Bearer ".$access_token, // 总是需要我们的授权令牌!
        "Accept: application/json", // 始终接受 JSON 响应。
        "client-request-id: ".self::makeGuid(), // 用新的 GUID 标记每个新请求。
        "return-client-request-id: true", // 告诉服务器在响应中包含我们的请求 ID GUID。
        "X-AnchorMailbox: ".$user_email // 提供者用户的电子邮件,用于优化 API 调用的路由
      );

      $curl = curl_init($url);

      开关(strtoupper($方法)){
        案例“获取”:
          // 无事可做,GET 是默认的,不需要
          // 额外的标题。
          error_log("正在执行 GET");
          休息;
        案例“发布”:
          error_log("正在做 POST");
          // 添加 Content-Type 标头(重要!)
          $headers[] = "内容类型:应用程序/json";
          curl_setopt($curl, CURLOPT_POST, true);
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          休息;
        案例“补丁”:
          error_log("正在打补丁");
          // 添加 Content-Type 标头(重要!)
          $headers[] = "内容类型:应用程序/json";
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          休息;
        案例“删除”:
          error_log("正在删除");
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
          休息;
        默认:
          error_log("无效方法:".$method);
          出口;
      }

      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      $response = curl_exec($curl);
      error_log("curl_exec 完成。");

      $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
      error_log("请求返回状态".$httpCode);
      if ($httpCode >= 400) {
        返回数组('errorNumber' => $httpCode,
                     'error' => '请求返回HTTP错误'.$httpCode);
      }

      $curl_errno = curl_errno($curl);
      $curl_err = curl_error($curl);
      如果($curl_errno){
        $msg = $curl_errno.": ".$curl_err;
        error_log("CURL 返回错误:".$msg);
        curl_close($curl);
        返回数组('errorNumber' => $curl_errno,
                     '错误' => $msg);
      }
      别的 {
        error_log("响应:".$response);
        curl_close($curl);
        返回 json_decode($response, true);
      }
    }

有人可以说我做错了什么吗?

4

1 回答 1

1

您看到的错误 ( MailboxNotEnabledForRESTAPI) 表明您的 Outlook.com 邮箱尚未启用 API。不幸的是,您无法更改任何设置来自己启用它们。我们正在批量启用邮箱,因此对于该特定邮箱,您只需要等到它启用即可。

如果您想获得一个测试帐户,以便免费试用 Office 365,或者您可以向我们发送电子邮件至 outlookdev@microsoft.com 以请求开发人员预览 Outlook.com 帐户。有关完整详细信息,请参阅https://dev.outlook.com/RestGettingStarted上的帐户要求部分。

于 2015-09-11T13:24:18.040 回答