LMI Rescue API 和 PHP/SOAP 的问题


Trouble with LMI Rescue API and PHP/SOAP

我正在尝试使用LogMeIn的Rescue API构建一个快速工具。基本上,我想要的是能够快速启用和禁用技术人员(甚至从移动设备(,而无需登录他们繁琐的管理面板。

我已经弄清楚了如何获取 SOAP 查询所需的秘密密码,但是当数据返回时,我在处理数据时遇到了一些麻烦。我的小应用程序的第一步是确定用户的当前状态,所以我有一个肮脏的快速测试,该测试对 2 个用户(或他们调用它们的节点(的 API URL 运行 SOAP 客户端请求。我遇到的问题是数据返回时的格式。

下面是 SOAP 请求的代码:

$authCode = $_SESSION['authCode'];
$user1_status = "";
$user2_status = "";
$soapclient = new SoapClient("https://secure.logmeinrescue.com/api/api.asmx?wsdl");
$iNodeID = $user1; //The value of user1 is defined previous to this bit of code 
$getuserparams = array (
'iNodeID' => $iNodeID,
'sAuthCode' => $authCode
);
$getUserResult = $soapclient->getUser($getuserparams);
.
.
.
//SOAP request for the other user, same stuff

现在,如果我在 SOAP 客户端收到数据后添加var_export($getUserResult);,我会得到如下所示的内容:

stdClass::__set_state(array( 'getUserResult' => 'getUser_OK', 'oUser' =>

stdClass::__set_state(array( 'iNodeID

' => 11028674, 'sName' => 'Tech Name', 'sNick' => 'Tech Name', 'sEmail' => 'tech.name@email.co.uk', 'sSSOID' => 'tech.name@email.co.uk', 'sDescription' => '', 'eType' => 'Technician', 'bAccountHolder' => false, 'hasMobileAddon' => false, 'eStatus' => 'Offline', ((, ((

我实际上只对技术人员的姓名和他的状态感兴趣,以建立一个包含每个人状态的快速表格或列表。由于数据var_export,我怀疑从 SOAP 客户端返回的内容是一个数组(我只能假设(,因此如果我尝试执行以下操作访问它:

$status = var_export($getUserResult["eStatus"], true);
echo $status;

我得到以下信息:

致命错误:不能在第 53 行的 C:''wamp''www''rescue''admin.php 中使用 stdClass 类型的对象作为数组

我搜索了一下,在这里找到了一堆谈论同样的事情的帖子,但我找不到任何关于纯PHP的内容,大部分内容都是关于CMS的,比如WordPress。

您能否阐明我应该如何读取这些数据或将其"制作"到数组中以正确需要它?

目前,我正在使用一种非常非常丑陋的解决方案,方法是对表中的名称进行硬编码,并通过使用 substr 和 str_replace 剪切文本将状态作为字符串获取。

将来,我想为这个东西添加其他功能,比如报告,如果我无法弄清楚如何正确读取这些数据,恐怕所有这些都会消失。

非常感谢你能给我的任何帮助,我快要疯了。

它返回一个对象而不是数组,因此您应该尝试使用对象表示法来访问属性:

echo $getUserResult->oUser->sName;

如果使用 var_dump 而不是 var_export 来显示重新创建对象所需的代码,而不是对象本身的直接细分,这可能会更清楚。

你对$getUserResult所拥有的是一个stdClass对象。 该__set_state()告诉您的是对象的当前设置属性是什么。在这种情况下,您感兴趣的信息实际上驻留在 oUser 属性中设置的另一个stdClass对象中。

为了访问您需要执行的值:

$name = $getUserResult->oUser->sName;
$status = $getUserResult->oUser->eStatus;
etc.