Значения массива исчезают в вызове PHP SoapClient к телефонной системе Cisco - PullRequest
1 голос
/ 11 августа 2009

Я пытаюсь воспользоваться услугой SOAP, предоставляемой нашей телефонной системой Cisco ( документация ), чтобы получить текущее состояние данного набора телефонов. У меня есть массив имен телефонов, которые я пытаюсь передать службе, однако значения массива где-то съедаются

Массив таких элементов:

$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 и т. Д., Но я не могу понять, как заставить это сделать это.

Заранее спасибо за любую помощь !!!

Ответы [ 3 ]

2 голосов
/ 16 апреля 2010

После поиска и попытки в течение нескольких часов я решил это.

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

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

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

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


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

Только чтобы запомнить: статус неизвестного не будет отображаться в результате.

0 голосов
/ 12 августа 2009

При дальнейшей проверке API-интерфейс Cisco в любом случае хочет, чтобы элементы находились в действительно странном формате, поэтому я переключился на то, чтобы просто создать полный XML-запрос вручную, а не полагаться на SoapClient для его создания. Не такой красивый и чистый, но он выполняет свою работу.

0 голосов
/ 11 августа 2009

Возможно, API ожидает разные значения для массива. Тот факт, что указано правильное количество предметов, является многообещающим.

Есть ли в их API способ создания списка выбранных элементов по одному элементу за раз? то есть начать выбирать элементы, ввести каждый элемент, который вы хотите, а затем закончить выбор элементов? Я не уверен, что он понимает аргумент Array на стороне Cisco. Кроме того, пытались ли вы вручную сгенерировать запрос в форме, которую вы создаете (то есть, если вы копируете этот запрос, вставляете свои идентификаторы, где вы пытаетесь их получить), он работает?

Jacob

...