Stripe Connectの連結アカウントと支払い方法を改めておさらい

Stripe
  1. ホーム
  2. Stripe
  3. Stripe Connectの連結アカウントと支払い方法を改めておさらい

Stripeとは

Stripeを使用すると、Webアプリケーションにサクッと決済処理を導入することが出来ます。APIが充実しており、SDKも提供されているので導入コストを最小限に抑えることが出来ます。

単純な決済処理も可能ですが、サブスクリプション決済(繰り返し決済)や、今回ご紹介するプラットフォーム決済も実現することが出来ます。

Stripe Connectとは

Stripeには様々な決済方法が存在するのですが、プラットフォーム決済を実装することも可能です。この決済を実現するStripeサービスに、「Stripe Connect」が存在します。

通常のカード決済では、決済金額から手数料を差し引いた金額が加盟店に入金される仕組みで、StripeにもPaymentで実現出来ます。Stripeでは更に発展させ、売上発生時に売上を別のStripeアカウントと分配させる仕組みがあります。

例えばショッピングサイトの場合、カード決済・注文と同時に出品者に対して支払いを行うという仕組みを実現することが出来ます。

この仕組みを普通に実装すると、売上を月末で締め切った上でバッチ処理などで売上を集計して分配金額を計算する必要があります。更に自分で出品者に対して個別に送金も行う必要があるため、出品者に入金されるまでかなり時間がかかってしまいます。が、Stripe Connectの仕組みを使うと決済と同時に分配出来るため実装の手間がものすごく省けます。

大まかな仕組み

Connectを使用する上で、幾つか重要なキーワードがあるのでまずはおさらいから。

また、今回の記事ではStripe ConnectのStandardを前提に書いていきます。

連結アカウント(Connected account)

出品者は事前に、自分のStripeアカウントをプラットフォーマー(図だとショッピングサイト)のStripeアカウントに紐付けする必要があります。この時、紐付けを行う際の出品者側のアカウントを「連結アカウント」と呼びます。

引用:https://stripe.com/docs/connect/destination-charges

連結アカウントを作成する

まず、連結アカウント用のStripeアカウント本体を作成します。

PHP版SDKだとこんな感じ。(Stripe公式ドキュメントよりそのまま引用)

$stripe = new \Stripe\StripeClient(
  'sk_test_********************'
);
$stripe->accounts->create([
  'type' => 'custom',
  'country' => 'US',
  'email' => 'jenny.rosen@example.com',
  'capabilities' => [
    'card_payments' => ['requested' => true],
    'transfers' => ['requested' => true],
  ],
]);

レスポンスにアカウントID(id)が返ってくるので、このIDはDBなどに保存します。

連結アカウントの入金情報など登録用のURLを発行する

accountLinks作成のAPIを叩くことで、登録用のURLを出品者用に発行することが出来ます。

出品者用の管理画面などに、連結アカウント未登録の場合に表示される登録用のボタンを用意します。

https://stripe.com/docs/api/account_links/create

これをPHP版SDKで実装すると、下記のコードになります。(Stripe公式ドキュメントよりそのまま引用)

account に入るIDは、前の手順で取得したアカウントIDになります。

$stripe = new \Stripe\StripeClient(
  'sk_test_4***********7dc'
);
$stripe->accountLinks->create([
  'account' => 'acct_1032D**************o2C',
  'refresh_url' => 'https://example.com/reauth',
  'return_url' => 'https://example.com/return',
  'type' => 'account_onboarding',
]);

正常にコール出来ると、レスポンスにURLなどが返ってくるので、このURLへリダイレクトさせるような処理を作ります。

{
  "object": "account_link",
  "created": 1670255389,
  "expires_at": 1670255689,
  "url": "https://connect.stripe.com/setup/s/acct_1032D82eZvK**************vo"
}

出品者側は、この時に自分のStripeアカウントを登録するか、もしくは新規でアカウントを作成し、本人確認や銀行口座の情報などを入力します。

ダイレクト支払いとディスティネーション支払いの違い

金の流れが変わるだけで、仕組みそのものはほぼ同じです。

非常にざっくりした解説になるのですが、ダイレクト払いの場合は、支払い発生時に先に出品者に対する支払いが行われ、サイト側には残りの金額が入金されます。

逆にディスティネーション支払いでは、先にサイト側への支払いが行われ、残りの利益が出品者側に入金されます。