Мне нужно вызвать действие Amazon MWS «RequestReport» и указать тип ReportType как «_GET_FLAT_FILE_OPEN_LISTINGS_DATA_». я успешно подключился, чтобы получить FulfillmentInventory/ListInventorySupply, поэтому я знаю, что настройки cURL и amazon верны, но каждый раз, когда я отправляю, я получаю «Подписанная нами подпись запроса не соответствует подписи, которую вы предоставили. Проверьте секретный ключ доступа AWS и метод подписи. Подробнее см. В сервисной документации. назад с сервера. я попробовал как sort, так и ksort в строке 23 и 14 - в вызове FulfillmentInventory/ListInventorySupply мне пришлось настроить его с помощью двух ksorts, чтобы сохранить список SKU в правильном порядке для APIAmazon MWS API возвращает SignatureDoesNotMatch
Здесь это код, как я говорю, секрет, торговец, и KeyID правильны:
header('Content-type: application/xml');
$secret = 'secretcodehere';
$param = array();
$param['AWSAccessKeyId'] = 'accessidhere';
$param['Action'] = 'RequestReport';
$param['Merchant'] = 'merchantidhere';
$param['SignatureVersion'] = '2';
$param['Timestamp'] = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());
$param['Version'] = '2009-01-01';
$param['SignatureMethod'] = 'HmacSHA256';
$param['ReportType'] = '_GET_FLAT_FILE_OPEN_LISTINGS_DATA_';
ksort($param);
$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 = 'POST' . "\n";
$sign .= 'mws.amazonservices.com';
$sign .= '/doc/2009-01-01' . "\n";
$sign .= $arr;
$signature = hash_hmac("sha256", $sign, $secret, true);
$signature = urlencode(base64_encode($signature));
$link = "https://mws.amazonservices.com/doc/2009-01-01/?";
$link .= $arr . "&Signature=" . $signature;
/*
echo($link);//for debugging
exit(); */
$ch = curl_init($link);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/xml'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
print_r($response);
я попробовал его в MWS блокнота и информация верна и формирует ответ 200, и когда я проверить URL против тот, который генерируется блокнотом, выглядит «правильным», поэтому я должен что-то пропускать, и я надеюсь, что это очевидно для кого-то там, потому что я озадачен.
BTW-блокнотная перечисляет его как SellerId, но URL показывает, как купец - я попробовал и не радость
спасибо за это, что вы использовали для имени и версии приложения (я спрашиваю, потому что он по-прежнему терпит неудачу для меня) - также, amazon никогда не назначал marketplace_id - так как я только ищу северную америку - поэтому я прокомментировал это - похоже, что скрипт терпит неудачу в новом вызове MarketplaceWebService_Client (по крайней мере, vardump ничего не показывает) – user1260414
@ user1260414 Только что отредактировал мой самый, включая важные части '.config.inc.php'. – Michael
как только я загрузил весь остальной вздутый код амазонки, он сработал - спасибо за то, что я указал в правильном направлении! – user1260414