2011-10-21 11 views
5

Sto usando l'API di Amazon e ottenere questo errore durante l'aggiornamento la mia scorta dalla mia base di dati al sito di Amazon:SignatureDoesNotMatch in API di Amazon

Caught Exception: Internal Error 
Response Status Code: 0 
Error Code: 
Error Type: 
Request ID: 
XML: 

ho letto questa discussione (amazonsellercommunity com/forum/thread.jspa.? messageId = 2194823) e quindi ottenere la spiegazione di errore:

<Error><Type>Sender</Type><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message><Detail/></Error> 

Così ho pensato che il mio MARKETPLACE_ID, MERCHANT_ID, AWS_ACCESS_KEY_ID o AWS_SECRET_ACCESS_KEY potrebbe essere sbagliato. Ma ho controllato e queste informazioni sono corrette.

In realtà, non capisco perché questo errore si verifica ... Prima, ha funzionato perfettamente e da un paio di giorni si è appena schiantato. E non cambio nulla nel mio codice. Strano, non è vero?

Edit:

Ecco il mio codice sezione per la firma.

define ('DATE_FORMAT', 'Y-m-d\TH:i:s\Z'); 
define('AWS_ACCESS_KEY_ID', 'ABC...'); // My AWS Access Key Id (20 characters) 
define('AWS_SECRET_ACCESS_KEY', 'ABCDEF...'); // My AWS Secret Access Key (40 characters) 
define('APPLICATION_NAME', 'MyCompany_AmazonMWS'); 
define('APPLICATION_VERSION', '0.0.1'); 
define ('MERCHANT_ID', 'XXXXXXX'); // My Merchant ID 
define ('MARKETPLACE_ID', 'XXXXXXX'); // My Marketplace ID 

$config = array (
'ServiceURL' => "https://mws.amazonservices.fr", 
'ProxyHost' => null, 
'ProxyPort' => -1, 
'MaxErrorRetry' => 3, 
); 

$service = new MarketplaceWebService_Client(
AWS_ACCESS_KEY_ID, 
AWS_SECRET_ACCESS_KEY, 
$config, 
APPLICATION_NAME, 
APPLICATION_VERSION 
); 

$parameters = array (
'Marketplace' => MARKETPLACE_ID, 
'Merchant' => MERCHANT_ID, 
'FeedType' => '_POST_INVENTORY_AVAILABILITY_DATA_', 
'FeedContent' => $feedHandle, 
'PurgeAndReplace' => false, 
'ContentMd5' => base64_encode(md5(stream_get_contents($feedHandle), true)), 
); 

// and then I do this: 

$request = new MarketplaceWebService_Model_SubmitFeedRequest($parameters); 
invokeSubmitFeed($service, $request); 

Se si desidera vedere alcune parti del mio codice, basta chiedere.

Grazie in anticipo.

+0

Per favore qualcuno può aiutarmi? – Octelio

+0

Provalo con l'amazon Scratchpad.https: //mws.amazonservices.de/scratchpad/index.html –

+0

Sto usando lo scratchpad e continuo a ottenere lo stesso errore. Ho ridigitato le chiavi molte volte, copiato e incollato, ma anche lo scratchpad segnala che la firma non corrisponde, non so cosa provare dopo. – Jeff

risposta

2

Se ricordo correttamente, il meccanismo di autenticazione per le API di Amazon è sensibile alla data/ora corrente sulla macchina (utilizzata nel processo di firma della richiesta). Controlla se la tua data/ora è impostata correttamente.

+1

Si noti che servizi diversi hanno tolleranze temporali diverse. Per SQS, la tolleranza era piuttosto bassa, mentre S3 aveva diversi minuti di tolleranza. Basta eseguire chronyd sulla tua casella (non NTPD, non gestisce bene le macchine virtuali). – BraveNewCurrency

1

Per me è stato solo un errore con la mia app Web che trasmette le stringhe con url escaped. I caratteri speciali non erano come quelli di Amazon e questo errore (non così utile) è venuto fuori. Assicurati che i tuoi nomi di file non abbiano caratteri di escape url.

0

ho risolto (su Ubuntu 14.04 Server) utilizzando ntpdate:

prima assicurarsi che sia installato:

apt-get install ntpdate 

E poi eseguire:

ntpdate ntp.ubuntu.com 
+1

puoi spiegare perché questo risolverebbe il problema del questionario? – polka

+0

L'orologio oscilla tra l'ora del sistema sulla macchina su cui è in esecuzione questo codice e il server di Amazon può essere sufficiente che Amazon rifiuta la richiesta perché la considera troppo vecchia. Riceverai comunque un messaggio, se è il caso. Qualcosa sotto l'effetto di "La richiesta è scaduta". o simili. L'ho visto, anche se non ricordo la definizione esatta. – clintm

Problemi correlati