我在PHP中尝试进行soap调用时遇到了问题。
首先是一些背景信息:呼叫将转到一个系统,该系统在大型CRM系统上进行人员搜索。它需要姓名、城市、出生日期等信息。)当成功时,它应该返回一个或多个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中创建的示例中那样的请求。
有什么想法吗?
发布于 2010-09-29 22:38:29
可以不使用非关联数组吗?也就是说。
'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-29 22:43:29
你有没有看过SoapParam-和SoapVar-objects?
发布于 2010-09-30 15:19:48
谢谢Patrik,我认为你给我指出了正确的方向,我现在将代码更改为:
$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“属性不在调用中。
编码致命错误:未捕获SoapFault异常:发送方SOAP-错误:编码:对象没有'Name‘属性
当我仅将调用的第一行更改为
new SoapParam('MAGMA::PERSON','model')很明显,我漏掉了什么。不幸的是,SoapParam的文档不是很全面,所以我不太确定我在这里做错了什么。
https://stackoverflow.com/questions/3822598
复制相似问题