Я пытаюсь заставить Amazon MWS Scratchpad работать, но он продолжает давать мне сообщение:
Подписанная нами подпись запроса не соответствует подписи, которую вы предоставили. Проверьте секретный ключ доступа AWS и метод подписи. Подробнее см. В сервисной документации.
- PHP-анализ XML
- complexType с nuSoap
- как хранить (в php) и использовать (в javascript) большой объем данных
- Что такое DOM Core Level / Version, поддерживаемый PHP DOM?
- случайная ошибка symfony: ContextErrorException: Warning: simplexml_load_file (): предупреждение ввода-вывода: не удалось загрузить внешний объект
Я искал аналогичную тему здесь, но ничего действительно полезного. Итак, вот код:
$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
который демонстрирует, как успешно подписать запрос.