我正在尝试使用我们的思科电话系统(documentation)提供的SOAP服务,以获取给定手机集的当前状态。我有一系列电话名称,我正试图传递给服务,但是,数组的值正在某处被吃掉
这样的项目数组:
$items = array(
0 => "SEP0004F2E57F8C",
1 => "SEP001111BF8758",
2 => "SEP001320BD485C"
);
试图调用方法:
$client = new SoapClient(
"https://x.x.x.x/realtimeservice/services/RisPort?wsdl",
array(
"login" => "admin",
"password"=> "xxxxx",
"trace" => true
)
);
$devices = $client->SelectCmDevice(
"",
array(
"SelectBy" => "Name",
"Status" => "Any",
"SelectedItems" => $items
)
);
当我调试完整的请求时,我得到以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
mlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://schemas.cisco.com/ast/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:SelectCmDevice>
<StateInfo xsi:type="xsd:string"></StateInfo>
<CmSelectionCriteria xsi:type="ns1:CmSelectionCriteria">
<MaxReturnedDevices xsi:nil="true"/>
<Class xsi:nil="true"/>
<Model xsi:nil="true"/>
<Status xsi:type="xsd:string">Any</Status>
<NodeName xsi:nil="true"/>
<SelectBy xsi:type="xsd:string">Name</SelectBy>
<SelectItems SOAP-ENC:arrayType="ns1:SelectItem[3]" xsi:type="ns1:SelectItems">
<item xsi:type="ns1:SelectItem"/>
<item xsi:type="ns1:SelectItem"/>
<item xsi:type="ns1:SelectItem"/>
</SelectItems>
</CmSelectionCriteria>
</ns1:SelectCmDevice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
&lt; Item&gt;的正确数量计算元素并将其插入&lt; SelectItems&gt;但是,实际的项目名称本身已经消失。我猜它需要&lt; Item&gt; SEP0004F2E57F8C&lt; / Item&gt;等等,但我似乎无法弄明白如何做到这一点。
提前感谢您的帮助!!!
答案 0 :(得分:2)
经过几个小时的搜索和尝试,我已经解决了。
$array['SelectBy'] = "Name";
$array['Status'] = "Any";
$array['SelectItems']['SelectItem[0]']['Item'] = "SEP0015F9B16122";
$array['SelectItems']['SelectItem[1]']['Item'] = "SEP0015F9B16123";
$devices = $client->SelectCmDevice(
"",
$array
);
请记住:未知状态不会显示在结果中。
答案 1 :(得分:0)
可能是API期望数组的值不同。包含正确数量的项目这一事实很有希望。
他们的API中是否有一种方法可以一次创建一个项目的所选项目列表?即开始选择项目,输入您想要的每个项目,然后结束选择项目?我不确定它是否理解思科方面的Array参数。此外,您是否尝试以您正在创建的形式手动生成查询(例如,如果您复制此查询,将ID插入到您尝试获取的位置)是否有效?
雅各
答案 2 :(得分:0)
在进一步检查时,思科的API无论如何都希望这些项目处于一种非常奇怪的格式,所以我已经切换到只是手工创建完整的请求XML而不是依靠SoapClient为我构建它。不是那么干净,但它完成了工作。