Stripe決済第四弾です。
今回はいままで実装したサブスクの解約を実装します。
サブスクの実装は以下の記事を参考にしてみてください。
実装
ルーティングを追加します。
config/routes.rb
resources :cancel, only: [:create]
viewsに追記します。
app/viewa/plans/index.html.erb
<%= button_to cancel_index_path, data: { turbo: false } do %> 解約 <% end %>
コントローラーを作成します。
app/controllers/cancel_controller.rb
class CancelController < ApplicationController def create subscriptions = Stripe::Subscription.list(status: 'active', customer: current_user.customer_id) if subscriptions.blank? redirect_to plans_url, status: :see_other and return end subscription = Stripe::Subscription.cancel(subscriptions.first.id) if subscription.status == "canceled" current_user.update(plan_id: 1) end redirect_to plans_url, status: :see_other and return end end
以下のようにStripeのAPIを使用して、契約中のサブスクデータを取得しています。
今までの実装で Payment
にも決済情報を保存していますが、有効なサブスクデータを探すという意味合いでもAPIを使用してみました。
Stripe::Subscription.list(status: 'active', customer: current_user.customer_id)
もし、サービス内で複数のサブスクを契約できるようにしている場合は、以下のように price_id
も用いて絞り込みをする必要があります。
Stripe::Subscription.list(status: 'active', customer: current_user.customer_id, price: "解約するサブスクのprice_id")
サブスク周りのAPIの詳細は以下を参考にしてみてください。
Subscriptions | Stripe API Reference
終わり
これで実装完了です。
サブスクを契約できるようにしたら、解約もできるようにしないといけませんね。
今回はWebhookを使用しませんでしたが、Webhookを使用することでさらに堅牢な実装ができるのではないでしょうか。