PHP SoapClient调用Cisco电话系统时,数组值消失

时间:2009-08-11 16:27:45

标签: php soap cisco

我正在尝试使用我们的思科电话系统(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;等等,但我似乎无法弄明白如何做到这一点。

提前感谢您的帮助!!!

3 个答案:

答案 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为我构建它。不是那么干净,但它完成了工作。