我正试图从我的网络应用程序调用SOAP服务。我创建一个没有问题的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>
我发现this article解决了这个问题,当我将其应用于我的代码时,我得到了上述错误。这是我的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();
}
答案 0 :(得分: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 文件中,或者也可以将两者放在同一个文件中。
但我更喜欢在不同的文件中使用所有文件。
最诚挚的问候。
答案 1 :(得分:0)
试试这个:
$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();
}