Skip to content

amazonpay-labs/amazonpay-sample-ruby-v2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ruby版 Amazon Pay v2 サンプルアプリケーション

下記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

本リポジトリをcloneします。

git clone https://github.com/amazonpay-labs/amazonpay-sample-ruby-v2.git

# cloneしたリポジトリへ移動
cd amazonpay-sample-ruby-v2

Seller Centralでのアプリケーション作成・設定

下記コマンドにて、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」も指定できますが、通常はそのままで問題ないです。

依存モジュールのインストール

本ディレクトリにて、下記のコマンドを実行して依存モジュールをインストールします。

Bundlerを使用する場合

bundle install

RubyGemsを使用する場合

# 注意! ↓↓↓ 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ファイルで構成されています。

app.rb

Webアプリの本体です。Sinatraで実装されており、100行弱程度です。

keys/keyinfo.rb

各種設定値のみが定義された設定ファイルです。

libs/signature.rb

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

Amazon PayボタンのSignatureの生成

下記パラメタを指定して、'generate_button_signature'を呼び出します。

  • payload: APIに渡すpayload。JSON string でも Hashインスタンス でも可。

参照: http://amazonpaycheckoutintegrationguide.s3.amazonaws.com/amazon-pay-checkout/add-the-amazon-pay-button.html#3-sign-the-payload

例:

    signature = client.generate_button_signature {
        webCheckoutDetails: {
            checkoutReviewReturnUrl: 'http://example.com/review'
        },
        storeId: 'amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    }

その他のAPIの呼び出し

下記パラメタを指定して、'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が返却されます。

例1: Create Checkout Session

    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)}
    )

例2: Get Checkout Session

    response = client.api_call ("checkoutSessions/#{amazon_checkout_session_id}", 'GET')

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published