Получите результаты Amazon MWS для Json или Xml и разработайте их

Есть ли способ получить результаты запроса Amazon MWS в формате Json или Xml вместо простой строки?

мой код следующий:

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, я вижу это (простая строка с небольшими возможностями разработки):

 2016-11-21T22:59:59Z StandardOrder 2016-11-17T06:24:44Z 2016-11-17T18:47:54Z 1@marketplace.amazon.it 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 2@marketplace.amazon.it 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 3@marketplace.amazon.it 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 ... 

но если я скопирую запрос $ в моем браузере, то я вижу ответ XML-формата.

Как я могу сделать?

В документации формата ответов указывается, что будут возвращены только ответы XML. Однако, если я правильно понимаю ваш OP, вы видите текстовые ответы при отправке через завитки и ответы XML при отправке через ваш браузер.

Если это правильно, то ваш браузер, скорее всего, отправит заголовок – возможно, Accept – это заставляет Amazon изменять формат ответа. Попытайтесь добавить в свою настройку cURL следующее:

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

Вместо application/xml вы также можете попробовать application/json , но опять же на основе документации я не надеюсь, что это сработает.

Если добавление заголовка Accept не работает, проверьте заголовки запроса браузера и скопируйте все, что кажется релевантным в вашей настройке cURL. В частности, обратите внимание, что Amazon MWS документирует, что вы должны отправить заголовок User-Agent , но это меня удивит, если это изменит возвращаемый формат.

Глядя на документацию Amazon MWS, они заявляют:

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. ( источник ).

Я думаю, что в вашем случае причиной, по которой вы получаете строку, является то, как вы отправляете свой запрос через cURL. Вы можете попробовать добавить:

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

к вашему запросу cURL и посмотреть, устраняет ли это проблему. Более подробно рассмотрим этот ответ .