Как обновить автоответы Exchange365 с помощью Graph API в PHP - PullRequest
1 голос
/ 28 июня 2019

Мне нужно обновить настройки автоответа пользователя (вне офиса) в Exchange.У меня есть весь код аутентификации на месте, и он работает.Теперь мне просто нужно сказать, что обновлять.

Пример C #:

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var mailboxSettings = new MailboxSettings
{
    AutomaticRepliesSetting = new AutomaticRepliesSetting
    {
        Status = AutomaticRepliesStatus.Scheduled,
        ScheduledStartDateTime = new DateTimeTimeZone
        {
            DateTime = "2016-03-20T18:00:00",
            TimeZone = "UTC"
        },
        ScheduledEndDateTime = new DateTimeTimeZone
        {
            DateTime = "2016-03-28T18:00:00",
            TimeZone = "UTC"
        }
    }
};

var me = new User();
me.MailboxSettings = mailboxSettings;

await graphClient.Me
    .Request()
    .UpdateAsync(me);

Я не уверен, как перевести это на PHP с помощью Graph API.Я пытался найти документ о том, как сделать это с помощью PHP API, но безуспешно.

Это код PHP, который я придумал:

include "../../vendor/autoload.php";
$code=$_GET["code"];

use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;


$oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
      'clientId'                => "clientid",
      'clientSecret'            => "secret",
      'redirectUri'             => "redirect",
      'urlAuthorize'            => "auth",
      'urlAccessToken'          => "access",
      'urlResourceOwnerDetails' => '',
      'scopes'                  => 'offline_access MailboxSettings.ReadWrite'
    ]);

try {
  // Make the token request
  $accessToken = $oauthClient->getAccessToken('authorization_code', [
    'code' => $code
  ]);

  $token=$accessToken->getToken();
  $graph = new Graph();
  $graph->setAccessToken($token);

  $user = $graph->createRequest('GET', '/me/mailboxSettings')
            ->setReturnType(Model\MailboxSettings::class)
            ->execute();

  $mailboxSettings = new Model\MailboxSettings();
  $start=new Model\DateTimeTimeZone();
  $start->DateTime = "2019-07-03T18:00:00";
  $start->TimeZone = "America/New_York";
  $end=new Model\DateTimeTimeZone();
  $end->DateTime = "2019-07-04T18:00:00";
  $end->TimeZone = "America/New_York";

  $replySettings = new Model\AutomaticRepliesSetting($propDict);
  $replySettings->setStatus(Model\AutomaticRepliesStatus::SCHEDULED);
  $replySettings->setScheduledStartDateTime($start);
  $replySettings->setScheduledEndDateTime($end);
  $replySettings->setInternalReplyMessage("I'm out of the office");
  $replySettings->setExternalReplyMessage("I'm out of the office");
  $mailboxSettings->setAutomaticRepliesSetting($replySettings);
}
catch (League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
  exit('ERROR getting tokens: '.$e->getMessage());
}

Этот код неДайте мне какие-либо ошибки, но я не уверен, как на самом деле отправить запрос на обновление для обновления настроек.

Кроме того, существует ли способ для токена доступа сохраниться?Я пытаюсь сделать следующее: пользователи вводят запросы на перерывы, вводя то, что они хотят, чтобы их сообщение об отсутствии на работе было.Я бы запустил задание cron, которое обновит их сообщение об отсутствии на работе, когда их нет в офисе.Это возможно?

1 Ответ

1 голос
/ 01 июля 2019

На самом деле GraphServiceClient, наконец, вызовет Microsoft Graph API (https://docs.microsoft.com/en-us/graph/api/overview?view=graph-rest-1.0)

. Существует API для изменения настроек почтового ящика. Установив в нем автоматический набор ответов, вы можете изменить настройки автоответа.И вы можете найти образец на этой странице: enter image description here

Примечание:

Microsoft Graph API защищен Azure AD. Необходимо получить токен доступаДля получения токена авторизации, пожалуйста, обратитесь к официальному учебнику: Получить токен авторизации

Обновление:

Вы можете сделать патчзапрос следующим образом:

<?php
    $token = "your get with adal php sdk";

    $authUrl      = 'https://graph.microsoft.com/v1.0/me/mailboxSettings';
    $ch           = curl_init();
    $headers      = [
           "Content-Type:application/json",
           "Authorization:Bearer $token"
    ];

    $data = array(
        "@odata.context" => "https://graph.microsoft.com/v1.0/\$metadata#Me/mailboxSettings",
        "automaticRepliesSetting" => array (
            "status" => "scheduled" ,
            "externalAudience" => "all",
            "scheduledStartDateTime" => array (
                "dateTime" => "2019-07-18T05:00:00.0000000",
                "timeZone" => "UTC"
            ), 
            "scheduledEndDateTime" => array (
                "dateTime" => "2019-07-19T06:00:00.0000000",
                "timeZone" => "UTC"
            ) ,
            "internalReplyMessage" => "This is the internalReplyMessage.",
            "externalReplyMessage" => "This is the externalReplyMessage."
        )
    );

    $postdata = json_encode($data);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_URL, $authUrl);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $strResponse = curl_exec($ch);
    $curlErrno   = curl_errno($ch);
    if ($curlErrno) {
           $curlError = curl_error($ch);
           throw new Exception($curlError);
    }

    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
//  $objResponse = json_decode($strResponse);

    print_r($http_status."\n");
    print_r($strResponse."\n");

?>

Результат:

В перспективе я вижу, что параметры автоответа были успешно обновлены.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...