0

整个上周,我都在为 EWS 使用 PHP 库而苦苦挣扎。我尝试了 Package365Ews 和 Php-ews,但它们都缺少我的核心功能,或者没有记录 - GetRooms。有谁知道如何处理它,或者知道另一个库实现这个?

4

1 回答 1

2

我个人会建议我自己的图书馆,garethp/php-ews.

它的用法很简单,但并非所有内容都包含在更简单的 API 中。EWS 是一件大事,记录一切都会很紧张话虽如此,我当然可以帮助您将 Microsoft 的现有文档转换为使用此代码。而且,如果您在这篇文章之后发现自己遇到更多问题,我会每天检查我的 Github,因此在我的存储库中记录问题将在更好的地方获得更多帮助,以便来回讨论。

但首先,让我介绍如何执行未直接记录的功能。喜欢GetRooms。我的 API围绕EWS,它不会阻止您访问它。所以即使我没有做出明显的方法来做一个 GetRooms,它仍然存在。像这样

<?php

use garethp\ews\API;
use garethp\ews\API\Type;

$api = API::fromUsernameAndPassword($server, $username, $password);

//Build Request

$result = $api->getClient()->GetRooms($request);

var_dump($result);

那么,问题就变成了,我们如何构建请求?好吧,谢天谢地,EWS 在 XML 中得到了很好的记录。首先,找到描述您正在尝试执行的操作的文章,然后查找 XML。我不是 100% 你想做的,但我会以这篇文章为基础。我们要尝试复制的 XML 是

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
           xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
           xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:GetRooms>
      <m:RoomList>
        <t:EmailAddress>bldg3rooms@contoso.com</t:EmailAddress>
      </m:RoomList>
    </m:GetRooms>
  </soap:Body>
</soap:Envelope>

您可以跳过标题和<m:GetRooms>部分,它们是为您构建的。我们关注的是您要发送的有效载荷,即

<m:RoomList>
    <t:EmailAddress>bldg3rooms@contoso.com</t:EmailAddress>
</m:RoomList>

我们想让我们的请求看起来像这样。因此,在我们的代码中,我们的请求将如下所示:

$request = array (
    'RoomsList' => array (
        'EmailAddress' => 'bldg3rooms@contoso.com'
    )
);

$request = Type::buildFromArray($request);

这将为您转换为 XML 用于 SOAP 调用。使用此方法,对于任何未记录或完全支持的功能,您仍然可以轻松使用它们,只需参考 Microsoft 官方文档了解您需要提出的任何请求

于 2016-08-05T09:39:48.047 回答