肥皂呼叫中PHP重复元素
问题描述:
我正在尝试从PHP执行肥皂呼叫的问题。肥皂呼叫中PHP重复元素
首先提供一些背景信息:呼叫转到在大型CRM系统上进行人员搜索的系统。它需要诸如姓名,城市,出生日期等信息。)成功时,它应该返回一个或多个ID。肥皂接口是系统的标准部分,所以我不能影响呼叫的布局。
我首先通过在SoapUI中构建肥皂请求开始工作,以查看是否可以使其工作。我结束了这个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中它是数组的关键,只有Item add_line_twee将被放在名为“interfaceFields”的数组中,因为它总是被覆盖。
不幸的是我不知道如何以另一种方式做到这一点,所以我无法得到像我从SoapUI创建的示例中的请求。
任何想法?
答
你不能使用非关联数组吗?即
'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' => ' '),
)
答
感谢帕特里克,我觉得你指着我的方法不对,我现在改代码:
$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'),
)
));
但我觉得我缺少点什么地方,因为我现在得到一个错误消息“名称”属性不在通话中。
Fatal error: Uncaught SoapFault exception: [Sender] SOAP-ERROR: Encoding: object hasn't 'Name' property
我也得到了同样类型的错误时,我只是通话的第一行更改为
new SoapParam('MAGMA::PERSON','model')
所以很明显,我失去了一些东西。不幸的是,SoapParam的文档不是很广泛,所以我不太确定我在这里做错了什么。
令人惊讶的是,这工作!我认为这不会是因为我认为名为“Item”的元素是强制性的,但显然不是。谢谢! – Erikl 2010-09-30 07:55:03