amazon Product Advertising API 署名

 amazon web services が署名が必要になって、名前も amazon Product Advertising API とかなってたので、コードを変更しなきゃと思ってサンプルページ見たけど、途中に描かれている値が間違っているみたいだ…。

サンプルリクエストに署名を行うためのステップ 【amazonヘルプ】 の、Version=2009-03-31 という文字列が、正しくは Version=2009-01-06 みたいです。

下記のサイトを参考にしました。下記のページだと、ヘルプページと最終出力は同じなのに、入力値が違う!って気づいたので、合わせてみたらちゃんと出来ました。

require 'hmac/sha2'
require 'base64'
 
def genreate_hash(original_url)
  url_string = original_url.split('&').sort.join('&')
  string = ['GET', 'webservices.amazon.com', '/onca/xml', url_string].join("\n")
  Base64.encode64(HMAC::SHA256.digest('1234567890', string))
end

上記で original_url を

"Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Version=2009-01-06&Timestamp=2009-01-01T12%3A00%3A00Z"

とすれば、

Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=\n

が出力されます。

なお、サンプル通りの文字列でやると、url_string が

"Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Version=2009-03-31&Timestamp=2009-01-01T12%3A00%3A00Z"

となって、

EDWJ1+VXQhAtPDKQ0f+wpaFQcBVDJyTIpDP7BZgxMiA=\n

が出力されます。

amazon Product Advertising API 署名