2015-04-23 2 views
1

Я пытаюсь представить SubmitFeed запрос на Amazon Marketplace, но когда я отправить запрос, я получаю следующее сообщение об ошибке:Проблема вычисления MD5 хэш Amazon Marketplace кормить

the Content-MD5 HTTP header you passed for your feed did not match the Content-MD5 we calculated for your feed

Так я тестировал запрос на Amazon Marketplace Scratchpad. Я добавить свой XML в тело, и заголовки, и он генерирует следующий хэш MD5:

1db3b177e743dc8c0df4dc9eb5c1cbcf

Но есть также Content-MD5 (Base64) заголовок, с этим значением:

HbOxd+dD3IwN9NyetcHLzw==

И это, кажется, , что значение, которое фактически отправлено Amazon MWS как Content-MD5 HTTP-заголовок, а не исходный хэш MD5.

Я проверил мой PHP скрипт, и это правильно генерировать необработанный MD5 хэш, а когда я обернуть XML строку в md5 функции (md5($xml)) я получаю тот же исходный хэш MD5, который генерирует Amazon. Но если я затем обертываю , что в функции base64_encode, я получаю совершенно другое значение в отношении того, что списки Amazon для значения Content-MD5 (Base64).

До сих пор, я попытался обертывание следующее в base64_encode функции:

  • Необработанные XML строка
  • MD5 хэш необработанного строки XML

Но ни в результате чего получали то же значение, что и значение Amazon Content-MD5 (Base64).

Итак, что именно является Amazon Base64-encoding, чтобы получить это значение? Я пробовал декодировать значение, но просто получил загрузку случайных символов, которые, как представляется, являются проблемой кодирования, поэтому я не могу видеть исходную строку, которую кодировка Amazon указывает мне в правильном направлении.

Любое руководство по этому вопросу будет оценено по достоинству.

ответ

3

Найдено решение. Я решил посмотреть документацию для функции md5 и нашел, что был второй параметр, чтобы получить исходный вывод функции, которая по умолчанию равна false. Итак, я решил установить этот флаг на true, а Base64-кодирует результат , который вызывает.

Voilà! Я получил то же значение Base64, что и Amazon!

Использования жрать, это то, что я посылаю на Amazon, и я теперь получаю успешные ответы:

$xml = trim($xml); 

// For some reason, the time my PHP script is sending is about 20 minutes out 
// from my system time. This fixes that. 
$timestamp = gmdate('c', time() + 1200); 

$url = 'https://mws.amazonservices.co.uk/'; 

$parameters = [ 
    'Action' => 'SubmitFeed', 
    'AWSAccessKeyId' => '#MY_ACCESS_KEY_ID#', 
    'FeedType' => '_POST_PRODUCT_DATA_', 
    'MarketplaceIdList.Id.1' => 'A1F83G8C2ARO7P', # UK marketplace ID 
    'Merchant' => '#MY_SELLER_ID#', 
    'PurgeAndReplace' => 'false', 
    'SignatureMethod' => 'HmacSHA256', 
    'SignatureVersion' => '2', 
    'Timestamp' => $timestamp, 
    'Version' => '2009-01-01', 
]; 

/** 
* Custom class that generates signature for request. 
* 
* @see http://stackoverflow.com/a/29724063/102205 
*/ 
$signature = new Signature($url, $parameters, '#MY_SECRET_ACCESS_KEY#'); 

$parameters['Signature'] = (string) $signature; 

try { 
    $response = $this->client->post($url, [ 
     'headers' => [ 
      'Content-MD5' => base64_encode(md5($xml, true)), 
      'User-Agent' => '#MY_USER_AGENT_STRING#', 
     ], 
     'query' => $parameters, 
     'body' => $xml, 
    ]); 
} catch (\GuzzleHttp\Exception\ClientException $e) { 
    $response = $e->getResponse(); 
} 

return $response->xml(); 

Надеется, что это помогает кто-то другое!

+0

Спасибо за это! Хотя я использую java, ваша информация относительно выполнения base64 на исходных данных, а не строка md5 была очень полезна и решила мою проблему. – ganta

+0

Привет, Мартин Бин, я также сталкиваюсь с той же проблемой, но я использую модуль запроса node.js, я использую Meteor (Javascript).Я передал basedcode с кодировкой base64, но получаю ту же ошибку. Даже если я не отправлю файл в FeddContent, а также его дал мне ту же ошибку. Пожалуйста, помогите мне в этом, я буду благодарен вам за это. Это займет 3 дня, но я пока не нашел решения. Ссылка на мой заданный вопрос: - http://stackoverflow.com/questions/40180070/amazon-mws-submitfeed-content-md5-http-header-did-not-match-the-content-md5-calc –

Смежные вопросы