1

特定の電話セットの現在のステータスを取得するために、シスコの電話システム (ドキュメント)が提供する 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に、選択したアイテムのリストを一度に1つずつ作成する方法はありますか?つまり、アイテムの選択を開始し、必要な各アイテムを入力してから、アイテムの選択を終了しますか?Cisco側のArray引数を理解しているのかわかりません。また、作成しているフォームでクエリを手動で生成しようとしましたか(つまり、このクエリをコピーする場合は、取得しようとしている場所にIDを挿入します)、機能しますか?

ジェイコブ

于 2009-08-11T17:27:18.540 に答える
0

さらに調べてみると、Cisco の API はアイテムを本当に奇妙な形式で要求しているため、SoapClient に頼ってビルドするのではなく、完全なリクエスト XML を手動で作成することに切り替えました。きれいできれいではありませんが、仕事は完了します。

于 2009-08-11T20:20:10.983 に答える