サブスクリプションの導入
概要
オリジナルアプリの作成にて、サブスクリプション型の決済を導入したのでアウトプットします。
一回きり決済の導入方法はPAY.JPの記事にまとめてあります。
今回はその続きです。
PAY.JPでのサブスクリプション課金の流れ
まずはPAY.JPでのサブスクリプションの流れについて簡単に解説します。
PAY.JPとクライアント、サーバーでは以下のように処理が行われます。
①クライアント側でJavaScriptを用いてPAY.JPにカード情報をリクエスト
②PAY.JPはそれに対しレスポンスを返し、JavaScriptはトークンを生成(公開鍵)
③JavaScriptからサーバー側へトークンと決済情報をパラメーターとして送信
④サーバー側はトークンと決済情報をもとにPAY.JPと通信し、決済を行う(秘密鍵)
基本的な流れは、一回きりの決済と同じです。異なる点は、④の決済情報が少し複雑になる点です。
単発決済の場合はChargeオブジェクトを生成して決済するだけでしたが、サブスクリプションの場合は、
①トークンをもとに、Customerオブジェクトを生成
②金額、課金周期などの情報をもつPlanオブジェクトを生成
③どの顧客がどのプランを契約しているのか、という情報をもつSubscriptionオブジェクトを生成
という流れになります。
SubscriptionオブジェクトがPAY.JP上でONになっている時(正確には、statusがactive)になっている時に一定の周期でクレジットカードへの請求が行われます。
実装
今回実装したコードの全体像です。
一行ずつ解説します。
金額、課金周期、通貨の情報を持ったPlanオブジェクトを生成します。すると、このようにプランが生成されます。
最後に、先ほど生成した顧客情報とプラン情報のIDを用いてSubscriptionオブジェクトを生成します。するとこのようにPAY.JP上でサブスクリプション情報が生成されます。
詳細情報には、どの顧客がどのプランで登録しているのか、いつ請求なのか、といった情報が記載されています。
これで、実装が完了しました。
参考
https://shingo-sasaki-0529.hatenablog.com/entry/how_to_use_payjp_by_ruby
https://pay.jp/docs/api/?ruby#%E5%AE%9A%E6%9C%9F%E8%AA%B2%E9%87%91%E3%82%92%E5%89%8A%E9%99%A4