SignatureDoesNotMatch в Amazon API - PullRequest
       59

SignatureDoesNotMatch в Amazon API

5 голосов
/ 21 октября 2011

Я использую Amazon API и получаю эту ошибку при обновлении своего запаса из своей базы данных на веб-сайте Amazon:

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

Я читаю эту ветку (amazonsellercommunity. Com / forums / thread.jspa? MessageID = =2194823), а затем получите объяснение ошибки:

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

Поэтому я подумал, что мои MARKETPLACE_ID, MERCHANT_ID, AWS_ACCESS_KEY_ID или AWS_SECRET_ACCESS_KEY могут быть ошибочными.Но я проверил, и эта информация верна.

На самом деле, я не понимаю, почему происходит эта ошибка ... Раньше она работала отлично, и через пару дней она просто вылетала.И я ничего не меняю в своем коде.Странно, не правда ли?

Редактировать:

Вот мой код раздела для подписи.

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

Если вы хотите увидеть некоторые части моего кода, простоспросите.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 октября 2012

Если я правильно помню, механизм аутентификации для API Amazon чувствителен к текущей дате / времени на вашем компьютере (который используется в процессе подписания запроса). Проверьте, правильно ли установлены дата и время.

1 голос
/ 27 декабря 2013

Для меня это была просто ошибка, когда мое веб-приложение пропускало строки с URL-адресами.Амазонка не любила спецсимволы, и появилась эта (не очень полезная) ошибка.Убедитесь, что имена ваших файлов не содержат символов, выходящих из URL.

0 голосов
/ 10 июня 2017

Я решил (на сервере Ubuntu 14.04), используя ntpdate:

Сначала убедитесь, что он установлен:

apt-get install ntpdate 

И затем выполните:

ntpdate ntp.ubuntu.com
...