Есть ли способ получить результаты запроса 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 и посмотреть, устраняет ли это проблему. Более подробно рассмотрим этот ответ .