0

allposters.com SOAP(http://webservice.allposters.com/)に問題があります。PHP 5.3インストールで(わずかに変更された)nuSOAP PHPライブラリ(http://sourceforge.net/projects/nusoap/)を介していくつかの製品情報を取得しようとしています。

私のリクエストは次のとおりです(すべての文字はこことまったく同じで、エンティティに変換されません):

POST /ProductInformationService.asmx HTTP/1.0
Host: webservice.allposters.com
User-Agent: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=UTF-8
SOAPAction: "http://Webservice.Allposters.com/APCF.AffiliateWebService/ProductInformationService/GetProductByProductNumberInformation"
Content-Length: 570

<?xml version="1.0" encoding="UTF-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <GetProductByProductNumberInformation xmlns="http://Webservice.Allposters.com/APCF.AffiliateWebService/ProductInformationService">
            <APCSearchXml>
                <WebSiteID>1234567890</WebSiteID>
                <SearchTerm>1234567</SearchTerm>
                <LanguageID>1</LanguageID>
                <CurrencyCode>USD</CurrencyCode>
            </APCSearchXml>
        </GetProductByProductNumberInformation>
    </soap:Body>
</soap:Envelope>

そして、私はエラーを受け取ります

Length cannot be less than zero. Parameter name: length

この特定の応答で

HTTP/1.1 200 OK
Connection: keep-alive
Date: Tue, 08 Jan 2013 18:46:59 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 821

<APC_Search_Results>
   <StatusCode>1</StatusCode>
   <Search_Error>
       <ErrorNumber>1</ErrorNumber>
       <ErrorDescription>Length cannot be less than zero. Parameter name: length</ErrorDescription>
   </Search_Error>
</APC_Search_Results>

通信は正常に機能しているようです。以前のリクエストから「WebSiteID」要素を削除すると、次のようになります。

Index was out of range. Must be non-negative and less than the size of the collection.

残念ながら、私がWebで見つけたいくつかの例と、Visual Basicのサンプルを含むWebサイトの7ページのドキュメント(これは私が見つけた唯一のドキュメントです)から、私は本当に自分が何であるかを理解できません。行方不明であり、その.NETエラーは私が使用できるものを教えてくれません。

誰かがallposters.comアフィリエイトWebサービスで同様の問題を経験し、アドバイスがありましたか?

4

2 に答える 2

2

SOAP サービスを間違った方法で使用しています。

http://webservice.allposters.com/ProductInformationService.asmx?op=GetProductByProductNumberInformationの呼び出し「GetProductByProductNumberInformation」のページの例を見ると、プレースホルダー「文字列」しか記載されていませんが、完全なセットを送信しています。 XMLの。これはおそらく間違っています。

あなたが行った XML のように文字列以上のものを送信できると考える理由はわかりませんが、このサービスでは、XML を CDATA にラップして送信することを実際に期待していることがわかりました。文字列をアンパックし、別の XML 解析を行います。

この実装方法は完全にでたらめです。なぜなら、サービスが許可し期待するパラメータの種類を WSDL で記述した Soap Service を持つという点を回避するからです。ただし、それを変更する可能性はほとんどありません。

したがって、XML 文字列を CDATA タグ内にラップするように NuSoap を作成する必要があります。そうしないと、まったく機能しないと思います。

于 2013-01-08T20:32:21.800 に答える
0

OPは質問の編集で次の解決策を提供したので、適切な回答に移動しています:

<?xml version="1.0" encoding="UTF-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <GetProductByProductNumberInformation xmlns="http://Webservice.Allposters.com/APCF.AffiliateWebService/ProductInformationService">
            <APCSearchXml>
                <![CDATA[ 
                  <APC_Search_Query>
                        <WebSiteID>1234567890</WebSiteID>                        
                            <SearchText>123456</SearchText>
                        <LanguageID>1</LanguageID>
                        <CurrencyCode>USD</CurrencyCode>
                  </APC_Search_Query>
                ]]>
            </APCSearchXml>
        </GetProductByProductNumberInformation>
    </soap:Body>
</soap:Envelope>
于 2013-01-09T10:44:55.390 に答える