0

私は石鹸を扱うことにあまり慣れていません。SOAP サーバーからデータを取得したかったのですが、問題があるようです (オブジェクト参照がオブジェクトのインスタンスに設定されていません)。ここに私のコードからのデバッグコード:

stdClass Object ( [GetSalesBannersResult] => stdClass Object ( [Result] => [Message] => Object reference not set to an instance of an object. [List] => stdClass Object ( ) ) )
Request :<?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:GetSalesBanners><ns1:saleCategoryID>40F80218-A9E1-43C4-96FF-4C046D192A21</ns1:saleCategoryID><ns1:getTopThree>true</ns1:getTopThree></ns1:GetSalesBanners></SOAP-ENV:Body></SOAP-ENV:Envelope>

Response:<?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><GetSalesBannersResponse xmlns="http://ws.ozsale.com.au/API/V2"><GetSalesBannersResult><Result>false</Result><Message>Object reference not set to an instance of an object.</Message><List /></GetSalesBannersResult></GetSalesBannersResponse></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
  print_r($client->GetSalesBanners(array(
    "saleCategoryID" => "40F80218-A9E1-43C4-96FF-4C046D192A21", 
    "getTopThree" =>"1"
    ))
  );
  //print_r($client);

  // 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=GetSalesBanners

ここで何が間違っているかどうかを理解するのを誰でも助けることができます...


私の質問の新しい更新。ドキュメントAPIはここにあります http://www.ozsale.com.au/api/v2/api.asmx?op=GetPublicSalesBanners

次の情報を使用してデータを取得しようとしています。

'saleCategoryID' => '40F80218-A9E1-43C4-96FF-4C046D192A21',
'countryID'=> 'AS',
'languageID'=> 'EN', 
'getTopThree' =>'1'

私のコードはここにあります:

<?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
  print_r($client->GetPublicSalesBanners(array(
    'saleCategoryID' => '40F80218-A9E1-43C4-96FF-4C046D192A21',
    'countryID'=> 'AS',
    'languageID'=> 'EN', 
    'getTopThree' =>'1'
    ))
  );

  // 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>";
  ?>

そして、それがどのように機能するかを確認しようとすると、次のような出力になります。

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] => )
Request :<?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>

Response:<?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>

ここでなぜ、何が間違っているのですか?

4

1 に答える 1

1

SOAPヘッダーなどの特別な要件がない限り、入力は問題ないように見えます。これは、クライアントコードの問題ではなく、プロバイダーが修正する必要のあるWebサービスの問題である可能性があります。彼らに連絡することをお勧めします。

于 2012-04-13T08:57:17.503 に答える