3

PHP から実行しようとしている SOAP 呼び出しに問題があります。

最初の背景情報: 電話は、大規模な CRM システムで人物検索を行うシステムに送信されます。名前、都市、生年月日などの情報が必要です。) 成功すると、1 つまたは複数の ID が返されます。soap インターフェイスはシステムの標準的な部分であるため、呼び出しのレイアウトに影響を与えることはできません。

まず、SoapUI で SOAP リクエストを作成して、それが機能するかどうかを確認しました。私はこのsoapリクエストに行き着きました。これは機能しています:

 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:hidl="http://humaninference.com/hidl-mapped">
   <soap:Header/>
   <soap:Body>
      <hidl:HI__DQComponents__Identify__Searching__Search>
         <hidl:model>MAGMA::PERSON</hidl:model>
         <hidl:execution>Match</hidl:execution>
         <hidl:interfaceFields>
            <hidl:item>
               <hidl:Name>master_id</hidl:Name>
               <hidl:Value>0</hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>Name</hidl:Name>
               <hidl:Value>jansen</hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>birthdate</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>add_id</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>street</hidl:Name>
               <hidl:Value>oudegracht</hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>dumstreet</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>housenumber</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
            <hidl:item>
               <hidl:Name>postcode</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
        <hidl:item>
               <hidl:Name>city</hidl:Name>
               <hidl:Value>Utrecht</hidl:Value>
            </hidl:item>
        <hidl:item>
               <hidl:Name>citydum</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
        <hidl:item>
               <hidl:Name>add_line_twee</hidl:Name>
               <hidl:Value></hidl:Value>
            </hidl:item>
         </hidl:interfaceFields>
      </hidl:HI__DQComponents__Identify__Searching__Search>
   </soap:Body>
</soap:Envelope>

次のステップは、PHP から同じリクエストを作成することでした。そのために、次のコードを書きました。

$result = $client->HI__DQComponents__Identify__Searching__Search(array(
    'model' => 'MAGMA::PERSON', 
    'execution' => 'Search',
    'interfaceFields' => array (
        'item' => array ('Name' => 'master_id',     'Value' => '0' ),
        'item' => array ('Name' => 'Name',          'Value' => 'jansen' ),
        'item' => array ('Name' => 'birthdate',     'Value' => ' ' ),
        'item' => array ('Name' => 'add_id',        'Value' => ' ' ),
        'item' => array ('Name' => 'street',        'Value' => 'Oudegracht' ),
        'item' => array ('Name' => 'dumstreet',     'Value' => ' ' ),
        'item' => array ('Name' => 'housenumber',   'Value' => ' ' ),
        'item' => array ('Name' => 'postcode',      'Value' => ' ' ),
        'item' => array ('Name' => 'city',          'Value' => 'utrecht' ),
        'item' => array ('Name' => 'citydum',       'Value' => ' ' ),
        'item' => array ('Name' => 'add_line_twee', 'Value' => ' ' ),
        )
    ));

echo '<PRE>';
print_r($result);
echo '</PRE>';

ただし、これは失敗します。「item」要素は数回繰り返され、PHP では配列のキーであるため、問題は明らかです。アイテム add_line_twee のみが「interfaceFields」と呼ばれる配列に含まれます。これは常に上書きされるためです。

残念ながら、これを別の方法で行う方法を理解できないため、SoapUI から作成した例のように要求を取得できません。

何か案は?

4

3 に答える 3

6

非連想配列を使用できませんか? いえ

'interfaceFields' => array (
    array ('Name' => 'master_id',     'Value' => '0' ),
    array ('Name' => 'Name',          'Value' => 'jansen' ),
    array ('Name' => 'birthdate',     'Value' => ' ' ),
    array ('Name' => 'add_id',        'Value' => ' ' ),
    array ('Name' => 'street',        'Value' => 'Oudegracht' ),
    array ('Name' => 'dumstreet',     'Value' => ' ' ),
    array ('Name' => 'housenumber',   'Value' => ' ' ),
    array ('Name' => 'postcode',      'Value' => ' ' ),
    array ('Name' => 'city',          'Value' => 'utrecht' ),
    array ('Name' => 'citydum',       'Value' => ' ' ),
    array ('Name' => 'add_line_twee', 'Value' => ' ' ),
)
于 2010-09-29T14:38:29.130 に答える
0

パトリックに感謝します。あなたは正しい方法で私を指していると思います。コードを次のように変更しました。

$result = $client->HI__DQComponents__Identify__Searching__Search(
array(
    'model'  => 'MAGMA::PERSON',
    'execution' => 'Search',
    'interfaceFields' => array (
         new SoapParam(array('Name' => 'master_id',     'Value' => '0')         ,'item'),
         new SoapParam(array('Name' => 'Name',          'Value' => 'jansen')    ,'item'),
         new SoapParam(array('Name' => 'birthdate',     'Value' => ' ')         ,'item'),
         new SoapParam(array('Name' => 'add_id',        'Value' => ' ')         ,'item'),
         new SoapParam(array('Name' => 'street',        'Value' => 'oudegracht'),'item'),
         new SoapParam(array('Name' => 'dumstreet',     'Value' => ' ')         ,'item'),
         new SoapParam(array('Name' => 'housenumber',   'Value' => ' ')         ,'item'),
         new SoapParam(array('Name' => 'postcode',      'Value' => ' ')         ,'item'),
         new SoapParam(array('Name' => 'city',          'Value' => 'Utrecht')   ,'item'),
         new SoapParam(array('Name' => 'citydum',       'Value' => ' ')         ,'item'),
         new SoapParam(array('Name' => 'add_line_twee', 'Value' => ' ')         ,'item'),
        )
    ));

しかし、「名前」プロパティが呼び出しに含まれていないというエラーメッセージが表示されるため、どこかでポイントを逃していると思います。

致命的なエラー: キャッチされない SoapFault 例外: [Sender] SOAP-ERROR: Encoding: object has not 'Name' プロパティ

呼び出しの最初の行のみを変更すると、同じ種類のエラーが発生します

new SoapParam('MAGMA::PERSON','model')

明らかに、私は何かが欠けています。残念ながら、SoapParam のドキュメントはあまり充実していないため、ここで何が間違っているのかよくわかりません。

于 2010-09-30T07:19:47.753 に答える
0

SoapParam オブジェクトSoapVarオブジェクトを見たことがありますか?

于 2010-09-29T14:43:29.410 に答える