PHPのamazonAPI認証関数

タイムスタンプ付きのURLを入れると、署名入りのURLを返してくれる。(関数の$secret_keyは自分のものに直す)

by [PHP] Amazon Product Advertising API で認証付きリクエストを送る方法まとめ

function add_signature($url){

// "Your Secret Access Key"

$secret_key = "1234567890";

$ret_char = "\n";

$url_array = parse_url($url);

parse_str($url_array["query"], $param_array);

$param_array["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");

ksort($param_array);

$str = "GET".$ret_char.$url_array["host"].$ret_char.$url_array["path"].$ret_char;

$str_param = "";

while( list($key, $value) = each($param_array) ){

$str_param =

$str_param.strtr($key, "_", ".")."=".rawurlencode($value)."&";

}

$str = $str.substr($str_param, 0, strlen($str_param)-1);

$signature = base64_encode( hash_hmac("sha256", $str, $secret_key, true) );

$url_sig =

"http://".$url_array["host"].$url_array["path"]."?".

$str_param."Signature=".rawurlencode($signature);

return $url_sig;

}

なぜか、これだとうまくいかないから、改めてこれを使ってみた。すると、できた!