php - 在 PHP 中使用 Outlook Api 创建新事件(使用 POST 方法)

标签 php outlook microsoft-graph-api outlook-restapi

我正在使用 Outlook API 中的 POST 方法在 php 中创建新事件。我点击了这个链接 https://learn.microsoft.com/en-us/outlook/rest/php-tutorial实现 GET 事件方法。我正在使用的授权码如下

$oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
      'clientId'                => 'APP ID',
      'clientSecret'            => 'APP Password',
      'redirectUri'             => 'http://localhost/CodeIgniter-3.1.9/authorize',
      'urlAuthorize'            => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
      'urlAccessToken'          => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
      'urlResourceOwnerDetails' => '',
      'scopes'                  => ' Calendars.ReadWrite Calendars.ReadWrite.Shared Calendars.Read.Shared'
    ]);

获取 token 这是代码

  $accessToken = $oauthClient->getAccessToken('authorization_code', ['code' => $_GET['code']]);

现在创建从 PHP 应用程序到 outlook 日历的事件。获取 token 后,我编写了以下代码以使用 POST 方法创建新事件。

$url = "https://graph.microsoft.com/beta/me/events";
        $data_json = '{
            "subject": "Lets go for lunch",
            "body": {
              "contentType": "HTML",
              "content": "Does late morning work for you?"
            },
            "start": {
                "dateTime": "2017-04-15T12:00:00",
                "timeZone": "Pacific Standard Time"
            },
            "end": {
                "dateTime": "2017-04-15T14:00:00",
                "timeZone": "Pacific Standard Time"
            },
            "location":{
                "displayName":"Harrys Bar"
            },
            "attendees": [
              {
                "emailAddress": {
                  "address":"ehteshamanwar_86@hotmail.com",
                  "name": "Ehtesham Anwar"
                },
                "type": "required"
              }
            ]
          }' ;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Content-Type: application/json",
        "Authorization: Bearer " . $accessToken->getToken(),
        "Content-length: ".strlen($data_json))
        );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         $result = curl_exec($ch);
         echo "<pre>";
         print_r($result);

这个调用的响应是

 {  "error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again.",
"innerError": {
  "request-id": "7accd0e6-428c-4d71-....",
  "date": "2018-09-06T11:18:29"
}  }

Microsoft app in dev center

请帮助我如何解决这个问题

最佳答案

"message": "Access is denied. Check credentials and try again.",

正如消息所说,存在用户身份验证问题。

使用控制台或者其他方式输出Token。并在开发中心和项目设置中检查您的 redirectUri。

考虑效率,建议大家关注Microsoft Graph SDK for PHP进行我们所有的事件 API 调用。

关于php - 在 PHP 中使用 Outlook Api 创建新事件(使用 POST 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52223421/

相关文章:

C# VSTO Outlook 加载项 : What is a possible impact of not releasing the MailItem object

html - Outlook 友好的 HTML 代码与传统网页的代码是否不同?

css - Outlook 向电子邮件中的表格添加了不需要的间隙

azure-active-directory - 如何更新用户生日

azure - 如何使用应用程序标识符添加 Azure AD 应用程序

microsoft-graph-api - 如何访问共享点库中的自定义列 - 图形 API

php - 可以在 1 个查询中插入 700 行吗?

php - 通过多个索引引用 PHP 数组

php - 从多个表进行 PDO 高级搜索

php - 在 Twig 中使用命名空间别名