API-интерфейс Amazon MWS Scratchpad

Я пытаюсь заставить Amazon MWS Scratchpad работать, но он продолжает давать мне сообщение:

Подписанная нами подпись запроса не соответствует подписи, которую вы предоставили. Проверьте секретный ключ доступа AWS и метод подписи. Подробнее см. В сервисной документации.

Я искал аналогичную тему здесь, но ничего действительно полезного. Итак, вот код:

$params = array( 'AWSAccessKeyId' => AWS_ACCESS_KEY_ID, 'Action' => "GetLowestOfferListingsForASIN", 'SellerId' => MERCHANT_ID, 'SignatureMethod' => "HmacSHA256", 'SignatureVersion' => "2", 'Timestamp' => gmdate("Ymd\TH:i:s\Z", time()), 'Version' => "2011-10-01", 'MarketplaceId' => MARKETPLACE_ID, 'ItemCondition' => "new", 'ASINList.ASIN.1' => "B001T6OP32"); $url = array(); foreach($params as $key => $val){ $val = str_replace('%7E', '~', rawurlencode($val)); $url[] = $key . '=' . $val; } $uri = implode('&', $url); $string_to_sign = 'POST'; $string_to_sign .= "\n"; $string_to_sign .= 'mws.amazonservices.co.uk' . "\n"; $string_to_sign .= '/Products/2011-10-01' . "\n"; $string_to_sign .= $uri; $signature = hash_hmac("sha256", $string_to_sign, AWS_SECRET_ACCESS_KEY, TRUE); $signature = base64_encode($signature); $signature = urlencode($signature); $signature = str_replace("%7E", "~", $signature); $url = 'https://mws.amazonservices.co.uk/'; $url .= 'Products/2011-10-01' . '?' . $uri . "&Signature=" . $signature; 

Уверен, что проблема связана с Signature, когда я print $signature ее с print $signature она всегда содержит % символов, и когда я сравниваю с страницей сведений о запросе страницы Amazon Scratchpad , поле SHA 256 HMAC – нет.

Маби есть что-то, чего я не вижу? Я проверял пробелы в Secret Access Key, все выглядит нормально.

Большое спасибо.

Рабочая версия:

 $param = array(); $param['AWSAccessKeyId'] = AWS_ACCESS_KEY_ID; $param['Action'] = 'GetLowestOfferListingsForASIN'; $param['SellerId'] = MERCHANT_ID; $param['SignatureMethod'] = 'HmacSHA256'; $param['SignatureVersion'] = '2'; $param['Timestamp'] = gmdate("Ymd\TH:i:s.\\0\\0\\0\\Z", time()); $param['Version'] = '2011-10-01'; $param['MarketplaceId'] = MARKETPLACE_ID; $param['ItemCondition'] = 'new'; $param['ASINList.ASIN.1'] = << ITEM ASIN >>; $url = array(); foreach ($param as $key => $val) { $key = str_replace("%7E", "~", rawurlencode($key)); $val = str_replace("%7E", "~", rawurlencode($val)); $url[] = "{$key}={$val}"; } sort($url); $arr = implode('&', $url); $sign = 'GET' . "\n"; $sign .= 'mws.amazonservices.co.uk' . "\n"; $sign .= '/Products/2011-10-01' . "\n"; $sign .= $arr; $signature = hash_hmac("sha256", $sign, AWS_SECRET_ACCESS_KEY, true); $signature = urlencode(base64_encode($signature)); $link = "https://mws.amazonservices.co.uk/Products/2011-10-01?"; $link .= $arr . "&Signature=" . $signature; 

Загрузите $link с curl и vualia!

Чтобы начать доступ к Amazon MWS с PHP, вы можете загрузить клиентскую библиотеку для API Amazon MWS, который вы заинтересованы в использовании, например API-интерфейс продуктов, на который вы ссылались.

Выберите пример из каталога src/MarketplaceWebServiceProducts/Samples , заполните ваши уникальные значения и запустите его.

В примерах реализована аутентификация с использованием класса MarketplaceWebServiceProducts_Client в src/MarketplaceWebServiceProducts/Client.php который демонстрирует, как успешно подписать запрос.