概要
Stripeでのサブスクリプション決済実装をRailsで行う場合、
公式で提供されているgemを使用することになると思います。
実装に当たって
Stripe::Plan.create()
Stripe::Customer.create()
のようなAPIメソッドを使用していくことになるのですが、
今回はAPIを使える状態にするまでの初期設定についてまとめました。
事前準備
いつもの
Gemfileに
gem 'stripe'
を追加して
bundle install
しておきましょう。
確認
rails c
でStripeメソッドが使えるか試しておきましょう。
Stripe::Customer.list
は登録されている顧客の情報リストを取得するメソッドです。
irb(main):001:0> Stripe::Customer.list
Stripe::AuthenticationError: No API key provided. Set your API key using "Stripe.api_key = <API-KEY>". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions.
当たり前ですが、エラーとなります。
APIを使用するのに必要なアカウント情報
必要な情報は
- Publishable key
- Secret key
といった2つのkeyです。
Stripe管理画面の以下の箇所より取得できます。(色々白抜きしてます)
開発フェーズの場合、Test用のkeyを使用するようにしましょう。
設定記述
stripe-rubyのREADMEにはこう書かれています。
https://github.com/stripe/stripe-ruby#usage
require "stripe"
Stripe.api_key = "sk_test_..."
# list charges
Stripe::Charge.list()
# retrieve single charge
Stripe::Charge.retrieve(
"ch_18atAXCdGbJFKhCuBAa4532Z",
)
もちろんこれでもAPIは使用できます。
しかし、必要な箇所で毎回
require "stripe"
Stripe.api_key = "sk_test_..."
と書くのは効率がいいとは言えませんし、セキュリティ的にもアウトです。
なので、今回は以下の2つのファイルにkey情報を記述します。
- config/secrets.yml
- config/initializers/stripe.rb
secrets.ymlについては以下の記事を参照してください。
Rails 5.1のencrypted secretsの運用について考える
config/secrets.yml
stripe_publishable_keyとstripe_secret_keyを定義します。
環境に合わせてdevelopment、test、productionは切り替えてください。
development:
# stripe
stripe_publishable_key: pk_test_********************
stripe_secret_key: sk_test_********************
config/initializers/stripe.rb
デプロイ時にStripeの定義を読み込みます。
Rails.configuration.stripe = {
publishable_key: Rails.application.secrets.stripe_publishable_key,
secret_key: Rails.application.secrets.stripe_secret_key
}
Stripe.api_key = Rails.application.secrets.stripe_secret_key
準備完了
以上でAPIを使用する準備は完了となります。
簡単ですね!!
確認
先ほどと同じメソッドを使って確認します。
(サーバー再起動してくださいね)
irb(main):001:0> Stripe::Customer.list
=> #<Stripe::ListObject:*****> JSON: {
"object": "list",
"data": [....],
"has_more": true,
"url": "/v1/customers"
}
正常なレスポンスが返ってきました。
(Customerがemptyの場合は見え方が違うかも...)
参考
- Stripe API Reference
https://stripe.com/docs/api - 日本正式リリースしたStripeを使ってサブスクリプション型決済システムを実装する
http://qiita.com/tady/items/7617e62b2a5402ebd0fb - StripeがRailsで動く仕組み
http://qiita.com/100010/items/c09fb08dd555b32a2652 - Rails 5.1のencrypted secretsの運用について考える
http://qiita.com/kikunantoka/items/dd22cf51071b93ba5b62