2016-11-30 6 views
9

通常の文字列ではなく、JsonまたはXml形式でAmazon MWS要求の結果を取得する方法はありますか?Amazon MWSの結果をJsonまたはXmlに取得し、それらを具体化する

私のコードは次のようである:私は$リクエストをコピーする場合

2016-11-21T22:59:59Z StandardOrder 2016-11-17T06:24:44Z 2016-11-17T18:47:54Z [email protected] 402-2385999-1452355 1 IT Std Domestic Shipped Amazon.it false 0 2016-11-25T22:59:59Z nico 2016-11-20T23:00:00Z EUR 199.00 false 2016-11-17T23:00:00Z APJ6JRA9NG5V4 MFN Other arezzo 3332260766 pratovecchio stia IT 52015 nico via ro 92/94/96 false Standard 2016-11-22T22:59:59Z StandardOrder 2016-11-19T18:35:43Z 2016-11-21T18:14:04Z [email protected] 171-6439117-6622751 1 IT Std Domestic Shipped Amazon.it false 0 2016-11-26T22:59:59Z s 2016-11-22T23:00:00Z EUR 130.00 false 2016-11-20T23:00:00Z APJ6JRA9NG5V4 MFN Other CA 3926624273 Cagliari IT 09126 Samuele civico 244 false Standard 2016-11-28T22:59:59Z StandardOrder 2016-11-24T11:30:20Z 2016-11-24T18:46:12Z [email protected] 404-3098817-1844319 1 IT Std Domestic Shipped Amazon.it false 0 2016-12-02T22:59:59Z ini 2016-11-27T23:00:00Z EUR 110.00 false 2016-11-24T23:00:00Z APJ6JRA9NG5V4 MFN Other latina 3286028770 terracina IT 04019 ... 

しかし:

public function listOrders() 
{ 
    $request = "https://mws.amazonservices.it/Orders/2013-09-01?"; 
    $request .= $this->getParameterString($this->parameters) . "&Signature=" . $this->calculateSignature($this->calculateStringToSign($this->parameters)); 

    $ch = curl_init(); 

    // set URL and other appropriate options 
    curl_setopt($ch, CURLOPT_URL, $request); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    // grab URL and pass it to the browser 

    $a = curl_exec($ch); 
    echo $a; 
    return $a; 
} 

$ aが示されたとき、私はこの(精緻化のいくつかの可能性と無地の文字列)を参照してください私のブラウザでは、XML形式の応答が表示されます。

どうすればいいですか?

+0

'$ a'をブラウザにエコーしているのであれば、ブラウザは単にxmlタグを隠している可能性がありますか?ソースを見ましたか?あるいは 'var_dump($ a)'を試してみてください。 – fredrover

+0

もう一つの注意点はXMLがHTMLのTagとして使われるということです。あなたの出力内容がXMLとして表示されるときには、HTMLの文字をエスケープする 'htmlentities'を実行する必要があります。ソースを表示します。 –

答えて

2

response format documentationは、XML応答のみが返されることを示しています。しかし、私はあなたのOPを正しく理解している場合、あなたのブラウザを介して送信されたときにカールとXML応答を介して送信されると、プレーンテキストの応答を見ている。

これが間違っていれば、ブラウザーは恐らくAcceptというヘッダーを送信している可能性があります。その結果、Amazonは応答形式を変更します。あなたのcURLのセットアップに以下を追加してみてください:

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: application/xml' ]); 

代わりのapplication/xmlあなたもapplication/jsonを試みるが、やはり私がうまくいくことを期待していないよドキュメントに基づいてあります。

Acceptヘッダーを追加できない場合は、ブラウザリクエストのヘッダーを調べ、cURL設定に関連するすべてのものを複製します。特に、Amazon MWS documents that you should send a User-Agent headerに注意してください。しかし、返されたフォーマットが変更されると私は驚いています。

in response to a HTTP request, Amazon MWS returns an XML file that contains the results of the request. If a request is successful, the response is returned with the data requested.source):彼らは主張するアマゾンMWSのドキュメントを見てみると

0

あなたの場合、文字列を受け取っている理由は、あなたがcURL経由でリクエストを送信する方法だと思います。あなたのcURLリクエストに

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'); 

を追加し、問題が解決するかどうかを確認してください。詳細はthis answerをご覧ください。

関連する問題