このガイドでは、決済を受け付け、売上をサービスプロバイダーや売り手の銀行口座に移動する方法を説明します。デモンストレーションでは、住宅所有者と賃貸物件を探す人を結びつける賃貸住宅のマーケットプレイスを構築します。また、テナント (顧客) から支払いを受け付け、住宅所有者 (プラットフォームのユーザー) に支払う方法についても説明します。
前提条件 プラットフォームを登録 します。ビジネスの詳細を追加して、本番環境利用の申請 を行います。 プラットフォームプロフィールを完成 させます。ブランド設定をカスタマイズ します。ビジネス名、アイコン、ブランドカラーを追加します。Stripe の公式ライブラリをインストールし、アプリケーションから API にアクセスします。
売り手または代行業者がプラットフォームに登録したら、それらを表す 連結アカウント を作成します。連結アカウントを使用すると売り手の識別情報を収集し、売り手の決済を受け付け、売上を売り手の銀行口座に移動できます。住宅賃貸の例では、連結アカウントは住宅所有者を表します。
/v2/core/accounts
API を使用して 連結アカウントのダッシュボードと責任 を指定して連結アカウントを 作成 します。
curl -X POST https://api.stripe.com/v2/core/accounts \
-H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2
" \
-H "Stripe-Version: 2025-08-27.preview" \
- -json '{
"contact_email" : "furever_contact@example.com" ,
"display_name" : "Furever" ,
"defaults" : {
"responsibilities" : {
"fees_collector" : "application" ,
"losses_collector" : "application"
}
},
"dashboard" : "express" ,
"identity" : {
"business_details" : {
"registered_name" : "Furever"
},
"country" : "us" ,
"entity_type" : "company"
},
"configuration" : {
"merchant" : {
"capabilities" : {
"card_payments" : {
"requested" : true
}
}
},
"recipient" : {
"capabilities" : {
"stripe_balance" : {
"stripe_transfers" : {
"requested" : true
}
}
}
}
},
"include" : [
"configuration.merchant" ,
"configuration.recipient" ,
"identity" ,
"requirements"
]
}'
連結アカウントの情報をすでに収集している場合は、Account
オブジェクトにその情報を事前入力できます。個人情報や事業情報、外部のアカウント情報など、あらゆるアカウント情報を事前に入力できます。
Connect アカウント登録で、事前入力された情報が要求されることはありません。ただし、アカウント所有者は Connect 利用規約 に同意する前に、事前入力された情報を確認するよう求められます。
実装内容をテストする場合、テストデータ を使用してアカウント情報を事前入力します。
アカウントリンクを作成する 以下のパラメーターを使用して Account Links v2 API を呼び出すことでアカウントリンクを作成できます。
account
refresh_ url
return_ url
type
= account_ onboarding
configurations
= recipient
と merchant
curl -X POST https://api.stripe.com/v2/core/account_links \
-H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2
" \
-H "Stripe-Version: 2025-08-27.preview" \
- -json '{
"account" : "{{CONNECTED_ACCOUNT_ID}}"
,
"use_case" : {
"type" : "account_onboarding" ,
"account_onboarding" : {
"configurations" : [
"recipient" ,
"merchant"
],
"refresh_url" : "https://example.com/reauth " ,
"return_url" : "https://example.com/return "
}
}
}'
ユーザーをアカウントリンク URL にリダイレクトする アカウントリンク作成レスポンスには url
値が含まれます。アプリケーションでユーザーを認証したら、この URL にリダイレクトしてフローに送ります。アカウントリンク URL は連結アカウントユーザーの個人情報へのアクセスを許可するため、一時的な 1 回限りの使用です。情報を事前入力する場合は、アカウントリンクを生成する前に入力する必要があります。アカウントリンクの作成後は連結アカウントの情報の読み取りまたは書き込みができなくなります。
セキュリティのヒント アカウントリンクの URL をメールやショートメッセージ、またはその他の方法で、プラットフォームのアプリケーション外に送信しないでください。URL は、アプリケーション内で認証済みのアカウント所有者に提供してください。
import UIKit
import SafariServices
let BackendAPIBaseURL : String = ""
class ConnectOnboardViewController : UIViewController {
override func viewDidLoad ( ) {
super . viewDidLoad ( )
let connectWithStripeButton = UIButton ( type : . system )
connectWithStripeButton . setTitle ( "Connect with Stripe" , for : . normal )
connectWithStripeButton . addTarget ( self , action : # selector ( didSelectConnectWithStripe ) , for : . touchUpInside )
view . addSubview ( connectWithStripeButton )
}
@objc
func didSelectConnectWithStripe ( ) {
if let url = URL ( string : BackendAPIBaseURL ) ? . appendingPathComponent ( "onboard-user" ) {
var request = URLRequest ( url : url )
request . httpMethod = "POST"
let task = URLSession . shared . dataTask ( with : request ) { ( data , response , error ) in
guard let data = data ,
let json = try ? JSONSerialization . jsonObject ( with : data , options : [ ] ) as ? [ String : Any ] ,
let accountURLString = json [ "url" ] as ? String ,
let accountURL = URL ( string : accountURLString ) else {
}
let safariViewController = SFSafariViewController ( url : accountURL )
safariViewController . delegate = self
DispatchQueue . main . async {
self . present ( safariViewController , animated : true , completion : nil )
}
}
}
}
}
extension ConnectOnboardViewController : SFSafariViewControllerDelegate {
func safariViewControllerDidFinish ( _ controller : SFSafariViewController ) {
}
}
Connect アカウント登録では return_ url
と refresh_ url
の両方を渡して、アカウントユーザーがプラットフォームにリダイレクトされるすべてのケースを処理する必要があります。
注 テスト環境 (例えば、ローカルホストでテストする場合など) では return_ url
と refresh_ url
に HTTP を使用できますが、本番環境で使用できるのは HTTPS のみです。本番移行前に必ずテスト用の URL を HTTPS の URL に入れ替えます。
return_url 連結アカウントユーザーがアカウント登録フローを完了すると、Stripe はこの URL へのリダイレクトを実行します。ただしこれはすべての情報が収集されたことを意味するものでも、アカウントの要件がすべて満たされたことを意味するものでもありません。ユーザーがフローに正常に入りそこから正常に出たことのみを意味します。
この URL を通じて状態は渡されません。ユーザーが return_ url
にリダイレクトされたら、以下のいずれかを行いアカウントの要件の状態を確認します。
v2. core. account[requirements]. updated
Webhook をリッスンします。Accounts v2 API を呼び出し、返されたオブジェクトを検査します。refresh_url 以下のケースでは、Stripe はユーザーを refresh_ url
にリダイレクトします。
リンクの期限が切れている (リンク作成後、数分が経過した)。 ユーザーがすでに URL にアクセスしている (ユーザーがページを更新したか、ブラウザーで戻るボタンまたは進むボタンをクリックした)。 プラットフォームがアカウントにアクセスできなくなった。 アカウントが拒否された。 サーバーで同じパラメーターを使用して Account Links v2 を再度呼び出すメソッドをトリガーし、ユーザーを新しいリンクにリダイレクトするように refresh_ url
ページを設定します。
アカウント登録を完了していないユーザーを処理する return_ url
にリダイレクトされたユーザーがアカウント登録プロセスを完了していない可能性があります。/v2/core/accounts
エンドポイントを使用してユーザーのアカウントを取得し configuration.recipient.capabilities.stripe_balance.stripe_transfers.status が active
かどうかを確認します。ステータスが active
ではなく configuration.recipient.capabilities.stripe_balance.stripe_transfers.status_details.code が requirements_ past_ due
の場合は UI プロンプトを表示してユーザーが新しいアカウントリンクを使用してアカウント登録を続行できるようにします。必要に応じて他のコードも処理します。
支払い方法の設定 を表示し、サポートする支払い方法を有効にします。カード支払い、Google Pay、Apple Pay はデフォルトで有効化されていますが、支払い方法は必要に応じて有効または無効に設定できます。
決済フォームを表示する前に、Stripe は通貨、支払い方法の制約、その他のパラメーターを評価し、対応する支払い方法のリストを決定します。購入完了率の向上につながり、通貨と顧客の場所に最も関連性の高い支払い方法が優先的に表示されます。優先度の低い支払い方法は、オーバーフローメニューの下に隠れた状態になります。
Stripe Checkout を使用して決済を受け付けます。Checkout は複数の支払い方法に対応し、顧客に最適な方法を自動的に表示します。Stripe がオンラインで提供するページを使用して Checkout で決済を受け付けるか、事前構築済みのオンライン支払いフォームを自社のウェブサイトに直接追加することができます。また、(Payment Element を使用して) カスタムフローを構築して、1 回のフロンドエンド実装で複数の支払い方法を受け付けることも可能です。
Checkout セッションを作成する クライアントおよびサーバー Checkout セッションは、ラインアイテム、注文金額と通貨、および受け付け可能な支払い方法など、Stripe のオンライン決済ページで顧客に表示する内容を制御します。
サーバー側のエンドポイントを呼び出して Checkout セッションを作成する購入ボタンをウェブサイトに追加します。
< html >
< head >
< title > Checkout </ title >
</ head >
< body >
< form action = "/create-checkout-session" method = "POST" >
< button type = "submit" > Checkout </ button >
</ form >
</ body >
</ html >
サーバー側で、Stripe の API に以下の呼び出しを行います。Checkout セッションを作成したら、レスポンスで返された URL に顧客をリダイレクトします。
curl https://api.stripe.com/v1/checkout/sessions \
-u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
:" \
-d mode = payment \
-d "line_items[0][price]" = \
-d "line_items[0][quantity]" = 1 \
-d "payment_intent_data[application_fee_amount]" = 123 \
-d "payment_intent_data[transfer_data][destination]" = "{{CONNECTED_ACCOUNT_ID}}"
\
- -data -urlencode success_url = "https://example.com/success " \
- -data -urlencode cancel_url = "https://example.com/cancel "
line_ items
: この引数は、顧客が購入しようとしているアイテムを表します。このアイテムは Stripe がオンラインで提供するユーザーインターフェイスに表示されます。success_ url
: この引数は、支払いを完了したユーザーのリダイレクト先を示します。cancel_ url
: この引数は、キャンセルをクリックしたユーザーのリダイレクト先を示します。payment_ intent_ data[application_ fee_ amount]
: この引数は、プラットフォームが取引で受け取る予定の金額を指定します。支払いがキャプチャーされると、プラットフォームから、transfer_ data[destination]
で指定された連結アカウントに支払い金額の全額が即時送金されます。その後 application_ fee_ amount
がプラットフォームに返金され、プラットフォームの金額から Stripe 手数料が差し引かれます。payment_ intent_ data[transfer_ data][destination]
: この引数は、支払いがデスティネーション支払い であることを示します。デスティネーション支払いでは、支払いがプラットフォームで処理され、売上が即時かつ自動的に連結アカウントの保留中の残高に送金されます。賃貸住宅の例では、顧客がプラットフォームを使用して支払い、住宅所有者がプラットフォームで支払いを受ける機能を構築します。Checkout では、デスティネーション支払いにプラットフォームアカウントのブランド設定を使用します。詳細については、ブランディングをカスタマイズする をご覧ください。
このセッションは、デスティネーション支払いを作成します。送金のタイミングを管理したり、1 回の支払いの売上を複数の当事者に送金したりする必要がある場合は、代わりに、支払いと送金別方式を使用してください。支払いと送金別方式を使用する場合は、連結アカウントによる支払いの受け付けを有効化する 方法をご覧ください。
支払い後のイベントを処理する サーバー側 支払いが完了すると Stripe は checkout.session.completed イベントを送信します。Webhook を使用してこのイベントを受信 し、顧客への注文確認メールの送信、データベースへの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックの実行前に顧客がブラウザーのウィンドウを閉じたり、アプリケーションを終了したりする可能性があります。また、一部の支払い方法では支払いの確定までに 2 ~ 14 日かかることがあります。実装で非同期イベントをリッスンするように設定すると、1 つの実装で複数の支払い方法 に対応できるようになります。
Checkout で支払いを回収するときは、checkout. session. completed
イベントの処理に加えて、以下の 2 つのイベントも処理することをお勧めします。
これらのイベントのすべてに、Checkout Session (Checkout セッション) オブジェクトが含まれています。支払いが成功すると、基となる PaymentIntent のステータスが processing
から succeeded
に変わります。
アカウントを作成 し、OAuth を使用 して、アカウント作成フローをテストします。
カード番号 シナリオ テスト方法 4242 4242 4242 4242 カード支払いは成功し、認証は必要とされません。 クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 4000 0025 0000 3155 カード支払いには認証 が必要です。 クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 4000 0000 0000 9995 カードは、insufficient_ funds
などの拒否コードで拒否されます。 クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 6205 5000 0000 0000 004 UnionPay カードは、13 ~ 19 桁の可変長です。 クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。
実装内容をテストするためのその他の情報については、テスト をご覧ください。