2012-07-27 5 views
11

Ich möchte wissen, ob es eine Möglichkeit ist mein Amazon MWS scratchpad Anfragen an einen API-AufrufKonvertieren von Amazon MWS Scratchpad-Abfragen zu API-Aufrufe

zum Beispiel zu konvertieren wenn die MWS Scratchpad mit bin ich ein String gegeben

"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 

Nachdem er Tage zu unterzeichnen versuchen Amazons order API an der Arbeit habe ich aufgegeben und habe gehofft, dass die folgende Funktion einen XML-Zeichenfolge zurückkehren würde ... aber ohne glück

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 
} 

hat jemand irgendwelche möglichen vorschläge?

Antwort

13

ich für eine lange Zeit mit dieser zu kämpfen als auch, hier ist, wie ich es für die Produkte API gelöst:

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

?> 

Die .inc.config.php Datei enthält meinen Zugriffsschlüssel, geheime Schlüssel usw.

EDIT :
$searchterm ist der isbn Ich komme von meiner Form.

+0

Das sieht interessant aus Ich gebe es eine Chance, alles, was ich tun muss, ist die Konfigurationsdatei, die ich zuvor verwendet habe –

+1

Ich nahm die eine, die mit der neuen API kam. – Jim

+0

Die Funktion gibt nichts zurück? muss ich noch etwas ändern? –

1

Sie müssen tatsächlich die API aufrufen. Die von Ihnen verwendete Zeichenfolge gibt den http: // - Teil der URL nicht an.

+0

Ich habe auch versucht, "https: //" am Anfang der Zeichenfolge –

+1

SO, wenn tatsächlich mit http oder https, was Ergebnis erhalten Sie in $ resp? Auch was bekommst du es, versuchen Sie diese URLs in einem Browser oder nach anderen Methoden (zB cURL, wget, etc.) –

+0

$ oder gibt nichts zurück als Fehler, aber im Browser eine XML-Zeichenfolge zurückgegeben wird –

1

Ich hatte ein wenig Probleme mit diesem Code, ich hatte es funktionierte beim Hochladen auf einen gehosteten Webserver, aber nicht beim Ausführen von lokalen mit Windows und XAMPP.

Wenn Sie Probleme haben, versuchen Sie dies am Ende des curl-setopt-Blocks hinzuzufügen.

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

Außerdem müssen Sie auch Ihre php.ini-Datei im Ordner xampp ändern, um curl zu aktivieren.

Verwandte Themen