PHP-EWS SOAP响应是如何获得特定部分的


PHP-EWS SOAP response is an how to get a specific portion?

我正在使用这段代码和PHP-EWS一起在Exchange 2010邮箱上创建一个日历项。

<?php
include ("ExchangeWebServices.php");
include ("EWS_Exception.php");
include ("EWSType.php");
include ("NTLMSoapClient.php");
include ("NTLMStream.php");
include ("NTLMStream/Exchange.php");
include ("NTLMSoapClient/Exchange.php");
$host = "email.domain.com";
$username = "asdfasdf";
$password = "123";
$ews = new ExchangeWebServices($host, $username, $password);
$request->SendMeetingInvitations = 'SendToNone';
$request->SavedItemFolderId->DistinguishedFolderId->Id = 'calendar';
$request->Items->CalendarItem->Subject = 'this is the subject of the email';
$request->Items->CalendarItem->Start = date('c', strtotime('today'));
$request->Items->CalendarItem->End = date('c',  strtotime('today + 1 day'));
$request->Items->CalendarItem->IsAllDayEvent = true;
$request->Items->CalendarItem->LegacyFreeBusyStatus = 'Free';
$request->Items->CalendarItem->Categories->String = $category;
$request->Items->CalendarItem->Body->BodyType = 'Text';
$request->Items->CalendarItem->Body->_ = $body;
$response = $ews->CreateItem($request);
print_r($response);
?>

这很好,输出到浏览器的响应如下:

stdClass Object ( [ResponseMessages] => stdClass Object ( [CreateItemResponseMessage] => stdClass Object ( [ResponseCode] => NoError [ResponseClass] => Success [Items] => stdClass Object ( [CalendarItem] => stdClass Object ( [ItemId] => stdClass Object ( [Id] => AAASAHJydXVza2FAc3VicmFkLmNvbQBGAAAAAACyAesJgtiMR71+s/kuiAieBwBrnLmGR6RGTakOvWxNjsbfAAAAQwN1AABrnLmGR6RGTakOvWxNjsbfAABcYtppAAA= [ChangeKey] => DwAAABYAAABrnLmGR6RGTakOvWxNjsbfAABcYx9q ) ) ) ) ) )

我唯一想要的是[Id] =>后面的128个字符串。如果我将这个对象转换为字符串,我可以像这样解析字符串:

$var = 'stdClass Object ( [ResponseMessages] => stdClass Object ( [CreateItemResponseMessage] => stdClass Object ( [ResponseCode] => NoError [ResponseClass] => Success [Items] => stdClass Object ( [CalendarItem] => stdClass Object ( [ItemId] => stdClass Object ( [Id] => AAASAHJydXVza2FAc3VicmFkLmNvbQBGAAAAAACyAesJgtiMR71+s/kuiAieBwBrnLmGR6RGTakOvWxNjsbfAAAAQwN1AABrnLmGR6RGTakOvWxNjsbfAABcYtpzAAA= [ChangeKey] => DwAAABYAAABrnLmGR6RGTakOvWxNjsbfAABcYzc4 ) ) ) ) ) )';
$regex_pattern = "/ /";
$matches = preg_split($regex_pattern,$var);
print_r($matches[36]);

但是,我在将对象转换为字符串时遇到了困难。此外,如果响应稍有变化,我将无法获得返回的正确值。查看对象并返回[Id] =>后面的值的最佳方法是什么?

你为什么不直接做:

$id = $response->ResponseMessages->CreateItemResponseMessage->Items->CalendarItem->ItemId->Id;

的优点是不需要将对象强制转换为string,只需以通常的方式获取所需的内容。另一个优点是,即使M$改变了一些东西,为了向后兼容,返回ID的方式应该保持不变,因此这将工作。

当您编辑日历项时,响应几乎是相同的,唯一的区别是响应消息类型是UpdateItemResponseMessage