2016-11-30 21 views
9

Czy istnieje sposób na uzyskanie wyników zapytania Amazon MWS w formacie Json lub Xml zamiast zwykłego ciągu znaków?Uzyskaj wyniki Amazon MWS dla Json lub Xml i opracuj je

mój kod jest następujący:

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; 
} 

gdy $ a jest pokazany widzę to (zwykły łańcuch z kilku możliwości opracowania):

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 ... 

ale jeśli kopia wniosku $ w mojej przeglądarce widzę odpowiedź w formacie XML.

jak mogę zrobić?

+0

Jeśli wyświetlasz komunikat '$ a' w przeglądarce, czy to możliwe, że przeglądarka ukrywa tagi XML? Czy widziałeś źródło? Lub spróbuj 'var_dump ($ a)'? – fredrover

+0

Kolejna uwaga: XML będzie użyty jako Tag w HTML, gdy każda twoja wyjściowa zawartość pliku do pobrania, która będzie wyglądać jak XML, powinna być uruchomiona przez 'htmlentities', to uniknie znaków HTML, więc możesz zobaczyć je jako inną opcję Pokaż źródło. –

Odpowiedz

2

Polecenie response format documentation sugeruje, że zwrócone zostaną tylko odpowiedzi XML. Jeśli jednak dobrze rozumiem twój OP, widzisz zwykłe odpowiedzi tekstowe, gdy są wysyłane za pomocą curl i odpowiedzi XML, gdy są wysyłane za pośrednictwem przeglądarki.

Jeśli to prawda, to przeglądarka prawdopodobnie wyśle ​​nagłówek - prawdopodobnie Accept - który spowoduje, że Amazon zmieni format odpowiedzi. Spróbuj dodać następujące wpisy do cURL konfiguracji:

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

Zamiast application/xml można także spróbować application/json, ale znowu na podstawie dokumentacji nie jestem pełen nadziei, że będzie działać.

Jeśli dodawanie nagłówka Accept nie działa, sprawdź nagłówki żądania przeglądarki i powtórz wszystko, co wydaje się odpowiednie w konfiguracji cURL. W szczególności zauważ, że Amazon MWS documents that you should send a User-Agent header, ale zaskoczyłoby mnie, gdyby to zmieniło zwracany format.

0

Patrząc na Amazon dokumentacji MWS twierdzą:

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).

Myślę, że w twoim przypadku powodem, dla którego odbierasz ciąg znaków jest sposób wysyłania żądania przez cURL. Możesz spróbować dodać:

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

do żądania cURL i sprawdzić, czy to rozwiąże problem. Aby uzyskać więcej szczegółów, spójrz na this answer.