LoginSignup
18
19

More than 5 years have passed since last update.

Amazon Product Advertising APIの署名認証について

Posted at

Amazon Product Advertising APIではリクエストの認証のためパラメータとしてTimestamp、Signatureが必要になります。
Timestampは国際標準時を「YYYY-MM-DDThh:flag_mm:ssZ」で編集します。
Signatureはプログラムで作成した値をリクエストに追加する必要があります。

今回はProduct Advertising API ScratchpadのPHPコードスニペットを参考にSignatureの作成手順を確認します。

<?php

// Product Advertising APIアカウント作成後に取得するアクセスキーを設定します。
$aws_access_key_id = "アクセスキー";

// Product Advertising APIアカウント作成後に取得するシークレットアクセスキーを設定します。
$aws_secret_key = "シークレットアクセスキー";

// エンドポイントを指定します。
$endpoint = "webservices.amazon.co.jp";

$uri = "/onca/xml";

// リクエストパラメータを指定します。
// ここではISBNが4873115655の書籍の情報を取得します。
$params = array(
    "Service" => "AWSECommerceService",
    "Operation" => "ItemLookup",
    "AWSAccessKeyId" => "アクセスキー",
    "AssociateTag" => "アソシエイトタグ",
    "ItemId" => "4873115655",
    "IdType" => "ISBN",
    "ResponseGroup" => "Images,ItemAttributes,Offers",
    "SearchIndex" => "Books"
);

// タイムスタンプを追加します。
if (!isset($params["Timestamp"])) {
    $params["Timestamp"] = gmdate('Y-m-d\TH:i:s\Z');
}

// キーを基準にパラメータをソートします。
ksort($params);

$pairs = array();

// パラメータを key=value の形式に編集します。
// 同時にURLエンコードを行います。
foreach ($params as $key => $value) {
    array_push($pairs, rawurlencode($key)."=".rawurlencode($value));
}

// パラメータを&で連結します。
$canonical_query_string = join("&", $pairs);

// 署名に必要な文字列を先頭に追加します。
$string_to_sign = "GET\n".$endpoint."\n".$uri."\n".$canonical_query_string;

// RFC2104準拠のHMAC-SHA256ハッシュアルゴリズムの計算を行います。
// これがSignatureの値になります。
$signature = base64_encode(hash_hmac("sha256", $string_to_sign, $aws_secret_key, true));

// Siginatureの値のURLエンコードを行い、リクエストの最後に追加します。
$request_url = 'http://'.$endpoint.$uri.'?'.$canonical_query_string.'&Signature='.rawurlencode($signature);

echo "Signed URL: \"".$request_url."\"";

?>

生成される署名付きURLはこんな感じ

http://webservices.amazon.co.jp/onca/xml?
AWSAccessKeyId=アクセスキー
&AssociateTag=アソシエイトタグ
&IdType=ISBN
&ItemId=4873115655
&Operation=ItemLookup
&ResponseGroup=Images%2CItemAttributes%2COffers
&SearchIndex=Books
&Service=AWSECommerceService
&Timestamp=2015-12-09T04%3A18%3A41Z
&Signature=19NRyLoK2qnPtEAguD2FC3ZTWrtNp1C6w9zVnKRqa8Y%3D
18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19