2016-11-30 10 views
9

Có cách nào để nhận kết quả của yêu cầu MWS của Amazon theo định dạng Json hoặc Xml thay vì một chuỗi đơn giản không?Nhận kết quả MWS của Amazon tới Json hoặc Xml và xây dựng chúng

mã của tôi là như sau:

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

khi $ a được thể hiện Tôi thấy điều này (một chuỗi đơn giản với vài khả năng của xây dựng):

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

nhưng nếu tôi sao chép $ yêu cầu trong trình duyệt của tôi, những gì tôi thấy là một phản hồi định dạng XML.

Tôi làm cách nào?

+0

Nếu bạn đang lặp lại '$ a' cho trình duyệt, có thể trình duyệt chỉ đang ẩn thẻ xml không? Bạn đã xem nguồn chưa? Hoặc thử 'var_dump ($ a)'? – fredrover

+0

một lưu ý khác là XML sẽ được sử dụng làm Thẻ trong HTML khi mọi nội dung của bạn tải xuống hiển thị dưới dạng XML, bạn nên chạy nó mặc dù 'htmlentities' sẽ thoát khỏi ký tự HTML cho bạn để bạn có thể thấy chúng tùy chọn khác là xem nguồn. –

Trả lời

2

response format documentation đề xuất chỉ trả lời XML. Tuy nhiên, nếu tôi hiểu chính xác OP của bạn, bạn sẽ thấy phản hồi văn bản thuần túy khi được gửi qua phản hồi curl và XML khi được gửi qua trình duyệt của bạn.

Nếu đúng, trình duyệt của bạn có khả năng gửi tiêu đề - có thể là Accept - điều này làm cho Amazon thay đổi định dạng phản hồi. Hãy thử thêm những điều sau đây để thiết lập cURL của bạn:

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

Thay vì application/xml bạn cũng có thể thử application/json, nhưng một lần nữa dựa trên các tài liệu Tôi không hy vọng rằng sẽ làm việc.

Nếu thêm tiêu đề Accept không hoạt động, hãy kiểm tra tiêu đề của yêu cầu trình duyệt và sao chép tất cả những gì có vẻ liên quan trong thiết lập cURL của bạn. Đặc biệt, lưu ý rằng Amazon MWS documents that you should send a User-Agent header, nhưng nó sẽ làm tôi ngạc nhiên nếu điều đó thay đổi định dạng trả về.

0

Nhìn vào Amazon tài liệu MWS họ tuyên bố:

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

Tôi nghĩ trong trường hợp của bạn, lý do bạn nhận được chuỗi là cách bạn gửi yêu cầu của mình qua cURL. Bạn có thể thử thêm:

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

yêu cầu cURL của bạn và xem điều đó có khắc phục được sự cố không. Để biết thêm chi tiết, hãy xem this answer.

Các vấn đề liên quan