Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组值在PHP SoapClient调用Cisco电话系统时消失_Php_Soap_Cisco - Fatal编程技术网

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

数组值在PHP SoapClient调用Cisco电话系统时消失,php,soap,cisco,Php,Soap,Cisco,我正在尝试使用Cisco电话系统()提供的SOAP服务,以获取给定电话集的当前状态。我有一个电话名数组,我正试图将其传递给服务,但是,数组的值正在某处被吃掉 如下所示的项目数组: $items = array( 0 => "SEP0004F2E57F8C", 1 => "SEP001111BF8758", 2 => "SEP001320BD485C" ); 正在尝试调用该方法: $client = new SoapClient( "https:

我正在尝试使用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>

任何
名称
计算了正确数量的元素并将其插入到对象中,但是实际的项目名称本身消失了。我想应该是SEP0004F2E57F8C等等,但我似乎不知道如何让它做到这一点


提前感谢您的帮助

可能是API对数组的期望值不同。事实上,正确的项目数量是有希望的

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


Jacob

进一步检查,Cisco的API希望这些项目的格式非常奇怪,因此我已经转向手动创建完整的请求XML,而不是依赖SoapClient为我构建它。虽然没有那么干净漂亮,但它完成了任务。

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

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

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

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

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


$devices = $client->SelectCmDevice( 
    "", 
    $array
);
记住:未知的状态不会出现在结果中