2024-12-01

Stripe サンドボックスで Connect のテストを完結させる方法

この記事はJP_Stripes Advent Calendar 2024の2日目の記事です。

現在 Stripe サンドボックスの Insider Preview 中です。

サンドボックスは、ざっくり言えば、通常の Stripe アカウント内にテスト用の隔離環境(別アカウント)を作成できる機能です。新しくアカウントを作成する場合に比べて、

といったメリットがあります。

Stripe Connect のテストを実施する

Stripe Connect は、マーケットビジネスなど、複数の加盟店が顧客とやり取りをするプラットフォームを作ることができるサービスです。大別して Express と Standard があり、弊社では Standard を利用しています(以降 Standard についての記述となります)。

Stripe Connect (Standard) を利用するためには、プラットフォーム側のアカウントと連結アカウント、つまり「送り手」と「受け手」の2つのアカウントが必要になります。また、プラットフォーム側のアカウントは常に一つですが、連結アカウントは複数作成することができます。

私たちは以前からテスト用に2つの別アカウント(完全に切り離されたアカウント)を所有しており、片方をプラットフォームアカウント、もう片方を連結アカウントに設定して E2E テスト等を動作させていました。しかし今後さらにテスト用アカウントが必要になったとき、ログインクレデンシャルの管理等が煩雑になるだろうなということが容易に想像できました。

前の様子

サンドボックス利用前

そんなときに Stripe サンドボックスの Insider Preview が始まり、プラットフォームアカウントだけはメインアカウント内のサンドボックス環境に移行しました(こちらの移行は主にクレデンシャルを書き換えるだけで、とても簡単に終わりました)。しかし連結アカウント側はサンドボックス側に移行できずにいました。その理由は、連結アカウントはプラットフォームアカウントのダッシュボードから作成しており、そのときにサンドボックス内に作成するオプションが提供されていないためです。

Image

Stripe ダッシュボードの「連結アカウント」のページから作成をしていたが、ここから作成するとサンドボックス内ではなく通常の別の Stripe アカウントになる

そこでどうにか Stripe サンドボックス内に連結アカウントを作成する方法がないかと調べたところ、「既存の Stripe アカウントを連結アカウントにする方法」があるらしく、その方法でサンドボックス内に連結アカウントを作成することができました。

詳しい手順を下記に記します。

Stripe サンドボックス内に連結アカウントを作成する手順

今回は、プラットフォームアカウントと連結アカウントの両方をサンドボックス内に作成してみます。

1. サンドボックス内にプラットフォームアカウントを作成する

ダッシュボードのサンドボックスのページにアクセスし、新しくサンドボックスアカウントを作成します。

Image

Image

今回は platform-account という名前にしました。

作成すると、サンドボックスアカウントのダッシュボードが表示されます。

2. サンドボックス内に連結アカウント用アカウントを作成する

右上の「サンドボックスを終了」から親アカウントに戻り、手順1と同様にサンドボックス内にアカウントを作成します。

Image

今回は connected-account-1 という名前にしました。

作成したら、次の手順のために手順1で作成した platform-account のほうに再ログインしておきます。

3. 2つのアカウントを接続する

手順1で作成したアカウントをプラットフォームアカウント、手順2で作成したアカウントを連結アカウントとして、接続します。これには「OAuth 連結フロー」を使用します。

手順1で作成したアカウント(platform-account)にログインした状態で、 Stripe のドキュメント「プラットフォームが管理する Standard アカウントで OAuth を使用する」に移動すると、「OAuth リンクを作成する」のセクション内に、OAuth リンクの作成方法と、実際に利用可能な OAuth リンクが準備されています。このリンク(もしくは下の方にある「Connect with Stripe」のボタン)をクリックします。

Image

どちらかをクリック

すると、連結の確認画面が出ます。

Image

ここで手順2で作成した connected-account-1 を選ぶことができるはずです。選択して「連結する」をクリックします。

ここで各種情報を入力するフォームが入ることがありますが、基本的に最初からサンドボックス用のダミー情報が入力されているので、基本的にそのまま進めばOKです。エラーになる箇所だけ適当に情報を入力します。

また、ここで「セキュリティ・チェックリストに基づく対策措置状況申告書」のフォームが表示された場合は、入力しておくと後で手間が省けます。

最後に下記のような画面でcurlコマンドが表示されるので、このリクエストを実行する必要があります(これを実行しないと連結が完了しないようです)。YOUR_SECRET_KEYを手順1で作成した platform-account のテスト用シークレットキーに置き換え、curl をそのまま実行します。正常に access_token 等が返却されれば、連結は完了になります。

Image

数分経つと、platform-account 側の連結アカウントダッシュボードに、connected-account-1 が表示されます。

Image

動作確認

下記のような JavaScript コードで実験できます。

import Stripe from 'stripe';

const stripe = new Stripe('...');

await stripe.transfers.create({
  amount: '1000',
  currency: 'JPY',
  destination: 'acct_xxxxxxxx', // `connected-account-1` 側のアカウントID
});

transfers_not_allowed エラーが出て Transfer が作成できない場合

下記のようなエラーが出て Transfer が作成できず、しばらくハマっていました。

transfers_not_allowed Cannot create transfers; please contact us via https://support.stripe.com/contact with details for assistance

サポートに問い合わせろと書いてあるのでサポートに問い合わせた結果、いくつか原因となりうる条件について教えていただき、そのうち自分の場合は platform-account 側で連結アカウントをクリックしたときに表示される「ケイパビリティ」で支払いが「無効」になっていることが原因と分かりました。

Image

connected-account-1 側に切り替え、「設定→ビジネス→アカウントのステータス」から、「追加の情報が必要です」となっている部分について情報を入力して完了させます。

Image

また、「ビジネスの詳細」から、「未完了」となっている部分についても全て「編集する」から完了させます。

Image

店舗名等が求められた場合は適当で大丈夫です。(会社名がそもそも「田中株式会社」から変更できなそう)

Image

また「経営と所有権」の「本人確認」については、写真付き身分証が要求されますが、身分証アップロードのダイアログで「テスト文章を使用」をクリックするとテスト用の情報で認証を完了させることができます。

Image

これらが全て完了し、審査が終了すると、ケイパビリティ/アカウントのステータスが「有効」に変わり、Transfer が成功するようになりました。

Image

まとめ

アカウントが増えがちな Stripe Connect 用のテスト用アカウントについて、プラットフォームアカウント/連結アカウントのどちらもサンドボックス内で完結させることができました。サンドボックスアカウントだとビジネス審査や本人確認もテスト情報で進められるので、その点もとてもありがたいですね。