来自PHP SoapClient非wsdl模式的不需要的<param0>节点</param0>

时间:2014-03-27 18:31:47

标签: php soap

我正在尝试在非WSDL模式下使用PHP SoapClient发出请求。我将参数作为多维对象传递,如下面的代码片段所示:

$params = new stdClass;
$params->Characteristic = new stdClass;
$params->Characteristic->Name = 'PRODUCT_TYPE';
$params->Characteristic->CharacteristicValue = new stdClass;
$params->Characteristic->CharacteristicValue->Value = $type;
$params->Characteristic->CharacteristicValue->Type = 'STRING';

$client = new SoapClient(NULL, array(   'trace' => true,  'exceptions' => true, 'uri' => $uri, 'location' => $location,
        'connection_timeout'=>9999, 
        'features' => SOAP_SINGLE_ELEMENT_ARRAYS, 
        'soap_version' => SOAP_1_1, 'encoding' => 'ISO-8859-1', 
        'use' => SOAP_LITERAL
    ));

$response = $client->thisIsTheFunction($params);

除了包含在标记中之外,生成的XML几乎是正确的:

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://[removed]">
    <soap-env:body>
        <ns1:thisisthefunction>
            <param0>
                <characteristic>
                    <name>PRODUCT_TYPE</name>
                    <characteristicvalue>
                        <value>Adhoc</value>
                        <type>STRING</type>
                    </characteristicvalue>
                </characteristic>
            </param0>
        </ns1:thisisthefunction>
    </soap-env:body>
</soap-env:envelope>

问题是这被服务检测为格格不入。我们有什么方法可以删除这个额外的标签吗?

1 个答案:

答案 0 :(得分:2)

我认为如果你想删除param0并将characteristicValue放在这个地方,你需要使用SoapParam(http://www.php.net/manual/en/class.soapparam.php)。

事实上,你的电话必须这样:

$response = $client->thisIsTheFunction(new SoapParam($params->Characteristic, 'ns1:Characteristic'));

现在,您生成的XML看起来像这样:

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://[removed]">
<soap-env:body>
    <ns1:thisisthefunction>
        <ns1:characteristic>
            <name>PRODUCT_TYPE</name>
            <characteristicvalue>
                <value>Adhoc</value>
                <type>STRING</type>
             </characteristicvalue>
        </ns1:characteristic>
    </ns1:thisisthefunction>
</soap-env:body>

祝你好运!