この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:atom
更新日時:2018-07-11 15:14:30

タイトル: 署名認証の方法(PHPサンプル)

本稿はPA-APIのリクエストの際に署名認証をする方法を説明します。

 

リクエストの基本構文に対して、更に「Signiture」および「Timestamp」のパラメータを追加することで署名認証が可能となります。

SignitureにはRFC2104準拠のHMAC-SHA256ハッシュアルゴリズムの計算した秘密キーを、

Timestampには現在日時を指定します。

キーの発行が済んでいない方はこちらを参照。

また、パラメータはソートする必要があるので要注意。

サンプルは以下の通り。

/*
 * 基本情報
 */
const SERVICE = "AWSECommerceService";
const ACCESS_KEY = "自身のアクセスキーを入力";
const ASSOCIATE_TAG = "自身のアソシエイトIDを入力";
const SECRET_KEY = "自身の秘密キーを入力";
$operation = "ItemSearch";
$searchIndex = "Apparel";
$keywords = "Shirt";
$timestamp = gmdate('Y-m-d\TH:i:s\Z');

$params = array(
    "Service" => SERVICE,
    "AWSAccessKeyId" => ACCESS_KEY,
    "AssociateTag" => ASSOCIATE_TAG,
    "Operation" => $operation,
    "SearchIndex" => $searchIndex,
    "Keywords" => $keywords,
    "Timestamp" => $timestamp
);

//キーのソートを実行する。
//ソートをしないと思わぬエラーが発生するので要注意。
ksort($params);

//パラメータの整形
$pairs = array();
foreach ($params as $key => $value) {
    array_push($pairs, rawurlencode($key)."=".rawurlencode($value));
}
$canonicalQS = join("&", $pairs);


/*
 * 署名情報
 */
const REQUEST_METHOD = "GET";
const ENDPOINT = "webservices.amazon.co.jp";
const REQUEST_URI = "/onca/xml";
const ALGORITHM = "sha256";
$toSign =
    REQUEST_METHOD . "\n"
    . ENDPOINT . "\n"
    . REQUEST_URI . "\n"
    . $canonicalQS;

//RFC2104準拠のHMAC-SHA256ハッシュアルゴリズムで計算する
$signature = rawurlencode(base64_encode(hash_hmac(ALGORITHM, $toSign, SECRET_KEY, true))); 

//リクエストURL完成
$url = "http://" . ENDPOINT . REQUEST_URI . "?" . $canonicalQS . "&Signature=" . $signature;
echo "url: " . $url;