AWSの認証対策(SOAP)

ようやくAWSの認証対策を行ったので、メモ。

まず、SOAPを利用しているので、次のページの説明を読む。
https://portal.aws.amazon.com/gp/aws/securityCredentials
昔使っていたサブスクリプションIDは、アクセスキー IDになっている。
さらに、認証の鍵となるシークレットアクセスキーが必要なので、次のページで調べる。
https://images-na.ssl-images-
amazon.com/images/G/09/associates/paapi/dg/index.html
さて、コードの変更。

// 定数定義
define(“ACCESS_KEY”,[アクセスキー ID]);
define(“SECRET_KEY”,[シークレットアクセスキー]); // ここ追加
define(“ASSOCIATE_TAG”,[AmazonアソシエイトのトラッキングID]);
// 署名作成 ここも追加
$timeStamp = gmdate(“Y-m-dTH:i:sZ”); // 国際標準時
$function = “ItemSearch”; // 処理のタイプ
$signature = base64_encode(hash_hmac(“sha256”, ($function.$timeStamp), SECRET_KEY, True)); // これが署名

$client = new SoapClient(‘http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl’);

$params = array(
//”AWSAccessKeyId” => ACCESSKEY_ID, // ヘッダに入れるので不要
“AssociateTag”=>ASSOCIATE_TAG,
“Request”=>array(“ItemId”=>”4480037969″,”IdType”=>”ASIN”,’ResponseGroup’=>’Medium,Images’)
);
// ヘッダを追加
$namespace = ‘http://security.amazonaws.com/doc/2007-01-01/’;
$header_data = array(
  ‘AWSAccessKeyId’ => ACCESS_KEY,
  ‘Timestamp’ => $timeStamp,
  ‘Signature’ => $signature,
);
$header_arr = array();
foreach ($header_data as $name => $val) {
  $header_arr[] = new SoapHeader($namespace, $name, $val);
}
$client->__setSoapHeaders($header_arr);
// 実行
$result = $client->$function($params);

よし!

コメントを残す

メールアドレスが公開されることはありません。