我正在开发一个项目,我需要将参数传递给.NET Web服务。下面是.NET SOAP请求结构的样子。
<soap:Body>
<ListRequest xmlns="My.API.1.0">
<ID>guid</ID>
<Parameters>
<Values xmlns="api.test">
<fv ID="string">
<Value />
<ValueTranslation>string</ValueTranslation>
</fv>
<fv ID="string">
<Value />
<ValueTranslation>string</ValueTranslation>
</fv>
</Values>
</Parameters>
</ListRequest>
</soap:Body>
以下是PHP代码的一部分。
$params=array('ID'=> $listID,
'Parameters' =>
array(
array('ID' => 'ROOM', 'ValueTranslation' => '99999')));
$result=$soapClient->ListRequest($params);
每当我在没有参数的情况下进行调用时,请求都会起作用并将结果返回到php页面。但是当我介绍参数时,我得到“函数GETLIST期望参数'ROOM',这是没有提供的”错误。我感觉问题是我映射参数结构的方式,但我无法弄清楚如何将上面的SOAP xml映射到php代码。
谢谢大家的帮助!
答案 0 :(得分:3)
我认为您不能使用assoc数组为soap请求指定参数。尝试使用对象,它在过去对我有用
$params = new stdClass();
$params->ID = $listId;
$params->Parameters = new stdClass();
$params->Parameters->Values = new stdClass();
$params->Parameters->Values->fv = array();
//Child of "Parameters"
$p = new stdClass();
$p->ID = 'ROOM';
$p->ValueTranslation = '99999';
$params->Parameters->Values->fv[] = $p;
$soap->ListRequest($params);
另一个解决方案是使用XML DOM并自己处理XML数据的创建(然后只需将其作为字符串传递给要在SOAP中调用的函数)
此外,您使用assoc数组创建的数据结构与它应该的结构不匹配..(仔细查看您发布的XML,您将看到您缺少的内容)
编辑:我想我现在应该反映你的架构。