1
CodeIgniter에서 PHP를 사용하여 amazon 웹 서비스를 검색하는 데 문제가 있습니다. InvalidParameter 타임 스탬프가 서버의 ISO-8601 형식 응답에 없습니다. 그러나 나는 주어진 시간 형식을 http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html과 비교하려고 시도했기 때문에 타임 스탬프가 문제라고 생각하지 않습니다. 아무도 도와 줄 수 있습니까? 여기 내 코드는 다음과 같습니다.Codeigniter 또는 PHP Amazon API 도움말
$private_key = 'XXXXXXXXXXXXXXXX'; // Took out real secret key
$method = "GET";
$host = "ecs.amazonaws.com";
$uri = "/onca/xml";
$timeStamp = gmdate("Y-m-d\TH:i:s.000\Z");
$timeStamp = str_replace(":", "%3A", $timeStamp);
$params["AWSAccesskeyId"] = "XXXXXXXXXXXX"; // Took out real access key
$params["ItemPage"] = $item_page;
$params["Keywords"] = $keywords;
$params["ResponseGroup"] = "Medium2%2525COffers";
$params["SearchIndex"] = "Books";
$params["Operation"] = "ItemSearch";
$params["Service"] = "AWSECommerceService";
$params["Timestamp"] = $timeStamp;
$params["Version"] = "2009-03-31";
ksort($params);
$canonicalized_query = array();
foreach ($params as $param=>$value)
{
$param = str_replace("%7E", "~", rawurlencode($param));
$value = str_replace("%7E", "~", rawurlencode($value));
$canonicalized_query[] = $param. "=". $value;
}
$canonicalized_query = implode("&", $canonicalized_query);
$string_to_sign = $method."\n\r".$host."\n\r".$uri."\n\r".$canonicalized_query;
$signature = base64_encode(hash_hmac("sha256",$string_to_sign, $private_key, True));
$signature = str_replace("%7E", "~", rawurlencode($signature));
$request = "http://".$host.$uri."?".$canonicalized_query."&Signature=".$signature;
$response = @file_get_contents($request);
if ($response === False)
{
return "response fail";
}
else
{
$parsed_xml = simplexml_load_string($response);
if ($parsed_xml === False)
{
return "parse fail";
}
else
{
return $parsed_xml;
}
}
P.S. 개인적으로 나는 그것을 해싱 할 때 $ string_to_sign에서 세대가 잘못되었다고 생각한다.