Stripe Checkoutを使った定期課金をRailsアプリケーションに導入する
こんにちは、ラビーの K@zuki. です。
この記事では、Ruby on Railsで作成されているWebサービスに、Stripe Checkoutを使用した定期課金機能を導入する方法を簡単に紹介します。
前提
今回試す環境は以下のバージョンになっています。
Ruby … 3.3.0
Ruby on Rails …. 7.1.3.2
またStripeも事前に以下は準備しておいてください。
テスト用のアカウント作成
シークレットキーを控える
Stripe Checkoutとは
Stripe Checkoutは、Stripeが提供するホスティング型の決済ページです。Stripe Checkoutを使用することで、開発者は最小限のコードでセキュアな決済フォームを実装することができます
環境準備
Stripeを導入する前にサンプルのアプリケーションを作成しておきます。
今回作成するアプリケーションの画面構成は以下のようにしたいので、それを前提に作成していきます。
ホーム … トップページ。ログインしている場合はサブスク設定ページへのリンクを表示
サブスク設定 … サブスクの契約状態を表示するページ。契約状態に応じてサブスクの契約・解除リンクを表示
# アプリケーションの作成
rails new dummy --minimal -B -G -T --skip-docker
cd dummy
# deviseの導入とユーザモデルの作成
bundle add devise
bin/rails g devise:install
bin/rails g devise:views
bin/rails g devise user
bin/rails g migration AddSubscriptionToUser subscribed:boolean subscription_id:string
vim db/migrate/XYZ # マイグレーションファイルを書き換えてデフォルト値を設定(下記に例あり)
bin/rails db:create db:migrate
# 各種ページの作成
bin/rails g controller home index
bin/rails g controller subscriptions show create_checkout_session cancel
生成されたファイルは以下のように変更しておきます。
db/migrate/XYZ
class AddSubscriptionToUser < ActiveRecord::Migration[7.1]
def change
add_column :users, :subscribed, :boolean, default: false
add_column :users, :subscription_id, :integer
end
end
config/routes.rb ※1
Rails.application.routes.draw do
root 'home#index'
devise_for :users
get '/subscription', to: 'subscriptions#show'
get '/cancel', to: 'subscriptions#cancel'
get '/create_checkout_session', to: 'subscriptions#create_checkout_session'
end
app/controllers/subscriptions_controller.rb
class SubscriptionsController < ApplicationController
before_action :authenticate_user!
def show
end
def cancel
current_user.update(subscribed: false, subscription_id: nil)
redirect_to subscription_path, notice: "Your subscription has been cancelled."
end
def create_checkout_session
current_user.update(subscribed: true, subscription_id: SecureRandom.random_number(1_000))
redirect_to subscription_path, notice: "Your subscription was successful!"
end
end
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Guild</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application" %>
</head>
<body>
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</body>
</html>
app/views/home/index.html.erb
<h1>Home#index</h1>
<% if user_signed_in? %>
<p>Hi, <%= current_user.email %>!</p>
<%= link_to 'Subscription Settings', subscription_path, class: 'btn btn-primary' %>
<%= link_to 'Log out', destroy_user_session_path, method: :delete, class: 'btn btn-secondary' %>
<% else %>
<%= link_to 'Sign up', new_user_registration_path, class: 'btn btn-primary' %>
<%= link_to 'Log in', new_user_session_path, class: 'btn btn-secondary' %>
<% end %>
app/views/subscriptions/show.html.erb
<h1>Subscriptions#show</h1>
<% if current_user.subscribed? %>
<p>Status: Subscribed</p>
<%= link_to 'Cancel Subscription', cancel_path, method: :post, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' %>
<% else %>
<p>Status: Not Subscribed</p>
<%= link_to 'Subscribe', create_checkout_session_path, method: :post, class: 'btn btn-primary' %>
<% end %>
これでStripeとの決済画面以外でのサンプル実装ができました。
さて次は実際にStripeでの実装に移ります。
Stripeを使った決済機能実装
Stripeを使って決済機能を実装します。
まずはStripeをRailsアプリケーションで使えるようにしていきます。
ここから先は
3,511字
/
1画像
¥ 100
この記事が気に入ったらサポートをしてみませんか?