ダイレクト支払いを作成する
顧客が連結アカウントと直接取引を行うときに「ダイレクト支払い」を作成すると、多くの場合、顧客はプラットフォームの存在に気付きません。ダイレクト支払いの特徴は以下のとおりです。
- 支払いはプラットフォームのアカウントではなく、連結アカウントに支払いとして表示されます。
- 連結アカウントの残高は、支払いのたびに増加します。
- アカウント残高は、支払いごとに発生するプラットフォーム手数料により増加します。
この支払いタイプは、SaaS (サービスとしてのソフトウェア) を提供するプラットフォームに最適です。たとえば、Shopify はオンラインストアフロントを構築するためのツールを提供し、Thinkific は教育者がオンラインコースを販売できるようにしています。
Stripe Checkout を使用して、Stripe がオンラインで提供する決済ページにリダイレクトします。この実装と、Stripe の他の実装タイプとの比較をご覧ください。
Checkout セッションを作成するクライアント側サーバー側
A Checkout Session controls what your customer sees in the payment form such as line items, the order amount, and currency. Add a checkout button to your website that calls a server-side endpoint to create a Checkout Session.
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>
サーバー側で Checkout セッションを作成し、レスポンスで返された URL に顧客をリダイレクトします。
curl https://api.stripe.com/v1/checkout/sessions \ -u "
:" \ -H "Stripe-Account:sk_test_4eC39HqLyjWDarjtT1zdp7dc" \ -d "line_items[0][price_data][currency]"=usd \ -d "line_items[0][price_data][product_data][name]"=T-shirt \ -d "line_items[0][price_data][unit_amount]"=1000 \ -d "line_items[0][quantity]"=1 \ -d "payment_intent_data[application_fee_amount]"=123 \ -d mode=payment \ --data-urlencode success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}"{{CONNECTED_ACCOUNT_ID}}
line_items
: この属性は、顧客が購入しようとしているアイテムを表し、Stripe がオンラインで提供する決済ページに表示されます。payment_intent_data[application_fee_amount]
: この属性は、プラットフォームがプラットフォーム手数料として取引から差し引く金額を指定します。連結アカウントで支払いが処理された後、application_fee_amount
がプラットフォームに送金されます。詳細については、手数料の回収をご覧ください。success_url
: Stripe は、顧客が支払いを完了した後に成功時の URL にリダイレクトし、{CHECKOUT_SESSION_ID}
の文字列を Checkout セッションの ID に置き換えます。この ID を使用して Checkout セッションを取得し、ステータスを確認して、顧客に表示する内容を決定してください。自社で使用するクエリパラメーターを追加することもできます。このパラメーターはリダイレクトプロセス全体にわたって存続します。詳細については、Stripe がオンラインで提供するページでリダイレクトの動作をカスタマイズするをご覧ください。Stripe-Account
: このヘッダーは、連結アカウントのダイレクト支払いを示します。Checkout では連結アカウントのブランディングが使用されます。これにより、プラットフォームではなく連結アカウントと直接やり取りしているような印象を顧客に与えることができます。
連結アカウントで直接作成された支払いは、そのアカウントのみに報告されます。プラットフォームのダッシュボードやエクスポートには表示されません。ダイレクト支払いは、プラットフォームで管理される連結アカウントのレポートと Sigma に含まれています。Stripe API を使用することで、いつでもこの情報を取得できます。
支払い後のイベントを処理するサーバー側
支払いが完了すると Stripe は checkout.session.completed イベントを送信します。Webhook を使用してこのイベントを受信し、顧客への注文確認メールの送信、データベースへの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックの実行前に顧客がブラウザーのウィンドウを閉じたり、アプリケーションを終了したりする可能性があります。また、決済手段によっては支払いの確定までに 2 ~ 14 日かかることがあります。自社の構築済みのシステムで非同期イベントをリッスンするように設定すると、一度の導入で複数の決済手段に対応できるようになります。
Checkout で支払いを回収するときは、以下のすべてのイベントを処理することをお勧めします。
イベント | 説明 | 次のステップ |
---|---|---|
checkout.session.completed | 顧客が Checkout フォームを送信して、決済を正常に承認しました。 | 決済の成功または失敗の結果を待ちます。 |
checkout.session.async_payment_succeeded | 顧客の決済が成功しました。 | 購入された商品やサービスのフルフィルメントを行います。 |
checkout.session.async_payment_failed | 何らかの理由により決済が拒否されたか、失敗しました。 | 顧客にメールで連絡して、新たに注文するように依頼します。 |
これらのイベントのすべてに、Checkout Session (Checkout セッション) オブジェクトが含まれています。決済が成功すると、基となる PaymentIntent のステータスが processing
から succeeded
または失敗のステータスに変わります。
実装内容をテストする
カード番号 | シナリオ | テスト方法 |
---|---|---|
カード支払いは成功し、認証は必要とされません。 | クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 | |
カード支払いには認証が必要です。 | クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 | |
カードは、insufficient_funds などの拒否コードで拒否されます。 | クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 | |
UnionPay カードは、13 ~ 19 桁の可変長です。 | クレジットカード番号と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 |
実装内容をテストするためのその他の情報については、テストをご覧ください。
手数料を回収する
プラットフォームは、以下の制限でプラットフォーム手数料を請求する場合があります。
application_fee_amount
の値は正の値で、支払い金額よりも小さくする必要があります。回収するプラットフォーム手数料は、支払い金額を上限とします。- プラットフォーム手数料自体に追加の Stripe 手数料はありません。
- ブラジルの規制ならびに法令遵守の要件に従い、ブラジルの連結アカウントが含まれ、ブラジル国外を拠点とするプラットフォームは、Stripe を通じてプラットフォーム手数料を回収することはできません。
application_fee_amount
の通貨は、複数の通貨のいくつかの要素によって決まります。
その結果として生じる支払いの Balance Transaction (取引残高) には、Stripe 手数料とプラットフォーム手数料の両方の詳細な内訳が含まれます。レポート作成の操作性を高めるために、プラットフォーム手数料の回収後に、Application Fee (プラットフォーム手数料) が作成されます。プラットフォーム手数料オブジェクトの amount
プロパティをレポート作成に使用します。これにより、Application Fee (プラットフォーム手数料) エンドポイントでこれらのオブジェクトにアクセスできるようになります。
獲得したプラットフォーム手数料は、通常の Stripe の支払いの売上と同じスケジュールでお客様の利用可能なアカウント残高に追加されます。プラットフォーム手数料は、ダッシュボードの手数料収入の合計セクションで確認できます。
注意
デフォルトでは、ダイレクト支払いのプラットフォーム手数料は非同期で作成されます。支払い作成リクエストで application_fee
オブジェクトを拡張すると、プラットフォーム手数料はそのリクエストの一部として同期的に作成されます。 application_fee
オブジェクトを拡張するとリクエストの遅延が増加するため、どうしても必要な場合にのみ拡張してください。
非同期で作成されたプラットフォーム手数料に対するプラットフォーム手数料オブジェクトにアクセスするには、application_fee.created Webhook イベントをリッスンします。
手数料を含む売上のフロー
支払いに対するプラットフォーム手数料を指定すると、その手数料の金額がプラットフォームの Stripe アカウントに送金されます。連結アカウントで直接支払いを処理する場合、Stripe 手数料とプラットフォーム手数料を差し引いた支払い額が連結アカウントに入金されます。
たとえば、前の例のように、10 USD の支払いを作成し、そのプラットフォーム手数料が 1.23 USD の場合、1.23 USD がプラットフォームアカウントに送金されます。8.18 USD (10 USD - 0.59 USD - 1.23 USD) が連結アカウントでの手取り額となります (標準的なアメリカの Stripe 手数料を想定した場合)。
複数の通貨で支払いを処理する場合は、Connect でどのように通貨が処理されるかについてもご覧ください。
ブランディングをカスタマイズする
プラットフォームと連結アカウントでは、ダッシュボードのブランディング設定を使用して、支払いページのブランディングをカスタマイズできます。ダイレクト支払いの場合、Checkout は連結アカウントのブランド設定を使用します。
API を使用してブランディング設定を update (更新) することもできます。
icon
: Checkout ページのヘッダーにあるビジネス名の横に表示されます。logo
: Checkout ページのヘッダーで、アイコンとビジネス名の代わりに使用されます。primary_color
: Checkout ページの背景色として使用されます。secondary_color
: Checkout ページのボタンの色として使用されます。
curl https://api.stripe.com/v1/accounts/
\ -u "{{CONNECTED_ACCOUNT_ID}}:" \ -d "settings[branding][icon]"=sk_test_4eC39HqLyjWDarjtT1zdp7dc\ -d "settings[branding][logo]"={{FILE_ID}}\ --data-urlencode "settings[branding][primary_color]"="#663399" \ --data-urlencode "settings[branding][secondary_color]"="#4BB543"{{FILE_ID}}
返金する
プラットフォームは連結アカウントに対して支払いを作成できるのと同様に、連結アカウントに対して支払いの返金を作成することもできます。連結アカウントとして認証済みの状態で、プラットフォームのシークレットキーを使用して返金を作成します。
返金する際に、プラットフォーム手数料は自動的に返金されません。プラットフォームはプラットフォーム手数料を明示的に返金する必要があります。そうしなければ、連結アカウント (支払いが作成されたアカウント) はその金額を失うことになります。返金リクエストで、以下のように refund_application_fee
値として true を渡すことによって、プラットフォーム手数料を返金できます。
curl https://api.stripe.com/v1/refunds \ -u "
:" \ -H "Stripe-Account:sk_test_4eC39HqLyjWDarjtT1zdp7dc" \ -d charge={{CONNECTED_ACCOUNT_ID}}\ -d refund_application_fee=true{{CHARGE_ID}}
デフォルトでは支払いの全額が返金されますが、amount
値を正の整数に設定することで、一部返金を作成することができます。支払いの全額が返金されることになった場合は、プラットフォーム手数料の全額が返金されます。そうでない場合は、プラットフォーム手数料の比例配分された部分が返金されます。別の方法として、refund_application_fee
値に false を指定し、別途プラットフォーム手数料を返金することもできます。