Stripe Connectを使ってシンプルなサービスをつくる


Stripe Connectは「プラットフォームとマーケットプレイスのための決済インフラ」としてStripeが提供している機能です。 Stripe Connectを使うとStripeアカウント間で親子関係を作り、子アカウントへの支払いに対してプラットフォーム手数料を徴収したり、親のアカウントで支払いを回収してから子アカウントに入金するといったフローが簡単にできるようになります。

今回Stripe Connectを活用して1日100円で応援したい人のページにメッセージを掲載できるパフォーマー応援プラットフォーム tip meというサービスを作りました。

使用フレームワーク

バックエンド: Ruby on Rails
フロント:ActionView(Rails) + Vue.js

支払いのフロー

実際のお金の流れは下記のようになります。

出典: https://stripe.com/docs/connect/enable-payment-acceptance-guide

実装の流れ

下記がざっくりとした実装の流れになります。変数部分は適宜読み替えてください。
前提として、stripe-ruby gemをインストールし、パブリックキー、シークレットキーを設定しておきます。

1. Stripeアカウントの作成

account = Stripe::Account.create({
                  type: account_type,
                  country: 'JP',
                  default_currency: 'jpy',
                  email: current_user.email})

参照) https://stripe.com/docs/api/accounts/create

2. Stripeアカウントをリンクさせる(親子関係の作成)

account_link = Stripe::AccountLink.create({
                  account: account.id,
                  refresh_url: stripe_url,
                  return_url: stripe_callback_url,
                  type: 'account_onboarding',
                })

アカウントリンク作成後 redirect_to account_link.urlにてStripeアカウントの情報入力画面へリダイレクトさせます。

参照) https://stripe.com/docs/api/account_links/create

3. 決済

Stripe::Charge.create({
                   amount: total_amount,
                   currency: currency,
                   source: stripe_token,
                   application_fee_amount: application_fee_amount,
                   expand: ['balance_transaction']
                 }, 
                 stripe_account: stripe_account_id )

stripe_accountに子アカウントのidを入力します。

参照) https://stripe.com/docs/api/charges/create

以上が非常にざっくりですが実装の流れです。
注意点として、Stripeアカウントにはstandard, express, customの3種類があり、standard以外のアカウントを子アカウントとしてStripe Connectを使用すると子アカウントの維持、出金時に手数料が発生します。

参照) https://stripe.com/jp/connect/pricing

おわりに

パフォーマー、サポーターの皆さんにとってより良いサービスにしていきたいと思っています。
ご意見・感想・ご質問等あればお気軽に連絡ください。
https://tipme.fun