Stripe サンドボックスで Connect のテストを完結させる方法
この記事はJP_Stripes Advent Calendar 2024の2日目の記事です。
現在 Stripe サンドボックスの Insider Preview 中です。
サンドボックスは、ざっくり言えば、通常の Stripe アカウント内にテスト用の隔離環境(別アカウント)を作成できる機能です。新しくアカウントを作成する場合に比べて、
- 本番の決済の用途には利用できない(間違えて Live API キーで接続してしまうことがない)
- テスト情報を利用してアカウント作成ができるので、アカウント作成が簡便
- 元アカウントの設定がコピーされるので、再設定の手間がない
- 本アカウント内にネストされた形で表示されるので、アカウントリストが増えたりログインクレデンシャルの管理が簡便
といったメリットがあります。
Stripe Connect のテストを実施する
Stripe Connect は、マーケットビジネスなど、複数の加盟店が顧客とやり取りをするプラットフォームを作ることができるサービスです。大別して Express と Standard があり、弊社では Standard を利用しています(以降 Standard についての記述となります)。
Stripe Connect (Standard) を利用するためには、プラットフォーム側のアカウントと連結アカウント、つまり「送り手」と「受け手」の2つのアカウントが必要になります。また、プラットフォーム側のアカウントは常に一つですが、連結アカウントは複数作成することができます。
私たちは以前からテスト用に2つの別アカウント(完全に切り離されたアカウント)を所有しており、片方をプラットフォームアカウント、もう片方を連結アカウントに設定して E2E テスト等を動作させていました。しかし今後さらにテスト用アカウントが必要になったとき、ログインクレデンシャルの管理等が煩雑になるだろうなということが容易に想像できました。
↑サンドボックス利用前
そんなときに Stripe サンドボックスの Insider Preview が始まり、プラットフォームアカウントだけはメインアカウント内のサンドボックス環境に移行しました(こちらの移行は主にクレデンシャルを書き換えるだけで、とても簡単に終わりました)。しかし連結アカウント側はサンドボックス側に移行できずにいました。その理由は、連結アカウントはプラットフォームアカウントのダッシュボードから作成しており、そのときにサンドボックス内に作成するオプションが提供されていないためです。
↑Stripe ダッシュボードの「連結アカウント」のページから作成をしていたが、ここから作成するとサンドボックス内ではなく通常の別の Stripe アカウントになる
そこでどうにか Stripe サンドボックス内に連結アカウントを作成する方法がないかと調べたところ、「既存の Stripe アカウントを連結アカウントにする方法」があるらしく、その方法でサンドボックス内に連結アカウントを作成することができました。
詳しい手順を下記に記します。
Stripe サンドボックス内に連結アカウントを作成する手順
今回は、プラットフォームアカウントと連結アカウントの両方をサンドボックス内に作成してみます。
1. サンドボックス内にプラットフォームアカウントを作成する
ダッシュボードのサンドボックスのページにアクセスし、新しくサンドボックスアカウントを作成します。
今回は platform-account
という名前にしました。
作成すると、サンドボックスアカウントのダッシュボードが表示されます。
2. サンドボックス内に連結アカウント用アカウントを作成する
右上の「サンドボックスを終了」から親アカウントに戻り、手順1と同様にサンドボックス内にアカウントを作成します。
今回は connected-account-1
という名前にしました。
作成したら、次の手順のために手順1で作成した platform-account
のほうに再ログインしておきます。
3. 2つのアカウントを接続する
手順1で作成したアカウントをプラットフォームアカウント、手順2で作成したアカウントを連結アカウントとして、接続します。これには「OAuth 連結フロー」を使用します。
手順1で作成したアカウント(platform-account
)にログインした状態で、 Stripe のドキュメント「プラットフォームが管理する Standard アカウントで OAuth を使用する」に移動すると、「OAuth リンクを作成する」のセクション内に、OAuth リンクの作成方法と、実際に利用可能な OAuth リンクが準備されています。このリンク(もしくは下の方にある「Connect with Stripe」のボタン)をクリックします。
↑どちらかをクリック
すると、連結の確認画面が出ます。
ここで手順2で作成した connected-account-1
を選ぶことができるはずです。選択して「連結する」をクリックします。
ここで各種情報を入力するフォームが入ることがありますが、基本的に最初からサンドボックス用のダミー情報が入力されているので、基本的にそのまま進めばOKです。エラーになる箇所だけ適当に情報を入力します。
また、ここで「セキュリティ・チェックリストに基づく対策措置状況申告書」のフォームが表示された場合は、入力しておくと後で手間が省けます。
最後に下記のような画面でcurlコマンドが表示されるので、このリクエストを実行する必要があります(これを実行しないと連結が完了しないようです)。YOUR_SECRET_KEYを手順1で作成した platform-account
のテスト用シークレットキーに置き換え、curl をそのまま実行します。正常に access_token
等が返却されれば、連結は完了になります。
数分経つと、platform-account
側の連結アカウントダッシュボードに、connected-account-1
が表示されます。
動作確認
下記のような 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
側で連結アカウントをクリックしたときに表示される「ケイパビリティ」で支払いが「無効」になっていることが原因と分かりました。
connected-account-1
側に切り替え、「設定→ビジネス→アカウントのステータス」から、「追加の情報が必要です」となっている部分について情報を入力して完了させます。
また、「ビジネスの詳細」から、「未完了」となっている部分についても全て「編集する」から完了させます。
店舗名等が求められた場合は適当で大丈夫です。(会社名がそもそも「田中株式会社」から変更できなそう)
また「経営と所有権」の「本人確認」については、写真付き身分証が要求されますが、身分証アップロードのダイアログで「テスト文章を使用」をクリックするとテスト用の情報で認証を完了させることができます。
これらが全て完了し、審査が終了すると、ケイパビリティ/アカウントのステータスが「有効」に変わり、Transfer が成功するようになりました。
まとめ
アカウントが増えがちな Stripe Connect 用のテスト用アカウントについて、プラットフォームアカウント/連結アカウントのどちらもサンドボックス内で完結させることができました。サンドボックスアカウントだとビジネス審査や本人確認もテスト情報で進められるので、その点もとてもありがたいですね。