整个上周,我都在为 EWS 使用 PHP 库而苦苦挣扎。我尝试了 Package365Ews 和 Php-ews,但它们都缺少我的核心功能,或者没有记录 - GetRooms。有谁知道如何处理它,或者知道另一个库实现这个?
1 回答
我个人会建议我自己的图书馆,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 官方文档了解您需要提出的任何请求