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

# 概要

RailsでAPIを使うまでの事前準備はこちら。
[Rails Stripe サブスクリプション決済実装 初期設定をしてAPIを使える状態にする](https://qiita.com/ss_watanabe/items/8c5ec353a842d5d30e77)

プランの登録はこちら。
[Rails Stripe サブスクリプション決済実装 プランの登録](https://qiita.com/ayies128/items/dd1bdd9b01ee9a8c9eaa)

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


# 管理ページからカスタマーにサブスクリプションを追加する
サイドメニューの定期支払いでサブスクリプション一覧が閲覧できます。
以下の画像はサブスクリプションが1件もない場合の見え方です。
新規ボタンよりサブスクリプションを追加しましょう。
<img width="1417" alt="スクリーンショット 2018-03-07 16.58.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/eb67801b-aeda-4f01-a4f2-36253f73d2e6.png">

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

<img width="1427" alt="スクリーンショット 2018-03-07 16.58.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/e4c90c18-9cac-cacd-a718-2e44fbacca3f.png">

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

<img width="1423" alt="スクリーンショット 2018-03-07 16.59.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/b37b9e8d-0553-5251-28f3-6394d5b447d5.png">

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

<img width="1416" alt="スクリーンショット 2018-03-07 16.59.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/593ebd92-1efe-a7fe-7bf1-f4f5fedeefb2.png">

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

<img width="1412" alt="スクリーンショット 2018-03-07 16.59.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/c1134c7d-36bc-452a-b76e-dda089cb0285.png">

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

<img width="1378" alt="スクリーンショット 2018-03-07 17.01.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/5611a359-795f-a8f3-2901-2d4522b00125.png">

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

<img width="1396" alt="スクリーンショット 2018-03-07 17.02.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/2db2236f-a64c-10a8-4abb-5dceace938f1.png">

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

<img width="1387" alt="スクリーンショット 2018-03-07 17.02.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/3fb2d708-c81e-ad7c-5208-8ebed0eace1c.png">

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

# Railsからカスタマーにプランを設定する
それでは、Railsでの実装を見ていきましょう。
今回は2パターン紹介します。
## 新規カスタマーにプランを設定する
新規カスタマーを作成するには、
```Stripe::Customer```クラスの```create```メソッドを使用します。
[公式リファレンス：Create a customer](https://stripe.com/docs/api#create_customer)
カスタマーを作成するパラメータの一つにプランが設定できます。

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


## 既存カスタマーにプランを設定する
既存カスタマーを取得するには、
```Stripe::Customer```クラスの```retrieve```メソッドを使用します。
[公式リファレンス：Retrieve a customer](https://stripe.com/docs/api#retrieve_customer)
取得したカスタマーに対してプランを設定します。

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

## planに設定するID
上記どちらの場合でもplanにIDを設定しましたが、planのIDってなに！？という人もいるかもしれないので一応ここのことです。
<img width="1384" alt="スクリーンショット 2018-03-08 12.23.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/42ca2360-b9d7-2026-e411-f9c1f08cd888.png">

[プラン登録時](https://qiita.com/ayies128/items/dd1bdd9b01ee9a8c9eaa#%E5%AE%9F%E8%A3%85)に設定したIDですね。

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

``Time.zone.at(customer.current_period_end)`` 

# 参考

- Stripe API Reference<br>
https://stripe.com/docs/api

ブログで見たい方はこちら
[Rails Stripe サブスクリプション決済実装 カスタマーにプランを設定する](http://nabesys.com/article/2018/03/08405/)