1

我正在尝试使用我们的 Cisco 电话系统(文档)提供的 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>

<Item> 元素的正确数量被计算并插入到 <SelectItems> 对象中,但是,实际的项目名称本身已经消失了。我猜它需要是 <Item>SEP0004F2E57F8C</Item> 等,但我似乎无法弄清楚如何让它做到这一点。

预先感谢您的任何帮助!!!

4

3 回答 3

2

经过几个小时的搜索和尝试,我已经解决了。

$array['SelectBy'] = "Name";

$array['Status'] = "Any";

$array['SelectItems']['SelectItem[0]']['Item'] = "SEP0015F9B16122";

$array['SelectItems']['SelectItem[1]']['Item'] = "SEP0015F9B16123";


$devices = $client->SelectCmDevice( 
    "", 
    $array
);

请记住:未知状态不会出现在结果中。

于 2010-04-16T11:43:04.230 回答
0

可能是 API 期望数组有不同的值。包含正确数量的项目这一事实是有希望的。

他们的 API 中有没有一种方法可以一次创建一个选定项目的列表?即开始选择项目,输入您想要的每个项目,然后结束选择项目?我不确定它是否理解 Cisco 方面的 Array 论点。此外,您是否尝试过以您正在创建的表单手动生成查询(即,如果您复制此查询,请将您的 ID 插入您尝试获取它们的位置)它是否有效?

雅各布

于 2009-08-11T17:27:18.540 回答
0

进一步检查,Cisco 的 API 无论如何都希望这些项目采用一种非常奇怪的格式,所以我已经切换到仅手动创建完整的请求 XML,而不是依赖 SoapClient 为我构建它。没有那么漂亮和干净,但它完成了工作。

于 2009-08-11T20:20:10.983 回答