Scriam inainte de a intra in concediu ca Amazon va introduce incepand cu 15 august autentificarea pentru folosirea API-ului lor. Drept urmare m-am trezit pe siteul meu de versuri cu o problema …
The request must contain the parameter Signature.
Am cautat si in forumul lor, am si googalit … si-am dat de solutia lui Brandon Checketts (THANK YOU, Brandon! ;) ).
function signAmazonUrl($url)
{
global $CONFIG;
$original_url = $url;
// Decode anything already encoded
$url = urldecode($url);
// Parse the URL into $urlparts
$urlparts = parse_url($url);
// Build $params with each name/value pair
foreach (split('&', $urlparts['query']) as $part) {
if (strpos($part, '=')) {
list($name, $value) = split('=', $part, 2);
} else {
$name = $part;
$value = '';
}
$params[$name] = $value;
}
// Include a timestamp if none was provided
if (empty($params['Timestamp'])) {
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
}
// Sort the array by key
ksort($params);
// Build the canonical query string
$canonical = '';
foreach ($params as $key => $val) {
$canonical .= "$key=".rawurlencode($val)."&";
}
// Remove the trailing ampersand
$canonical = preg_replace("/&$/", '', $canonical);
// Some common replacements and ones that Amazon specifically mentions
$canonical = str_replace(array(' ', '+', ',', ';'), array('%20', '%20', urlencode(','), urlencode(':')), $canonical);
// Build the si
$string_to_sign = "GET\n{$urlparts['host']}\n{$urlparts['path']}\n$canonical";
// Calculate our actual signature and base64 encode it
$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $CONFIG['AMAZON_SECRET_KEY'], true));
// Finally re-build the URL with the proper string and include the Signature
$url = "{$urlparts['scheme']}://{$urlparts['host']}{$urlparts['path']}?$canonical&Signature=".rawurlencode($signature);
return $url;
}
Tot ce trebuie facut acum este sa setati o variabila globala $CONFIG[‘AMAZON_SECRET_KEY’] si apoi sa chemati functia signAmazonUrl() in orice loc aveati un URL de la Amazon API; ca in exemplul meu:
$rss_parser_nuebun = "https://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=<AWSAccessKeyId>&Version=2008-04-07&AssociateTag=<tagul-tau>&Operation=ItemSearch&SearchIndex=Music&Title=<cuvinte-pentru-cautare>&ResponseGroup=Images,ItemAttributes,OfferSummary"; $rss_parser = signAmazonUrl($rss_parser_nuebun);
Comenteaza