0

.NETWebサービスにパラメーターを渡す必要があるプロジェクトに取り組んでいます。以下は、.NETSOAPリクエスト構造の外観です。

<soap:Body>
<ListRequest xmlns="My.API.1.0">
      <ID>guid</ID>
      <Parameters>
        <Values xmlns="api.test">
          <fv ID="string">
            <Value />
            <ValueTranslation>string</ValueTranslation>
          </fv>
          <fv ID="string">
            <Value />
            <ValueTranslation>string</ValueTranslation>
          </fv>
        </Values>
      </Parameters>      
</ListRequest>
</soap:Body>

以下はPHPコードの一部です。

$params=array('ID'=> $listID,
              'Parameters' => 
                array(
                   array('ID' => 'ROOM', 'ValueTranslation' => '99999')));                    

        $result=$soapClient->ListRequest($params);

パラメータを指定せずに呼び出しを行うと、リクエストが機能し、結果がphpページに返されます。しかし、パラメーターを導入すると、「関数GETLISTは、指定されていないパラメーター'ROOM'を予期しています」というエラーが発生します。問題はパラメータ構造をマッピングする方法にあると感じていますが、上記のSOAPxmlをphpコードにマッピングする方法がわかりません。

よろしくお願いします!

4

1 に答える 1

3

assoc配列を使用してsoapリクエストのパラメーターを指定できるとは思いません。代わりにオブジェクトを使用してみてください、それは過去に私のために働いていました

$params = new stdClass();
$params->ID = $listId;

$params->Parameters = new stdClass();

$params->Parameters->Values = new stdClass();
$params->Parameters->Values->fv = array();

//Child of "Parameters"
$p = new stdClass();
$p->ID = 'ROOM';
$p->ValueTranslation = '99999';

$params->Parameters->Values->fv[] = $p;

$soap->ListRequest($params);

もう1つの解決策は、XML DOMを使用して、XMLデータの作成を自分で処理することです(次に、SOAPで呼び出したい関数に文字列として渡すだけです)。

さらに、assoc配列を使用して作成するデータ構造は、本来あるべき構造と一致しません。(投稿しているXMLをよく見ると、欠落しているものがわかります)

編集:私は今あなたのスキーマを反映するはずの何かを作ったと思います。

于 2012-09-19T17:12:26.907 に答える