- Home ›
- Amazon Web サービス入門 ›
- JavaScriptを使った署名認証 ›
- HERE
タイムスタンプの追加
まずはタイムスタンプをリクエストに含めます。タイムスタンプはGMTで形式は次の通りです。
2009-01-01T12:00:00Z
日付及び時間の各要素は2桁にする必要があります。例えば7月の場合は「07」として下さい。
JavaScriptではGMTではないのですがUTC(協定世界時)の日時や時刻を取得するメソッドが用意されています。
var d = new Date(); var ye = d.getUTCFullYear(); var mo = d.getUTCMonth() + 1; var da = d.getUTCDate(); var ho = d.getUTCHours(); var mi = d.getUTCMinutes(); var se = d.getUTCSeconds();
この中で年以外の値については1桁の数値となる可能性がありますので次のようにして0詰めの2桁の値にします。
("0" + mo).slice(-2);
値の先頭に「0」を追加し、sliceによって後ろから2つの文字を取り出します。元々2桁だった場合はそのままの値が文字列になったものを返し、1桁だった場合は0が先頭についた文字列を返します。
結果として有効なタイムスタンプを表す文字列を取得するには次のような関数を用意します。
function getISO8601Timestamp(){ var d = new Date(); var ye = d.getUTCFullYear(); var mo = zeroPlus(d.getUTCMonth() + 1); var da = zeroPlus(d.getUTCDate()); var ho = zeroPlus(d.getUTCHours()); var mi = zeroPlus(d.getUTCMinutes()); var se = zeroPlus(d.getUTCSeconds()); return ye + "-" + mo + "-" + da + "T" + ho + ":" + mi + ":" + se + "Z"; } function zeroPlus(value){ return ("0" + value).slice(-2); }
取得したタイムスタンプをリクエストに追加します。
http://webservices.amazon.com/onca/xml
?Service=AWSECommerceService
&AWSAccessKeyId=00000000000000000000
&Operation=ItemLookup
&ItemId=0679722769
&ResponseGroup=ItemAttributes,Offers,Images,Reviews
&Version=2009-03-31
&Timestamp=2009-01-01T12:00:00Z
※上記は実際には1行です。
サンプル
では簡単なサンプルで試してみます。
<!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/script1_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>
function getSignature(){ var html = getISO8601Timestamp(); document.getElementById('output').innerHTML = html; } function getISO8601Timestamp(){ var d = new Date(); var ye = d.getUTCFullYear(); var mo = zeroPlus(d.getUTCMonth() + 1); var da = zeroPlus(d.getUTCDate()); var ho = zeroPlus(d.getUTCHours()); var mi = zeroPlus(d.getUTCMinutes()); var se = zeroPlus(d.getUTCSeconds()); return ye + "-" + mo + "-" + da + "T" + ho + ":" + mi + ":" + se + "Z"; } function zeroPlus(value){ return ("0" + value).slice(-2); }
上記を実際にブラウザ見てみると次のように表示されます。
ボタンを押すと次のように表示されます。
( Written by Tatsuo Ikura )