下記Amazon Pay v2の、Ruby版サンプルアプリケーションです。
https://developer.amazon.com/ja/docs/amazon-pay/intro.html
Ruby 2.3.0 以上
Note: 2.5.0 未満の場合、「openssl」のGemを下記指示にしたがって更新する必要があります。
https://github.com/ruby/openssl
本アプリケーションでは、下記のようにAmazon Payでの単純な購入フローを実行するサンプルを提供しています。
本リポジトリをcloneします。
git clone https://github.com/amazonpay-labs/amazonpay-sample-ruby-v2.git
# cloneしたリポジトリへ移動
cd amazonpay-sample-ruby-v2
下記コマンドにて、Rubyスクリプトを実行します。
ruby keys/init.rb
keysディレクトリ配下に、下記のファイルが生成されます。
- keyinfo.rb
- privateKey.pem
Seller Centralにて、本サンプル用にアプリケーションを用意し、こちらを参考に、Merchant ID, Public Key ID, Store ID, Private Keyを取得し、それぞれ下記にコピーします。
- Merchant ID: keys/keyinfo.rb の MERCHANT_ID
- Public Key ID: keys/keyinfo.rb の PUBLIC_KEY_ID
- Store ID: keys/keyinfo.rb の STORE_ID
- Private Key: keys/privateKey.pem
また、「AMAZON_SIGNATURE_ALGORITHM」の値として最初から「AMZN-PAY-RSASSA-PSS-V2」が指定されています。必要に応じて前バージョンの「AMZN-PAY-RSASSA-PSS」も指定できますが、通常はそのままで問題ないです。
本ディレクトリにて、下記のコマンドを実行して依存モジュールをインストールします。
bundle install
# 注意! ↓↓↓ Rubyのバージョンが2.5.0未満の場合のみ ↓↓↓
gem install openssl
# 注意! ↑↑↑ Rubyのバージョンが2.5.0未満の場合のみ ↑↑↑
# また、https://github.com/ruby/openssl にも書かれている通り、2.3の場合には更にソースで「gem 'openssl'」を実行してgemを有効化する必要もあります。
# 本アプリケーションでは、libs/signature.rbのコードの先頭でこの処理を実行しています。
gem install sinatra
本ディレクトリにて、下記コマンドを実行します。
ruby app.rb
http://localhost:4567/ にアクセスして、動作を確認します。
本アプリケーションは主に下記3つのrbファイルで構成されています。
Webアプリの本体です。Sinatraで実装されており、100行弱程度です。
各種設定値のみが定義された設定ファイルです。
Amazon Pay APIの呼出方法を示したサンプルで、コード部分が約120行あります。
ファイルの先頭にサンプルコードの使い方を英語で示しており、下記はその日本語訳です。
最初に、下記のようにAmazonPayClientをインスタンス化します。:
client = AmazonPayClient.new {
public_key_id: 'XXXXXXXXXXXXXXXXXXXXXXXX', # SellerCentralで取得したpublick key ID
private_key: File.read('./privateKey.pem'), # SellerCentralで取得したprivate key
amazon_signature_algorithm: 'AMZN-PAY-RSASSA-PSS-V2', # Signature計算用アルゴリズム名. 任意項目. デフォルト値: 'AMZN-PAY-RSASSA-PSS'
region: 'jp', # 'na', 'eu', 'jp'が指定できます
sandbox: true
}
Note
「amazon_signature_algorithm」の値として「AMZN-PAY-RSASSA-PSS-V2」を指定した場合、下記リンク先に従ってAmazon Payボタン描画のscriptでも同じアルゴリズム名を指定する必要があります。 https://developer.amazon.com/docs/amazon-pay-checkout/amazon-pay-script.html
下記パラメタを指定して、'generate_button_signature'を呼び出します。
- payload: APIに渡すpayload。JSON string でも Hashインスタンス でも可。
例:
signature = client.generate_button_signature {
webCheckoutDetails: {
checkoutReviewReturnUrl: 'http://example.com/review'
},
storeId: 'amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
下記パラメタを指定して、'api_call'を呼び出します。
- url_fragment: API呼出のURLの末尾部分。 例) 'https://pay-api.amazon.com/:environment/:version/checkoutSessions/' の場合、「checkoutSessions」
- method: API呼出のHTTP method
- (Optional) payload: API呼出のrequest payload。JSON string でも Hashインスタンス でも可。
- (Optional) headers: API呼出のHTTP header。 例) {header1: 'value1', header2: 'value2'}
- (Optional) query_params: API呼出のquery parameter。 例) {param1: 'value1', param2: 'value2'}
Amazon Pay API呼出結果のresponseが返却されます。
response = client.api_call ("checkoutSessions", "POST",
payload: {
webCheckoutDetails: {
checkoutReviewReturnUrl: "https://example.com/review"
},
storeId: "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
headers: {'x-amz-pay-idempotency-key': SecureRandom.hex(10)}
)
response = client.api_call ("checkoutSessions/#{amazon_checkout_session_id}", 'GET')