PHP повторил элементы в мыльном вызове - PullRequest
3 голосов
/ 29 сентября 2010

У меня проблема с мыльным вызовом, который я пытаюсь сделать из PHP.

Сначала некоторая справочная информация: вызов поступает в систему, которая выполняет поиск людей в большой системе CRM. Требуется информация, такая как имя, город, дата рождения и т. Д.) В случае успеха он должен вернуть один или несколько идентификаторов. Мыльный интерфейс является стандартным компонентом системы, поэтому я не могу повлиять на раскладку вызова.

Я сначала начал с создания запроса на мыло в SoapUI, чтобы посмотреть, смогу ли я заставить его работать. Я закончил с этим запросом мыла, который работает:

 <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 '';
print_r($result);
echo '
';

Это, однако, не удается. Проблема довольно очевидна, поскольку элемент "item" повторяется несколько раз, а в PHP он является ключом массива, только элемент add_line_twee будет в массиве с именем "interfaceFields", поскольку он все время перезаписывается. 1013 *

К сожалению, я не могу понять, как сделать это по-другому, поэтому я не могу получить запрос, как в примере, который я создал из SoapUI.

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 29 сентября 2010

Не могли бы вы использовать неассоциативный массив?Т.е.

'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' => ' ' ),
)
0 голосов
/ 30 сентября 2010

Спасибо, Патрик, я думаю, что вы правильно указали на меня, теперь я изменил код на:

$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'),
        )
    ));

Но я думаю, что где-то упускаю смысл, потому что теперь я получаюсообщение об ошибке, что свойство "name" отсутствует в вызове.

Неустранимая ошибка: Uncaught Исключение SoapFault: [Отправитель] SOAP-ERROR: Кодировка: объект не имеет свойства 'Name'

Я также получаю такую ​​же ошибку, когда меняю только первую строку вызова на

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

Так ясно, что я что-то упускаю.К сожалению, документация для SoapParam не очень обширна, поэтому я не совсем уверен, что я делаю здесь неправильно.

0 голосов
/ 29 сентября 2010

Вы смотрели на SoapParam - и SoapVar -объекты?

...