我尝试使用 php soap 客户端从 Web 服务中提取数据,但我有肥皂故障
SoapFault Object (
[message:protected] => Server was unable to process request. ---> There was an error generating the XML document. ---> <>f__AnonymousType2a`2[System.String,System.Object[]] cannot be serialized because it does not have a parameterless constructor.
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /Users/resarahman/Documents/xampp/htdocs/testing/soap/test.php
[line:protected] => 17
[trace:Exception:private] => Array (
[0] => Array (
[file] => /Users/resarahman/Documents/xampp/htdocs/testing/soap/test.php
[line] => 17
[function] => __call
[class] => SoapClient
[type] => ->
[args] => Array (
[0] => GetPublicSalesBanners
[1] => Array (
[0] => Array (
[saleCategoryID] => 40F80218-A9E1-43C4-96FF-4C046D192A21
[countryID] => AS
[languageID] => EN
[getTopThree] => 1
)
)
)
)
[1] => Array (
[file] => /Users/resarahman/Documents/xampp/htdocs/testing/soap/test.php
[line] => 17
[function] => GetPublicSalesBanners
[class] => SoapClient
[type] => ->
[args] => Array (
[0] => Array (
[saleCategoryID] => 40F80218-A9E1-43C4-96FF-4C046D192A21
[countryID] => AS
[languageID] => EN
[getTopThree] => 1
)
)
)
)
[previous:Exception:private] =>
[faultstring] => Server was unable to process request. ---> There was an error generating the XML document. ---> <>f__AnonymousType2a`2[System.String,System.Object[]] cannot be serialized because it does not have a parameterless constructor.
[faultcode] => soap:Server
[detail] => )
请求和响应
请求:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.ozsale.com.au/API/V2">
<SOAP-ENV:Body>
<ns1:GetPublicSalesBanners>
<ns1:saleCategoryID>40F80218-A9E1-43C4-96FF-4C046D192A21</ns1:saleCategoryID>
<ns1:countryID>AS</ns1:countryID>
<ns1:languageID>EN</ns1:languageID>
<ns1:getTopThree>true</ns1:getTopThree>
</ns1:GetPublicSalesBanners>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
响应:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server was unable to process request. ---> There was an error generating the XML document. ---> <>f__AnonymousType2a`2[System.String,System.Object[]] cannot be serialized because it does not have a parameterless constructor.</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>
到目前为止,这是我的代码:
<?php
// create a connection to the local host mono .NET pull back the wsdl to get the functions names
// and also the parameters and return values
$client = new SoapClient("http://www.ozsale.com.au/api/v2/api.asmx?WSDL",
array(
"trace" => 1, // enable trace to view what is happening
"exceptions" => 0, // disable exceptions
"cache_wsdl" => 0)
);
// get a response from the WSDL zend server function getQuote for the day monday
$data = $client->GetPublicSalesBanners(array(
'saleCategoryID' => '40F80218-A9E1-43C4-96FF-4C046D192A21',
'countryID'=> 'AS',
'languageID'=> 'EN',
'getTopThree' =>'1'
));
print_r($data);
// display what was sent to the server (the request)
echo "<p>Request :".htmlspecialchars($client->__getLastRequest()) ."</p>";
// display the response from the server
echo "<p>Response:".htmlspecialchars($client->__getLastResponse())."</p>";
?>
关于 API 的 Documentasi 可以在这里找到 http://www.ozsale.com.au/API/V2/api.asmx?op=GetPublicSalesBanners
有谁知道这里出了什么问题? 是我的代码还是网络服务的问题?
看起来他们的结局是错误的。我只是运行肥皂UI在那里尝试它,并得到了完全相同的错误。
此外,该错误似乎是ASP错误(服务器端),而不是PHP错误(客户端 - 您的错误)。
联系他们的支持人员(假设他们有)。
编辑:此外,我只是在玩弄他们的其他公共方法之一GetPublicSalesCategories
只需要countryID
和langaugeID
并使用AS
,因为该国产生了与以前相同的错误。但是,如果我将countryID
更改为AU
或US
则不会收到错误(我没有获得任何有用的数据,但这是一个<result>true</result>
响应。
也许您的AS
国家代码无效?
关于
System.String
和System.Object
的东西看起来很像.NET错误,并且可能在服务器端(不是你的错)。