PHP 带有 GetRooms 的 Office365 EWS 库
PHP library for Office365 EWS with GetRooms
整个上周我都在为 EWS 的 Php 库苦苦挣扎。我尝试了 Package365Ews 和 Php-ews,但它们都缺少我的核心功能,或者没有记录 - GetRooms。有谁知道如何处理它,或者知道另一个实现这个的库?
我个人会推荐我自己的图书馆,garethp/php-ews
。
它的用法很简单,但并不是所有内容都包含在更简单的 API 中。 EWS 是一个 大 的东西,记录一切会很紧张。也就是说,我当然可以帮助您将 Microsoft 的现有文档转换为使用此代码。而且,如果您在 post 之后发现自己遇到更多问题,我每天都会检查我的 Github,因此在我的存储库中记录问题将在更好的地方获得更多帮助。
但首先,让我说明一下如何执行未直接记录的功能。喜欢GetRooms
。我的 API 包裹 around EWS,它不会阻止您访问它。因此,即使我没有明显的方法来执行 GetRooms,it's still there。像这样
<?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% 想要做什么,但我会使用 this article as a base。我们要尝试复制的 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>
您可以跳过 header 和 <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);
这将为您的 SOAP 调用翻译成 XML。使用此方法,对于任何未记录或完全支持的功能,您仍然可以轻松地使用它们,只需参考 Microsoft 官方文档以获取您需要提出的任何请求
整个上周我都在为 EWS 的 Php 库苦苦挣扎。我尝试了 Package365Ews 和 Php-ews,但它们都缺少我的核心功能,或者没有记录 - GetRooms。有谁知道如何处理它,或者知道另一个实现这个的库?
我个人会推荐我自己的图书馆,garethp/php-ews
。
它的用法很简单,但并不是所有内容都包含在更简单的 API 中。 EWS 是一个 大 的东西,记录一切会很紧张。也就是说,我当然可以帮助您将 Microsoft 的现有文档转换为使用此代码。而且,如果您在 post 之后发现自己遇到更多问题,我每天都会检查我的 Github,因此在我的存储库中记录问题将在更好的地方获得更多帮助。
但首先,让我说明一下如何执行未直接记录的功能。喜欢GetRooms
。我的 API 包裹 around EWS,它不会阻止您访问它。因此,即使我没有明显的方法来执行 GetRooms,it's still there。像这样
<?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% 想要做什么,但我会使用 this article as a base。我们要尝试复制的 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>
您可以跳过 header 和 <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);
这将为您的 SOAP 调用翻译成 XML。使用此方法,对于任何未记录或完全支持的功能,您仍然可以轻松地使用它们,只需参考 Microsoft 官方文档以获取您需要提出的任何请求