支払いと送金別方式を作成する
プラットフォームアカウントで支払いを作成し、複数の連結アカウントに売上を送金できます。
「支払いと送金を別々」に作成して、1 つの支払いから複数の連結アカウントに資金を送金する場合や、支払い時に特定のユーザーが不明な場合に送金します。プラットフォームアカウントへの支払いは、連結アカウントへの送金から切り離されます。この支払いタイプでは、次のようになります。
- プラットフォームのアカウントで支払いを作成し、売上を連結アカウントに送金します。この支払いは、ご自身のアカウントでの支払いとして表示され、さらに連結アカウントへの送金も表示されます (金額はご自身で決定します)。この金額はアカウント残高から引き落とされます。
- 複数の連結アカウントに売上を送金できます。
- Stripe の手数料、返金、チャージバックは、お客様のアカウント残高から引き落とされます。
この決済方式は、マーケットプレイスが複数の当事者間で決済を分割するのに役立ちます。例えば、レストランと配達員の間で決済を分割するレストラン配達プラットフォームなどです。
Stripe は以下の国で、支払いと送金別方式に対応しています。
注
資金分離 は、連結アカウントに送金する前に決済資金を保護された保留状態に保つプライベートプレビュー機能です。これにより、割り当て資金が無関係なプラットフォーム運営に使用されることを防ぎます。アクセスをリクエストするには、Stripe アカウントマネージャーにお問い合わせください。
Stripe は、以下の地域で支払いと送金別方式に対応しています。
多くの場合、プラットフォームと連結アカウントは同じ地域に所在している必要があります。許可されていない越境送金を試みると、エラーが返されます。複数地域間での送金のサポートについては、越境送金をご覧ください。送金は、支払い、トップアップ、手数料の許可されたユースケースと併用する場合にのみ利用できます。Express ダッシュボードにアクセスできる連結アカウント、またはダッシュボードにアクセスできない連結アカウントは、支払いと送金別方式を利用することをお勧めします。

この組み込みによって、支払うために必要なすべてのステップ (支払い詳細の収集と支払いの確定) が、お客様のアプリに表示される単一の画面にまとめられます。
Stripe を設定するサーバー側クライアント側
まず、Stripe アカウントが必要です。今すぐ登録してください。
サーバー側
この接続方法では、Stripe API と通信するエンドポイントがサーバー上に必要です。サーバーから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
クライアント側
React Native SDK はオープンソースであり、詳細なドキュメントが提供されています。内部では、ネイティブの iOS および Android の SDK を使用します。Stripe の React Native SDK をインストールするには、プロジェクトのディレクトリーで (使用するパッケージマネージャーによって異なる) 次のいずれかのコマンドを実行します。
次に、その他の必要な依存関係をインストールします。
- iOS の場合は、ios ディレクトリに移動して
pod install
を実行し、必要なネイティブ依存関係もインストールします。 - Android の場合は、依存関係をインストールする必要はありません。
注
公式の TypeScript ガイドに従って TypeScript のサポートを追加することをお勧めします。
Stripe の初期化
React Native アプリで Stripe を初期化するには、決済画面を StripeProvider
コンポーネントでラップするか、initStripe
初期化メソッドを使用します。publishableKey
の API 公開可能キーのみが必要です。次の例は、StripeProvider
コンポーネントを使用して Stripe を初期化する方法を示しています。
import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }
エンドポイントを追加するサーバー側
この接続方法では、以下の 3 つの Stripe API オブジェクトを使用します。
- PaymentIntent (支払いインテント)。Stripe はこれを使用して、顧客から支払いを回収する意図を示し、プロセス全体を通して支払いの試行と支払い状態の変化を追跡します。
- Customer (顧客) (オプション)。将来の支払いに備えて支払い方法を設定するには、支払い方法を Customer に関連付ける必要があります。顧客がビジネスでアカウントを作成する際に、Customer オブジェクトを作成します。顧客がゲストとして支払いを行う場合は、支払いの前に Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントを表す自社の内部表現と関連付けることができます。
- Customer Ephemeral Key (顧客の一時キー) (オプション)。Customer オブジェクトの情報は機密情報であるため、アプリから直接取得することはできません。Ephemeral Key により、SDK に Customer への一時的なアクセス権が付与されます。
カードを保存して、保存されたカードの再利用をリピート顧客に許可する場合は、構築されたシステムの Customer オブジェクトおよび Customer Ephemeral Key オブジェクトが必要です。許可しない場合は、これらのオブジェクトを省略できます。
セキュリティ上の理由により、アプリでこれらのオブジェクトを作成することはできません。代わりに、サーバー側で以下を行うエンドポイントを追加します。
- Customer を取得するか、新規作成する。
- Customer の一時キーを作成する。
- サーバーで、amount (金額)、currency (通貨)、customer (顧客)、および transfer group (送金グループ) を指定して、PaymentIntent を作成します。
- PaymentIntent の client secret、一時キーの
secret
、Customer ID (顧客 ID)、および貴社の公開可能キーをアプリに返します。
購入プロセスで顧客に表示される支払い方法は、PaymentIntent にも含まれています。Stripe によってダッシュボードの設定から支払い方法を取得することも、手動でリスト化することもできます。
貴社の構築済みのシステムで支払い方法の提供にコードベースのオプションを必要とする場合を除き、支払い方法を手動でリスト化しないでください。Stripe は通貨、支払い方法の制約、その他のパラメーターを評価し、対応可能な支払い方法のリストを決定します。購入完了率の上昇につながり、使用通貨と顧客の所在地に最も適した支払い方法を優先的に表示します。一方、優先度の低い支払い方法は、オーバーフローメニューに隠された状態になります。
決済画面を導入するクライアント側
決済ページでは、モバイル決済 Element を表示する前に以下を実行する必要があります。
- 購入商品と合計金額を表示する
- 必要な配送先情報を収集する
- Stripe の UI を表示する決済ボタンを含める
アプリの決済フローで、前のステップで作成したバックエンドのエンドポイントにネットワークリクエストを送信し、useStripe
フックから initPaymentSheet
を呼び出します。
export default function CheckoutScreen() { const { initPaymentSheet, presentPaymentSheet } = useStripe(); const [loading, setLoading] = useState(false); const fetchPaymentSheetParams = async () => { const response = await fetch(`${API_URL}/payment-sheet`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); const { paymentIntent, ephemeralKey, customer } = await response.json(); return { paymentIntent, ephemeralKey, customer, }; }; const initializePaymentSheet = async () => { const { paymentIntent, ephemeralKey, customer, } = await fetchPaymentSheetParams(); const { error } = await initPaymentSheet({ merchantDisplayName: "Example, Inc.", customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, // Set `allowsDelayedPaymentMethods` to true if your business can handle payment //methods that complete payment after a delay, like SEPA Debit and Sofort. allowsDelayedPaymentMethods: true, defaultBillingDetails: { name: 'Jane Doe', } }); if (!error) { setLoading(true); } }; const openPaymentSheet = async () => { // see below }; useEffect(() => { initializePaymentSheet(); }, []); return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
顧客が決済ボタンをタップしたら、presentPaymentSheet()
を呼び出して画面を表示します。顧客が支払いを完了すると、この画面は閉じ、オプションの StripeError<PaymentSheetError>
とともに promise が解決されます。
export default function CheckoutScreen() { // continued from above const openPaymentSheet = async () => { const { error } = await presentPaymentSheet(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert('Success', 'Your order is confirmed!'); } }; return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
エラーがない場合は、ユーザーに完了したことを伝えます (注文確認画面を表示するなど)。
allowsDelayedPaymentMethods
を true に設定すると、アメリカの銀行口座などの 遅延通知型の支払い方法を使用できます。これらの支払い方法では、PaymentSheet
が完了した時点では最終的な支払いステータスが判明せず、後になって成功または失敗が確定します。このようなタイプの支払い方法に対応する場合は、注文が確定済みであることを顧客に通知し、支払いが成功した場合にのみ注文のフルフィルメント (商品の発送など) を実行するようにします。
戻り先 URL を設定する (iOS のみ)クライアント側
顧客はお客様のアプリから離れて、(Safari やバンキングアプリなどで) 認証する場合があります。ユーザーが認証後にアプリに自動的に戻れるようにするには、カスタム URL スキームを構成し、URL を SDK に転送するようにアプリのデリゲートを設定します。Stripe はユニバーサルリンクには対応していません。
さらに、PaymentSheet.Configuration オブジェクトの returnURL をアプリの URL に設定します。
var configuration = PaymentSheet.Configuration() configuration.returnURL = "your-app://stripe-redirect"
支払い後のイベントを処理する
支払いが完了すると、Stripe は payment_intent.succeeded イベントを送信します。ダッシュボードの Webhook ツールを使用するか Webhook のガイドに従ってこれらのイベントを受信し、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアントでは、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了する場合、また悪意を持つクライアントがレスポンスを不正操作する場合もあります。非同期型のイベントをリッスンするよう組み込みを設定すると、単一の組み込みで複数の異なるタイプの支払い方法を受け付けることができます。
Payment Element を使用して支払いを回収する場合は、payment_
イベントのほかにこれらのイベントを処理することをお勧めします。
イベント | 説明 | アクション |
---|---|---|
payment_intent.succeeded | 顧客が正常に支払いを完了したときに送信されます。 | 顧客に注文の確定を送信し、顧客の注文のフルフィルメントを実行します。 |
payment_intent.processing | 顧客が正常に支払いを開始したが、支払いがまだ完了していない場合に送信されます。このイベントは、多くの場合、顧客が口座引き落としを開始するときに送信されます。その後、payment_ イベント、また、失敗の場合は payment_ イベントが送信されます。 | 顧客に注文確認メールを送信し、支払いが保留中であることを示します。デジタル商品では、支払いの完了を待たずに注文のフルフィルメントを行うことが必要になる場合があります。 |
payment_intent.payment_failed | 顧客が支払いを試みたが、支払いに失敗する場合に送信されます。 | 支払いが processing から payment_ に変わった場合は、顧客に再度支払いを試すように促します。 |
送金を作成するサーバー側
サーバーで、Transfer (送金) を作成し、使用する transfer_
を指定することで、アカウントから連結アカウントに送金します。
送金額と支払い金額が一致している必要はありません。1 回の支払いを複数の送金に分割したり、複数の支払いを 1 回の送金に含めることができます。以下の例では、同じ transfer_
に関連付けられた追加の送金を作成しています。
送金オプション
transfer_
文字列には任意の値を指定できますが、1 つのビジネスアクションを示す必要があります。また、関連する支払いや transfer_
の指定がない送金を作成することもできます。これはたとえば、プロバイダーに支払いをする必要があるが、それに関連付けられた顧客の支払いがない場合などです。
注
transfer_
は、関連付けられているオブジェクトのみを識別します。標準の機能は影響を受けません。関連する支払いの資金が利用可能になる前に送金されないようにするには、送金の source_
属性を使用します。
デフォルトでは、金額がプラットフォームのアカウントの利用可能残高を超えていると送金リクエストが失敗します。Stripe は、失敗した送金リクエストを自動的に再試行しません。
支払いに関連付けられている送金の送金リクエストが失敗しないようにします。関連する支払いを送金の source_transaction として指定すると、送金リクエストは自動的に成功します。ただし、Stripe はその支払いの資金がプラットフォームアカウントで利用可能になるまで送金を実行しません。
注
支払いと送金別方式を使用する場合は、入金スケジュールを計画する際に考慮が必要です。自動入金は、source_
が定義されていない送金に支障をきたす場合があります。
実装内容をテストする
実装内容をテストするためのその他の情報については、テストをご覧ください。
売上処理加盟店を指定する
売上処理加盟店は、アカウントに設定されたケイパビリティと支払いの作成方法によって決まります。売上処理加盟店は、支払いの作成に誰の情報を使用するかを決定します。これには、その支払いに使用される顧客のクレジットカードまたは銀行口座の明細に表示される明細書表記 (プラットフォームまたは連結アカウントのもの) が含まれます。
売上処理加盟店を指定することにより、誰に対して支払いを作成するかをより明確にすることができます。たとえば、一部のプラットフォームは最終顧客がプラットフォーム (オンデマンドプラットフォームなど) と直接やり取りすることを理由として、売上処理加盟店となることを希望します。ただし、これと異なり最終顧客と直接やり取りする連結アカウントが存在するプラットフォームもあります (E コマースプラットフォーム上のストアなど)。こうしたシナリオでは、連結アカウントを売上処理加盟店にするのが合理的です。
連結アカウントの ID に on_
パラメーターを設定して、そのアカウントを支払いの売上処理加盟店にすることができます。on_
を使用すると、以下のようになります。
- 連結アカウントの国と売上処理通貨を使用して、支払いが売上として処理されます。
- 連結アカウントの国の手数料体系が使用されます。
- 連結アカウントの明細書表記が顧客のクレジットカード明細書に表示されます。
- 連結アカウントがプラットフォームと異なる国に所在する場合、連結アカウントの住所と電話番号が顧客のクレジットカード明細書に表示されます。
- 入金前の保留中の残高が保持される日数は、連結アカウントの delay_days 設定によって異なります。
on_
が省略された場合、プラットフォームが取引に関する金銭的責任を負います。
注意
on_
パラメーターは、card_payments などの支払いケイパビリティを持つ連結アカウントのみで利用できます。受取人利用規約 が適用されているアカウントは、card_
やその他の支払いケイパビリティをリクエストできません。
手数料を回収する
支払いと送金別方式を使用する場合、プラットフォームは、宛先アカウントに送金する金額を減らすことで、支払いの手数料を回収できます。レストランと運転手への支払いを行うレストランのデリバリーサービス取引の例を考えてください。
- 顧客は 100 USD を支払います。
- Stripe は、3.20 USD の手数料を回収して、残りの 96.80 USD をプラットフォームアカウントの保留中の残高に加算します。
- プラットフォームは、レストランの連結アカウントに 70 USD を送金して、運転手の連結アカウントに 20 USD を送金します。
- 6.80 USD のプラットフォーム手数料がプラットフォームアカウントに残されます。
資金分離でのプラットフォーム手数料
資金分離 は、送金時に割り当て資金から直接プラットフォーム手数料を引き落とし、明確な会計分離を提供するプライベートプレビュー機能です。アクセスをリクエストするには、Stripe アカウントマネージャーにお問い合わせください。

Connect を使用した複数通貨での支払いの処理について、詳細は複数通貨の処理をご覧ください。
送金可能な金額
デフォルトの動作では、プラットフォームアカウントの利用可能残高から送金が行われます。利用可能残高を超える送金を試行すると、エラーが発生して失敗します。この問題を回避するには、送金を作成するときに source_
パラメーターに支払い ID を指定することで、既存の支払いに関連付けます。source_
を指定すると、関連する支払いがまだ売上処理されていない場合でも、送金リクエストは残高に関係なく成功を返します。ただし、関連する支払いの資金がプラットフォームアカウントの送金に利用できるようになるまで、入金先口座でも資金を利用できません。
資金分離での送金
プライベート プレビュー 資金分離 機能では、割り当て資金からの送金が元の決済にリンクされるよう、source_
パラメーターが必要です。
注
プラットフォームの残高不足のために送金が失敗した場合、資金を追加しても、失敗したアクションが自動的に再試行されることはありません。資金を追加した後に、失敗した送金または入金を繰り返す必要があります。
元の支払いに transfer_
値が指定されている場合、Stripe は、同じ値を送金の transfer_
に割り当てます。そうでない場合は、Stripe は、group_
と関連する PaymentIntent ID の形式 (例: group_
) で文字列を生成します。この文字列は、支払いと送金の両方の transfer_
として割り当てられます。
注
送金の作成時に source_
を指定する必要があります。この属性は後で更新できません。
PaymentIntent から支払い ID を取得できます。
- PaymentIntent の latest_charge 属性を取得します。この属性は、PaymentIntent に関連付けられた最新の支払いの ID です。
- リクエストで
payment_
を指定して支払いのリストをリクエストします。この方法では、PaymentIntent に関連付けられているすべての支払いの詳細なデータが返されます。intent
このパラメータを使用するときは、以下のことを確認してください。
- 送金金額は、元の支払いの金額を超えることはできません
- 送金の合計が元の支払いを超えない限り、同じ
source_
で複数の送金を作成できますtransaction - 送金により、関連する支払いが保留状態になります。支払いからの売上が N 日後に利用可能になるとすると、送金先 Stripe アカウントが送金から受け取る支払いも N 日後に利用可能になります。
- Stripe は自動的に
transfer_
を作成しますgroup - 支払いに関連付けられている取引残高の通貨は、送金の通貨と同じである必要があります
ACH などの非同期の支払い方法が、後続の送金リクエストの実行後に失敗する場合があります。これらの支払いでは、source_
を使用しないでください。代わりに、charge.succeeded イベントがトリガーされるまで待ち、その後で売上を送金するようにしてください。これらの支払いで source_
を使用する必要がある場合は、支払いの失敗を管理する機能を実装する必要があります。
source_
として使用される支払いが失敗すると、プラットフォームのアカウント残高からの売上が連結アカウントに送金され、支払いを補填します。これらの売上を回収するには、失敗した source_
に関連する送金を差戻しします。
返金する
プラットフォームで作成された支払いは、シークレットキーを使用して返金できます。ただし、支払いの返金は関連するどの送金にも影響しません。以降の送金額の減額、または送金の差戻しによって返金される金額の調整はプラットフォームの責任で行います。
資金分離での返金
プライベート プレビュー 資金分離 機能は、プラットフォームでの決済残高を引き落とす前に返金に割り当て資金を使用し、明確な会計分離を提供します。
送金を差戻す
Connect は、連結アカウントに対して行われた送金の全額または一部金額 (amount
値で指定) を差戻す機能をサポートしています。送金の差戻しは、支払いに関連する返金や不審請求の申請、または送金のミスの修正のみに使用します。
送金差戻しにより、プラットフォームの利用可能残高に指定された金額 (または全額) が戻されて追加され、それに応じて連結アカウントの利用可能残高が減少します。連結アカウントの利用可能残高が差戻し額よりも大きい場合、または連結されたリザーブが有効になっている場合のみ、送金を差戻すことができます。
送金差戻しに通貨の換算が必要な場合、換算後に差戻し額で残高がゼロになるとエラーが返されます。
連結アカウントの返金を無効にしても、送金の差戻し処理機能はブロックされません。