0

我正在尝试从我的网络应用程序调用 SOAP 服务。我创建了一个没有问题的肥皂客户端,但我在调用 SOAP 方法 GetCustomer 时遇到了问题。我收到以下 SOAP 错误

SOAP-ERROR: Encoding: object hasn't 'any' property.

我认为问题出在提供的参数上。参数是类型的ComplexType,我不确定我是否直接从 PHP 传递它。这是来自 GetCustomer 方法的 WSDL:

<s:element name="GetCustomer">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="user" type="s:string"/>
            <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
            <s:element minOccurs="0" maxOccurs="1" name="xmlParams">
                <s:complexType mixed="true">
                    <s:sequence>
                        <s:any/>
                    </s:sequence>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
</s:element>

我发现这篇文章解决了这个问题,当我将它应用于我的代码时,我得到了上述错误。这是我的PHP代码:

$params = new StdClass();
$params->user = '****';
$params->password = '****';
$params->xmlParams = new StdClass();

$soap_options = array('trace' => 1, 'exceptions'  => 1 );
$wsdl = "https://web-icdev.saop.si/iCenter_WS/SAOPWS_Customer.asmx?WSDL";
$client = new SoapClient($wsdl, $soap_options);

try {
    $result = $client->GetCustomer($params);
    var_dump($result);
} 
catch (SOAPFault $f) {
    echo $f->getMessage();
}
4

2 回答 2

2

您必须创建 3 个文件:

1.GetCustomer.class.php

<?php 
class GetCustomer{ 
var $user; 
var $password;
var $xmlParams;
}

2.xmlParams.class.php

<?php 
class xmlParams{ 
}

2.ServiceConsumer.php

 <?php
 include_once 'GetCustomer.class.php';
 include_once 'xmlParams.class.php';

 $objGetCust = new GetCustomer();
 $objGetCust->user = '****';
 $objGetCust->password = '****';
 $objGetCust->xmlParams = new xmlParams();

 $soap_options = array('trace' => 1, 'exceptions'  => 1 );
 $wsdl = "https://web-icdev.saop.si/iCenter_WS/SAOPWS_Customer.asmx?WSDL";
 $client = new SoapClient($wsdl, $soap_options);

 try {
    $result = $client->GetCustomer($params);
    var_dump($result);
 }catch (SOAPFault $f) {
        echo $f->getMessage();
 }

这是我使用这些 web 服务的方式,您也可以将 GetCustomer 和 xmlParams 类放在文件ServiceConsumer.php中,或者可能将两者放在同一个文件中。

但我更喜欢在不同的文件中使用 all。

此致。

于 2013-09-23T17:06:01.347 回答
1

尝试这个:

$params = new StdClass();

$params->user = '****';

$params->password = '****';

$foo = new StdClass();

$foo->any = $yourXML;

$param->xmlParams = $foo;

$soap_options = array('trace' => 1, 'exceptions'  => 1 );

$wsdl = "https://web-icdev.saop.si/iCenter_WS/SAOPWS_Customer.asmx?WSDL";

$client = new SoapClient($wsdl, $soap_options);

try {
    $result = $client->GetCustomer($params);
    var_dump($result);
} 
catch (SOAPFault $f) {
    echo $f->getMessage();
}
于 2013-04-02T20:23:37.217 回答