0

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

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

这是 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

现在,如果我var_export($getUserResult);在 SOAP 客户端收到数据后添加,我会得到如下信息:

stdClass::__set_state(array('getUserResult' => 'getUser_OK', 'oUser' => stdClass::__set_state(array('iNodeID' => 11028674, 'sName' => '技术名称', 'sNick' => '技术名称', '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 剪切文本来获取字符串的状态。

将来,我想为这个东西添加其他功能,比如报告,如果我不知道如何正确读取这些数据,恐怕这一切都会被抛在脑后。

非常感谢您可以给我的任何帮助,我对此感到很疯狂。

4

2 回答 2

2

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

echo $getUserResult->oUser->sName;

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

于 2012-12-21T17:08:15.987 回答
0

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

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

$name = $getUserResult->oUser->sName;

$status = $getUserResult->oUser->eStatus;

etc.
于 2012-12-21T17:09:04.493 回答