0

我尝试使用 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. ---&gt; There was an error generating the XML document. ---&gt; &lt;&gt;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 的文档可以在这里找到http://www.ozsale.com.au/API/V2/api.asmx?op=GetPublicSalesBanners

有人知道这里有什么问题吗?是我的代码还是网络服务的问题?

4

2 回答 2

1

看起来他们的结局是错误的。我刚刚跑了soapUI在那里尝试它并得到了完全相同的错误。

此外,该错误似乎是 ASP 错误(服务器端),而不是 PHP 错误(客户端 - 你的)。

联系他们的支持(假设他们有支持)。

编辑: 此外,我只是在玩他们的其他公共方法之一GetPublicSalesCategories,它只接受countryIDlangaugeID使用AS作为国家/地区产生与以前相同的错误。但是,如果我更改countryIDAUUS我没有收到错误(我没有得到任何有用的数据,但它是一个<result>true</result>响应。

也许您的国家/地区代码AS无效?

于 2012-04-17T04:50:56.883 回答
0

这些东西System.String看起来System.Object很像.NET错误,可能在服务器端(不是你的错)。

于 2012-04-17T04:47:18.657 回答