首页 文章

Microsoft Outlook API给出404错误

提问于
浏览
0

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

这是发送网址

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

和 Headers

User-Agent: php-tutorial/1.0
 Authorization: Bearer ----token here-----
 Accept: application/json
 client-request-id: guid here
 return-client-request-id: true
 X-AnchorMailbox: user_email

这是代码,我从Microsoft tutorial开始

public static function makeApiCall($access_token, $user_email, $method, $url, $payload = NULL)
    {
      // Generate the list of headers to always send.
      $headers = array(
        "User-Agent: php-tutorial/1.0",         // Sending a User-Agent header is a best practice.
        "Authorization: Bearer ".$access_token, // Always need our auth token!
        "Accept: application/json",             // Always accept JSON response.
        "client-request-id: ".self::makeGuid(), // Stamp each new request with a new GUID.
        "return-client-request-id: true",       // Tell the server to include our request-id GUID in the response.
        "X-AnchorMailbox: ".$user_email         // Provider user's email to optimize routing of API call
      );

      $curl = curl_init($url);

      switch(strtoupper($method)) {
        case "GET":
          // Nothing to do, GET is the default and needs no
          // extra headers.
          error_log("Doing GET");
          break;
        case "POST":
          error_log("Doing POST");
          // Add a Content-Type header (IMPORTANT!)
          $headers[] = "Content-Type: application/json";
          curl_setopt($curl, CURLOPT_POST, true);
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          break;
        case "PATCH":
          error_log("Doing PATCH");
          // Add a Content-Type header (IMPORTANT!)
          $headers[] = "Content-Type: application/json";
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
          curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
          break;
        case "DELETE":
          error_log("Doing DELETE");
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
          break;
        default:
          error_log("INVALID METHOD: ".$method);
          exit;
      }

      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      $response = curl_exec($curl);
      error_log("curl_exec done.");

      $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
      error_log("Request returned status ".$httpCode);
      if ($httpCode >= 400) {
        return array('errorNumber' => $httpCode,
                     'error' => 'Request returned HTTP error '.$httpCode);
      }

      $curl_errno = curl_errno($curl);
      $curl_err = curl_error($curl);
      if ($curl_errno) {
        $msg = $curl_errno.": ".$curl_err;
        error_log("CURL returned an error: ".$msg);
        curl_close($curl);
        return array('errorNumber' => $curl_errno,
                     'error' => $msg);
      }
      else {
        error_log("Response: ".$response);
        curl_close($curl);
        return json_decode($response, true);
      }
    }

有人能说我做错了吗?

1 回答

  • 1

    您看到的错误( MailboxNotEnabledForRESTAPI )表示您的Outlook.com邮箱没有't been enabled for the APIs yet. Unfortunately there' s没有设置您可以更改为自己启用它们 . 我们批量启用邮箱,因此对于该特定邮箱,您只需等待它启用即可 .

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

相关问题