0

我正在开发一个需要将参数传递给 .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 代码。

谢谢大家的帮助!

4

1 回答 1

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,您会发现缺少什么)

编辑:认为我现在做了一些应该反映你的模式的东西。

于 2012-09-19T17:12:26.907 回答