2012-07-27 9 views
11

Tôi muốn biết liệu có cách nào chuyển đổi các truy vấn trên Amazon MWS scratchpad của mình thành một lệnh gọi APIChuyển đổi các truy vấn scratchpad amazon MWS sang các cuộc gọi API

ví dụ: khi sử dụng đệm MWS tôi cung cấp một chuỗi ký

"mws.amazonservices.co.uk" 
    ."/Products/2011-10-01" 
    ."AWSAccessKeyId=xxx&Action=ListMatchingProducts" 
    ."&MarketplaceId=xxx&Query=star%20wars&SellerId=xxx" 
    ."&SignatureMethod=HmacSHA256&SignatureVersion=2 
    ."&Timestamp=2012-07-27T18%3A59%3A30Z&Version=2011-10-01 

Sau khi trải qua ngày cố gắng để có được Amazons order API để làm việc tôi đã từ bỏ và đã được hy vọng rằng các chức năng sau đây sẽ trả về một chuỗi xml ... nhưng không có may mắn

function callAmazon(){ 
    $apicall = "mws.amazonservices.co.uk" 
    ."/Products/2011-10-01" 
    ."AWSAccessKeyId=xxx&Action=ListMatchingProducts" 
    ."&MarketplaceId=xxx&Query=star%20wars&SellerId=xxx" 
    ."&SignatureMethod=HmacSHA256&SignatureVersion=2 
    ."&Timestamp=2012-07-27T18%3A59%3A30Z&Version=2011-10-01 

    $resp = simplexml_load_file($apicall); //make the call 
} 

có ai có đề xuất nào không?

Trả lời

13

tôi vật lộn với điều này trong một thời gian dài là tốt, đây là cách tôi giải quyết nó cho các sản phẩm API:

<?php 
require_once('.config.inc.php'); 
$base_url = "https://mws.amazonservices.com/Products/2011-10-01"; 
$method = "POST"; 
$host = "mws.amazonservices.com"; 
$uri = "/Products/2011-10-01"; 

function amazon_xml($searchTerm) { 

    $params = array(
     'AWSAccessKeyId' => AWS_ACCESS_KEY_ID, 
     'Action' => "ListMatchingProducts", 
     'SellerId' => MERCHANT_ID, 
     'SignatureMethod' => "HmacSHA256", 
     'SignatureVersion' => "2", 
     'Timestamp'=> gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()), 
     'Version'=> "2011-10-01", 
     'MarketplaceId' => MARKETPLACE_ID, 
     'Query' => $searchTerm, 
     'QueryContextId' => "Books"); 

    // Sort the URL parameters 
    $url_parts = array(); 
    foreach(array_keys($params) as $key) 
     $url_parts[] = $key . "=" . str_replace('%7E', '~', rawurlencode($params[$key])); 

    sort($url_parts); 

    // Construct the string to sign 
    $url_string = implode("&", $url_parts); 
    $string_to_sign = "GET\nmws.amazonservices.com\n/Products/2011-10-01\n" . $url_string; 

    // Sign the request 
    $signature = hash_hmac("sha256", $string_to_sign, AWS_SECRET_ACCESS_KEY, TRUE); 

    // Base64 encode the signature and make it URL safe 
    $signature = urlencode(base64_encode($signature)); 

    $url = "https://mws.amazonservices.com/Products/2011-10-01" . '?' . $url_string . "&Signature=" . $signature; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $response = curl_exec($ch); 

    $parsed_xml = simplexml_load_string($response); 

    return ($parsed_xml); 
} 

?> 

File .inc.config.php chứa chìa khóa truy cập của tôi, khóa bí mật, vv

EDIT :
$searchterm là isbn tôi đang chuyển từ biểu mẫu của tôi.

+0

Điều này có vẻ thú vị tôi sẽ cung cấp cho nó một shot, tất cả tôi cần làm là lấy tập tin cấu hình mà tôi đã sử dụng trước đây –

+1

Tôi lấy một trong đó đi kèm với apis mới. – Jim

+0

chức năng không trả lại bất cứ điều gì? tôi có phải thay đổi gì khác không? –

1

Bạn cần thực sự GỌI API. Chuỗi bạn đang sử dụng không chỉ định phần http: // của URL.

+0

Tôi cũng đã thử thêm "https: //" vào đầu chuỗi –

+1

SO khi thực sự sử dụng http hoặc https, bạn nhận được kết quả nào trong $ resp? Ngoài ra, bạn có thể gọi nó là gì trong trình duyệt hoặc bằng các phương pháp khác (ví dụ: cURL, wget, v.v.) –

+0

$ resp không trả về gì ngoài lỗi, nhưng trong trình duyệt, chuỗi XML được trả về –

1

Tôi gặp sự cố nhỏ với mã này, tôi đã làm việc khi tải lên máy chủ web được lưu trữ nhưng không hoạt động khi chạy cục bộ bằng cửa sổ và xampp.

Nếu bạn gặp sự cố, hãy thử thêm phần này vào cuối khối thiết lập curl-setopt.

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

btw bạn cũng cần sửa đổi tệp php.ini của mình trong thư mục xampp để bật curl.