PHP повторяющиеся элементы в мыльном вызове

У меня проблема с мыльным вызовом, который я пытаюсь сделать с 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 '<PRE>'; print_r($result); echo '</PRE>'; 

Однако это не удается. Проблема довольно очевидна, так как элемент «item» повторяется несколько раз, а в PHP это ключ от массива, только элемент add_line_twee будет находиться в массиве с именем «interfaceFields», поскольку он перезаписывается все время.

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

Есть идеи?

Related of "PHP повторяющиеся элементы в мыльном вызове"

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

 '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' => ' ' ), ) 

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

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

 $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: [Отправитель] SOAP-ERROR: Кодирование: объект не имеет свойства «Имя»

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

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

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