署名対象のリクエスト文字列

広告

前ページでパラメータとエンコードされた値がつながった文字列を並び替えを行いました。その文字列を1つの文字列に連結します。文字列と文字列のつなぎには「&」を使います。

var para = {
  "Service":"AWSECommerceService",
  "AWSAccessKeyId":"00000000000000000000",
  "Operation":"ItemLookup",
  "ItemId":"0679722769",
  "ResponseGroup":"ItemAttributes,Offers,Images,Reviews",
  "Version":"2009-01-06",
  "Timestamp":"2009-01-01T12:00:00Z"
};

var para_array = [];

for(var pname in para){
  para_array.push(pname + "=" + encodeURIComponent(para[pname]));
}

para_array.sort();

var str_para = para_array.join('&');

文字列の連結にはjoinメソッドを使いました。

次に「GET」「webservices.amazon.com」「/onca/xml」そして先ほど作成した文字列を連結します。今度のつなぎには改行(¥n)を記述します。

var para = {
  "Service":"AWSECommerceService",
  "AWSAccessKeyId":"00000000000000000000",
  "Operation":"ItemLookup",
  "ItemId":"0679722769",
  "ResponseGroup":"ItemAttributes,Offers,Images,Reviews",
  "Version":"2009-01-06",
  "Timestamp":"2009-01-01T12:00:00Z"
};

var para_array = [];

for(var pname in para){
  para_array.push(pname + "=" + encodeURIComponent(para[pname]));
}

para_array.sort();

var str_para = para_array.join('&');
var str_signature = "GET" + "¥n" + "webservices.amazon.com" + "¥n" + "/onca/xml" + "¥n" + str_para;

これで署名を作成する元になる文字列が作成できました。

サンプル

では簡単なサンプルで試してみます。

sample4_1.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>署名認証テスト</title>
<script type="text/javascript" src="./js/script4_1.js"></script>
</head>
<body>

<p>
ボタンを押して下さい
</p>

<p>
<input type="button" name="checkbutton" value="check" onclick="getSignature()" />
</p>

<div id="output" style="width: 500px; height: 100px"></div>

</body>
</html>

script4_1.js

function getSignature(){
  var para = {
    "Service":"AWSECommerceService",
    "AWSAccessKeyId":"00000000000000000000",
    "Operation":"ItemLookup",
    "ItemId":"0679722769",
    "ResponseGroup":"ItemAttributes,Offers,Images,Reviews",
    "Version":"2009-01-06",
    "Timestamp":"2009-01-01T12:00:00Z"
  };

  var para_array = [];

  for(var pname in para){
    para_array.push(pname + "=" + encodeURIComponent(para[pname]));
  }

  para_array.sort();

  var str_para = para_array.join('&');
  var str_signature = "GET" + "¥n" + "webservices.amazon.com" + "¥n" + "/onca/xml" + "¥n" + str_para;

  alert(str_signature);
}

上記を実際にブラウザ見てみると次のように表示されます。

署名対象のリクエスト文字列

ボタンを押すと次のように表示されます。

署名対象のリクエスト文字列

( Written by Tatsuo Ikura )