将亚马逊MWS结果发送给Json或Xml并详细说明

Mar*_*ina 9 php curl amazon-mws

有没有办法以Json或Xml格式而不是普通字符串获取亚马逊MWS请求的结果?

我的代码如下:

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;
}
Run Code Online (Sandbox Code Playgroud)

当$ 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 ...
Run Code Online (Sandbox Code Playgroud)

但如果我在浏览器中复制$ request,我看到的是XML格式的响应.

我能怎么做?

bis*_*hop 3

响应格式文档建议仅返回 XML 响应。但是,如果我正确理解您的 OP,您会在通过curl 发送时看到纯文本响应,在通过浏览器发送时看到XML 响应。

如果这是正确的,那么您的浏览器可能会发送一个标头(可能Accept),这会导致亚马逊更改响应格式。尝试将以下内容添加到您的 cURL 设置中:

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: application/xml' ]);
Run Code Online (Sandbox Code Playgroud)

相反,application/xml您也可以尝试application/json,但再次根据文档,我不希望这会起作用。

如果添加Accept标头不起作用,请检查浏览器请求的标头并复制 cURL 设置中看似相关的所有内容。特别要注意的是,亚马逊 MWS记录了您应该发送User-Agentheader,但如果这改变了返回的格式,我会感到惊讶。