Ruby
Rails
api
stripe
RubyOnRails

Rails Stripe サブスクリプション決済実装 カスタマーにプランを設定する

概要

RailsでAPIを使うまでの事前準備はこちら。
Rails Stripe サブスクリプション決済実装 初期設定をしてAPIを使える状態にする

プランの登録はこちら。
Rails Stripe サブスクリプション決済実装 プランの登録

今回はカスタマーにプランを設定する実装の紹介をします。
この工程によってカスタマーにサブスクリプションが登録されます。
サブスクリプションというのは定期支払いのことです。

管理ページからカスタマーにサブスクリプションを追加する

サイドメニューの定期支払いでサブスクリプション一覧が閲覧できます。
以下の画像はサブスクリプションが1件もない場合の見え方です。
新規ボタンよりサブスクリプションを追加しましょう。
スクリーンショット 2018-03-07 16.58.42.png

追加ボタンをクリックすると作成画面に遷移します。
まずはカスタマーを選択します。
(「追加」と書いていますが、新規にカスタマーを追加するわけではありません。「選択」の方がニュアンスあっているかと。)

スクリーンショット 2018-03-07 16.58.58.png

カスタマーは候補に10人くまでは出てきてくれます。(登録日時の降順かな?)
候補に存在しない場合は検索しましょう。

スクリーンショット 2018-03-07 16.59.17.png

カスタマーの選択の次はプランの選択です。
(「追加」と書いていますが、新規にプランをを追加するわけでは...以下略)

スクリーンショット 2018-03-07 16.59.29.png

これも候補に存在しない場合は検索しましょう。

スクリーンショット 2018-03-07 16.59.48.png

確認画面です。
「定期支払いを作成」をクリックすると完了します。

スクリーンショット 2018-03-07 17.01.47.png

プランをカスタマーに設定できたらカスタマー詳細画面にも表示されます。
ちゃんと設定できてますね。

スクリーンショット 2018-03-07 17.02.10.png

正常に設定できていればサブスクリプション一覧に表示されます。

スクリーンショット 2018-03-07 17.02.19.png

以上です。結構めんどくさいですね。
複数人一括でプラン設定などできないので、
数十、数百人単位でプラン変更したい時などは正直手動では無理なのではないでしょうか?(不可能とは言っていない)

Railsからカスタマーにプランを設定する

それでは、Railsでの実装を見ていきましょう。
今回は2パターン紹介します。

新規カスタマーにプランを設定する

新規カスタマーを作成するには、
Stripe::Customerクラスのcreateメソッドを使用します。
公式リファレンス:Create a customer
カスタマーを作成するパラメータの一つにプランが設定できます。

Stripe::Customer.create(
  email:'test@test.com',
  plan: 'small_plan_monthly'
)

既存カスタマーにプランを設定する

既存カスタマーを取得するには、
Stripe::Customerクラスのretrieveメソッドを使用します。
公式リファレンス:Retrieve a customer
取得したカスタマーに対してプランを設定します。

customer = ::Stripe::Customer.retrieve('cus_XXXXX')
customer.plan = 'small_plan_monthly'
customer.save

planに設定するID

上記どちらの場合でもplanにIDを設定しましたが、planのIDってなに!?という人もいるかもしれないので一応ここのことです。
スクリーンショット 2018-03-08 12.23.04.png

プラン登録時に設定したIDですね。

サブスクリプション有効期限の取得

Customer.createCustomer.retrieveで取得したカスタマーオブジェクトには色々な情報が入っています。
サブスクリプションを管理するのに使えそうなものも何点かありますが、今回はサブスクリプション有効期限の紹介をします。
current_period_endがサブスクリプション有効期限のエンドです。
この値はタイムスタンプになっているので変換する必要があります。

Time.zone.at(customer.current_period_end)

参考

ブログで見たい方はこちら
Rails Stripe サブスクリプション決済実装 カスタマーにプランを設定する