# 支払いでオーソリ額を超える金額をキャプチャーする オーバーキャプチャーを使用して、PaymentIntent のオーソリ額を超える金額をキャプチャーします。 # Stripe がオンラインで提供するページ > This is a Stripe がオンラインで提供するページ for when platform is web and ui is stripe-hosted. View the full page at https://docs.stripe.com/payments/overcapture?platform=web&ui=stripe-hosted. オーバーキャプチャーにより、カード決済でオーソリ額よりも高い金額をキャプチャーできるようになります。[増分オーソリ](https://docs.stripe.com/payments/incremental-authorization.md)とは異なり、オーバーキャプチャーではカードネットワークによる追加のオーソリは発生しません。PaymentIntent をオーバーキャプチャーしても、顧客のクレジットカード明細書にはすぐに反映されません。キャプチャー額が決済されると、保留中のオーソリのキャプチャー額が更新されます。 ## サポート状況 オーバーキャプチャーを行う際は、次の制限事項に注意してください。 - Visa、Mastercard、アメリカン・エキスプレス、ディスカバーでのみ利用できます。 - オンラインカード決済のみ利用できます。対面カード決済については、[チップの収集](https://docs.stripe.com/terminal/features/collecting-tips/overview.md)方法を一度ご確認ください。 - カードブランドは、オーバーキャプチャーできる金額を制限 (通常はオーソリ額の一定割合) し、国、カードタイプ、加盟店カテゴリー制限などの追加の制約を適用しています (以下を参照)。 - [CheckoutSession](https://docs.stripe.com/api/checkout/sessions/.md) で [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) は `payment` に設定され、[capture_method](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-capture_method) は `manual` に設定されます > #### IC+ の特長 > > 当社では *IC+ 料金体系* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) でユーザーに対してオーバーキャプチャーを提供しています。標準の Stripe 料金でこの機能を利用したい場合は、[Stripe サポート](https://support.stripe.com)のフォームからお問い合わせください。 ### カードネットワーク、加盟店の所在国、加盟店カテゴリー別のサポート状況 | カードブランド | 加盟店の所在国 | 加盟店カテゴリー | 上限割合 | | ---------------- | --------- | -------------------------------------------------------------------------- | --------------------------------------- | | **Visa**\* | グローバル | タクシーおよびリムジン、飲食店 (酒類)、理髪店、健康および美容スパ | +20% | | | アメリカ | 飲食店、ファーストフード店、ケータリング | +30% | | | グローバル | 飲食店 / レストラン、ファストフード店 | +20% | | | グローバル | レンタカー | +15% または +75 USD (または現地通貨での相当額) の金額が高い方 | | | グローバル | 宿泊施設、クルーズ会社 | +15% | | | グローバル** | その他すべての加盟店カテゴリー | +15% | | **Mastercard** | アメリカ*** | 飲食店 / レストラン、ファストフード店 | +30% | | **アメリカン・エキスプレス** | グローバル**** | 飲食店 / レストラン、居酒屋 (酒類提供店)、ファストフード店 | +30% | | | グローバル | タクシー / リムジン、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | グローバル | 宿泊施設、レンタカー、トラック / 多目的トレーラーレンタル、キャンピングカー / RV レンタル、食料品店、小売店 | +15% | | **ディスカバー** | グローバル | タクシー / リムジン、飲食店 / レストラン、居酒屋 (酒類提供店)、ファーストフード店、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | グローバル | 宿泊施設、レンタカー | +15% | 欧州経済領域 (EEA) の事業者を除く \** カード保有者が開始した取引の場合 \*** アメリカで発行されたカードであること \**** デビットカード決済およびプリペイドカード決済の上限割合は 20% ### サポートが限定されるネットワーク (ベータ) 次のカードネットワークは、オーバーキャプチャーを限定的にサポートしています。 | カードブランド | 加盟店の所在国 | 加盟店カテゴリー | 上限割合 | | ------------ | --------------- | -------------------------------------------------------------------------- | ---- | | **ダイナースクラブ** | アメリカ (ディスカバー経由) | タクシー / リムジン、飲食店 / レストラン、居酒屋 (酒類提供店)、ファーストフード店、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | アメリカ (ディスカバー経由) | 宿泊施設、レンタカー | +15% | ### 強力な顧客認証 (SCA) 下でのオーバーキャプチャー 強力な顧客認証 (SCA) 要件が適用される国にお客様とカード保有者が所在している場合は、オーバーキャプチャーの利用制限にご注意ください。 - SCA 要件では、通常、最終的なキャプチャー額以上の金額を認証する必要があります。キャプチャーを行う際は、このページの他の項目でも説明されているようにオーバーキャプチャーを行うのではなく、最も高い見積もり額に対して認証とオーソリを行うようにしてください。その後、商品またはサービスの合計金額に応じて、認証された全額をキャプチャーできます。元のオーソリ額および認証額を超える金額をキャプチャーする場合は、元の支払いをキャンセルし、希望する金額で新しい支払いを作成する必要があります。ただし、この要件にはいくつかの例外があります (以下を参照)。 - SCA は、オーバーキャプチャーが許可される[取引免除項目](https://support.stripe.com/questions/transaction-exemptions-for-strong-customer-authentication-%28sca%29)をいくつか設けています。たとえば、顧客が決済フローに介在しない加盟店主導の取引 (MIT) は、免除される可能性があります。[取引が MIT に分類されるケース](https://support.stripe.com/questions/merchant-initiated-transactions-\(mits\)-when-to-categorize-a-transaction-as-mit)については、こちらの記事をご覧ください。 オーバーキャプチャーと SCA 要件を総合的に理解するには、完全なドキュメントをよく理解する必要があります。詳細については、[SCA ガイド](https://stripe.com/guides/strong-customer-authentication)をご覧ください。 新しい [CheckoutSession](https://docs.stripe.com/api/checkout_sessions.md) を作成する際、[custom_text](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-custom_text) フィールドを使用して決済ページに追加のテキストを表示することで、法令遵守要件を満たせます。 > #### 法令遵守 > > オーバーキャプチャーを行うにあたり、お客様は適用されるすべての法律、規制、ネットワーク規則を遵守する責任を負うものとします。この機能を使用するカードネットワークの規則に照らし、取引の内容が適用される規則に準拠していることを確認してください。規則はネットワークごとに異なります。たとえば、一部のカードネットワークは、オーソリ時に最終取引額が判明している取引でオーバーキャプチャーを利用することを認めていません。 > > このページに記載されている情報のうち、これらの要件の遵守に関する情報は一般的なガイダンスであり、法律、税務、会計、その他の専門的なアドバイスではありません。自らの義務について不明な点がある場合は、専門家に相談することをお勧めします。 ## Checkout セッションを作成する サーバー側のエンドポイントを呼び出す決済ボタンをウェブサイトに追加して [Checkout セッション](https://docs.stripe.com/api/checkout/sessions/create.md)を作成します。 ```html Buy cool new product
``` Checkout セッションには、顧客が支払いフォームにリダイレクトされたときに表示される内容がプログラム的に表されます。セッションは、以下のオプションを使用して設定することが可能です。 - 請求[項目](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items) - 利用通貨 `success_url`。お客様のウェブサイト上にあり、決済完了後に顧客が戻されるページの URL です。 > デフォルトでは、Checkout セッションは作成後 24 時間で期限切れとなります。 Checkout セッションを作成したら、レスポンスで返された [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) に顧客をリダイレクトします。 オーバーキャプチャー機能を有効にするには、[request_overcapture](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_overcapture) を `if_available` に設定します。 #### Ruby ```ruby # This example sets up an endpoint using the Sinatra framework. require 'json' require 'sinatra' require 'stripe' # Don't put any keys in code. Use a secrets vault or environment # variable to supply keys to your integration. This example # shows how to set a secret key for illustration purposes only. # # See https://docs.stripe.com/keys-best-practices and find your # keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' post '/create-checkout-session' do session = Stripe::Checkout::Session.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt' }, unit_amount: 2000 }, quantity: 1 }],payment_method_options: { card: { request_overcapture: 'if_available' } }, mode: 'payment', # These placeholder URLs will be replaced in a following step. success_url: 'https://example.com/success' }) redirect session.url, 303 end ``` 顧客が決済を完了したら、[PaymentIntent](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_intent) の[latest_charge](https://docs.stripe.com/api/charges/object.md) の [overcapture.status](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture) フィールドを参照し、[サポート状況](https://docs.stripe.com/payments/overcapture.md#availability)に基づいて、その支払いにオーバーキャプチャーを適用できるかどうかを判断します。`available` の場合、[maximum_amount_capturable](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture-maximum_amount_capturable) フィールドはその PaymentIntent でキャプチャーできる最大金額を示します。`unavailable` の場合、maximum_amount_capturable はオーソリ額を示します。 ```json // PaymentIntent response { "id": "pi_xxx", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, "amount_received": 0, "status": "requires_capture", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000 "overcapture": {"status": "available", // or "unavailable" "maximum_amount_capturable": 1200 } } } ... } ... } ``` ## PaymentIntent をキャプチャーする PaymentIntent の現在のオーソリ額を超える金額をキャプチャーするには、[capture (キャプチャー)](https://docs.stripe.com/api/payment_intents/capture.md) エンドポイントを使用し、[amount_to_capture](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-amount_to_capture) ([maximum_amount_capturable](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture) 上限) を指定します。 `maximum_amount_capturable` を超える金額をキャプチャーする必要がある場合は、[増分オーソリ](https://docs.stripe.com/payments/incremental-authorization.md)を実行してオーソリ額を増額します (サポートされている場合)。 ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=1200 \ -d "expand[]"=latest_charge ``` オーバーキャプチャーが成功すると、PaymentIntent キャプチャーのレスポンスに含まれる [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) と [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) フィールドが適宜更新されます。返されるキャプチャー済みの PaymentIntent では、この決済で移動する合計金額を反映する形で [amount](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) が更新されます。関連付けられている Charge の [amount_authorized](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-amount_authorized) フィールドを使用して、オーバーキャプチャーに成功した支払いの最初のオーソリ額を参照します。 ```json // PaymentIntent response { "id": "pi_xxx", "object": "payment_intent","amount": 1200, "amount_capturable": 0, "amount_received": 1200, "status": "succeeded", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000, "overcapture": { "maximum_amount_capturable": 1200, "status": "available" // or "unavailable" } } } ... } ... } ``` # 埋め込みフォーム > This is a 埋め込みフォーム for when platform is web and ui is embedded-form. View the full page at https://docs.stripe.com/payments/overcapture?platform=web&ui=embedded-form. オーバーキャプチャーにより、カード決済でオーソリ額よりも高い金額をキャプチャーできるようになります。[増分オーソリ](https://docs.stripe.com/payments/incremental-authorization.md)とは異なり、オーバーキャプチャーではカードネットワークによる追加のオーソリは発生しません。PaymentIntent をオーバーキャプチャーしても、顧客のクレジットカード明細書にはすぐに反映されません。キャプチャー額が決済されると、保留中のオーソリのキャプチャー額が更新されます。 ## サポート状況 オーバーキャプチャーを行う際は、次の制限事項に注意してください。 - Visa、Mastercard、アメリカン・エキスプレス、ディスカバーでのみ利用できます。 - オンラインカード決済のみ利用できます。対面カード決済については、[チップの収集](https://docs.stripe.com/terminal/features/collecting-tips/overview.md)方法を一度ご確認ください。 - カードブランドは、オーバーキャプチャーできる金額を制限 (通常はオーソリ額の一定割合) し、国、カードタイプ、加盟店カテゴリー制限などの追加の制約を適用しています (以下を参照)。 - [CheckoutSession](https://docs.stripe.com/api/checkout/sessions/.md) で [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) は `payment` に設定され、[capture_method](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-capture_method) は `manual` に設定されます > #### IC+ の特長 > > 当社では *IC+ 料金体系* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) でユーザーに対してオーバーキャプチャーを提供しています。標準の Stripe 料金でこの機能を利用したい場合は、[Stripe サポート](https://support.stripe.com)のフォームからお問い合わせください。 ### カードネットワーク、加盟店の所在国、加盟店カテゴリー別のサポート状況 | カードブランド | 加盟店の所在国 | 加盟店カテゴリー | 上限割合 | | ---------------- | --------- | -------------------------------------------------------------------------- | --------------------------------------- | | **Visa**\* | グローバル | タクシーおよびリムジン、飲食店 (酒類)、理髪店、健康および美容スパ | +20% | | | アメリカ | 飲食店、ファーストフード店、ケータリング | +30% | | | グローバル | 飲食店 / レストラン、ファストフード店 | +20% | | | グローバル | レンタカー | +15% または +75 USD (または現地通貨での相当額) の金額が高い方 | | | グローバル | 宿泊施設、クルーズ会社 | +15% | | | グローバル** | その他すべての加盟店カテゴリー | +15% | | **Mastercard** | アメリカ*** | 飲食店 / レストラン、ファストフード店 | +30% | | **アメリカン・エキスプレス** | グローバル**** | 飲食店 / レストラン、居酒屋 (酒類提供店)、ファストフード店 | +30% | | | グローバル | タクシー / リムジン、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | グローバル | 宿泊施設、レンタカー、トラック / 多目的トレーラーレンタル、キャンピングカー / RV レンタル、食料品店、小売店 | +15% | | **ディスカバー** | グローバル | タクシー / リムジン、飲食店 / レストラン、居酒屋 (酒類提供店)、ファーストフード店、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | グローバル | 宿泊施設、レンタカー | +15% | 欧州経済領域 (EEA) の事業者を除く \** カード保有者が開始した取引の場合 \*** アメリカで発行されたカードであること \**** デビットカード決済およびプリペイドカード決済の上限割合は 20% ### サポートが限定されるネットワーク (ベータ) 次のカードネットワークは、オーバーキャプチャーを限定的にサポートしています。 | カードブランド | 加盟店の所在国 | 加盟店カテゴリー | 上限割合 | | ------------ | --------------- | -------------------------------------------------------------------------- | ---- | | **ダイナースクラブ** | アメリカ (ディスカバー経由) | タクシー / リムジン、飲食店 / レストラン、居酒屋 (酒類提供店)、ファーストフード店、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | アメリカ (ディスカバー経由) | 宿泊施設、レンタカー | +15% | ### 強力な顧客認証 (SCA) 下でのオーバーキャプチャー 強力な顧客認証 (SCA) 要件が適用される国にお客様とカード保有者が所在している場合は、オーバーキャプチャーの利用制限にご注意ください。 - SCA 要件では、通常、最終的なキャプチャー額以上の金額を認証する必要があります。キャプチャーを行う際は、このページの他の項目でも説明されているようにオーバーキャプチャーを行うのではなく、最も高い見積もり額に対して認証とオーソリを行うようにしてください。その後、商品またはサービスの合計金額に応じて、認証された全額をキャプチャーできます。元のオーソリ額および認証額を超える金額をキャプチャーする場合は、元の支払いをキャンセルし、希望する金額で新しい支払いを作成する必要があります。ただし、この要件にはいくつかの例外があります (以下を参照)。 - SCA は、オーバーキャプチャーが許可される[取引免除項目](https://support.stripe.com/questions/transaction-exemptions-for-strong-customer-authentication-%28sca%29)をいくつか設けています。たとえば、顧客が決済フローに介在しない加盟店主導の取引 (MIT) は、免除される可能性があります。[取引が MIT に分類されるケース](https://support.stripe.com/questions/merchant-initiated-transactions-\(mits\)-when-to-categorize-a-transaction-as-mit)については、こちらの記事をご覧ください。 オーバーキャプチャーと SCA 要件を総合的に理解するには、完全なドキュメントをよく理解する必要があります。詳細については、[SCA ガイド](https://stripe.com/guides/strong-customer-authentication)をご覧ください。 新しい [CheckoutSession](https://docs.stripe.com/api/checkout_sessions.md) を作成する際、[custom_text](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-custom_text) フィールドを使用して決済ページに追加のテキストを表示することで、法令遵守要件を満たせます。 > #### 法令遵守 > > オーバーキャプチャーを行うにあたり、お客様は適用されるすべての法律、規制、ネットワーク規則を遵守する責任を負うものとします。この機能を使用するカードネットワークの規則に照らし、取引の内容が適用される規則に準拠していることを確認してください。規則はネットワークごとに異なります。たとえば、一部のカードネットワークは、オーソリ時に最終取引額が判明している取引でオーバーキャプチャーを利用することを認めていません。 > > このページに記載されている情報のうち、これらの要件の遵守に関する情報は一般的なガイダンスであり、法律、税務、会計、その他の専門的なアドバイスではありません。自らの義務について不明な点がある場合は、専門家に相談することをお勧めします。 ## Checkout セッションを作成する サーバーから、*決済セッション* (A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription)を作成し、[ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) を `embedded` に設定します。[決済セッション](https://docs.stripe.com/api/checkout/sessions/create.md)には、含める[項目](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items)と[通貨](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-currency)などのオプションを設定できます。 自社サイトでホストされているカスタムページに顧客を戻すには、そのページの URL を [return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) パラメーターに指定します。URL にテンプレート変数 `{CHECKOUT_SESSION_ID}` を含めて、戻り先ページでセッションのステータスを取得します。Checkout では、リダイレクト前にこの変数が Checkout セッション ID に自動的に置き換えられます。 [戻り先ページの設定](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=embedded-form#return-page)と、[リダイレクト動作をカスタマイズ](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form)するためのその他のオプションについて、詳細をご覧ください。 Checkout セッションの作成後、レスポンスで返される `client_secret` を使用して、[Checkout をマウント](https://docs.stripe.com/payments/overcapture.md#mount-checkout)します。 オーバーキャプチャー機能を有効にするには、[request_overcapture](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_overcapture) を `if_available` に設定します。 #### Ruby ```ruby # This example sets up an endpoint using the Sinatra framework. require 'json' require 'sinatra' require 'stripe' # Don't put any keys in code. Use a secrets vault or environment # variable to supply keys to your integration. This example # shows how to set a secret key for illustration purposes only. # # See https://docs.stripe.com/keys-best-practices and find your # keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' post '/create-checkout-session' do session = Stripe::Checkout::Session.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt', }, unit_amount: 2000, }, quantity: 1, }], mode: 'payment', ui_mode: 'embedded',payment_method_options: { card: { request_overcapture: 'if_available', }, }, return_url: 'https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}' }) {clientSecret: session.client_secret}.to_json end ``` 顧客が決済を完了したら、[PaymentIntent](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_intent) の[latest_charge](https://docs.stripe.com/api/charges/object.md) の [overcapture.status](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture) フィールドを参照し、[サポート状況](https://docs.stripe.com/payments/overcapture.md#availability)に基づいて、その支払いにオーバーキャプチャーを適用できるかどうかを判断します。`available` の場合、[maximum_amount_capturable](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture-maximum_amount_capturable) フィールドはその PaymentIntent でキャプチャーできる最大金額を示します。`unavailable` の場合、maximum_amount_capturable はオーソリ額を示します。 ```json // PaymentIntent response { "id": "pi_xxx", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, "amount_received": 0, "status": "requires_capture", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000 "overcapture": {"status": "available", // or "unavailable" "maximum_amount_capturable": 1200 } } } ... } ... } ``` ## PaymentIntent をキャプチャーする PaymentIntent の現在のオーソリ額を超える金額をキャプチャーするには、[capture (キャプチャー)](https://docs.stripe.com/api/payment_intents/capture.md) エンドポイントを使用し、[amount_to_capture](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-amount_to_capture) ([maximum_amount_capturable](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture) 上限) を指定します。 `maximum_amount_capturable` を超える金額をキャプチャーする必要がある場合は、[増分オーソリ](https://docs.stripe.com/payments/incremental-authorization.md)を実行してオーソリ額を増額します (サポートされている場合)。 ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=1200 \ -d "expand[]"=latest_charge ``` オーバーキャプチャーが成功すると、PaymentIntent キャプチャーのレスポンスに含まれる [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) と [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) フィールドが適宜更新されます。返されるキャプチャー済みの PaymentIntent では、この決済で移動する合計金額を反映する形で [amount](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) が更新されます。関連付けられている Charge の [amount_authorized](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-amount_authorized) フィールドを使用して、オーバーキャプチャーに成功した支払いの最初のオーソリ額を参照します。 ```json // PaymentIntent response { "id": "pi_xxx", "object": "payment_intent","amount": 1200, "amount_capturable": 0, "amount_received": 1200, "status": "succeeded", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000, "overcapture": { "maximum_amount_capturable": 1200, "status": "available" // or "unavailable" } } } ... } ... } ``` ## Checkout をマウントする #### HTML + JS Checkout は [Stripe.js](https://docs.stripe.com/js.md) の一部として利用できます。HTML ファイルのヘッダーに Stripe.js スクリプトを追加してページに含めます。次に、マウンティングに使用する空の DOM ノード (コンテナー) を作成します。 ```html
``` 公開可能な API キーで Stripe.js を初期化します。 Checkout セッションの作成、および client secret の取得をサーバーにリクエストする、非同期の `fetchClientSecret` 関数を作成します。 Checkout インスタンスを作成する際に、この関数を `options` に渡します。 ```javascript // Initialize Stripe.js const stripe = Stripe('<>'); initialize(); // Fetch Checkout Session and retrieve the client secret async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Initialize Checkout const checkout = await stripe.initEmbeddedCheckout({ fetchClientSecret, }); // Mount Checkout checkout.mount('#checkout'); } ``` #### React npm から [react-stripe-js](https://docs.stripe.com/sdks/stripejs-react.md) と Stripe.js ローダーをインストールします。 ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` 埋め込みの Checkout コンポーネントを使用するには、`EmbeddedCheckoutProvider` を作成します。公開可能 API キーを使用して `loadStripe` を呼び出し、返された `Promise` をプロバイダーに渡します。 Checkout セッションの作成、および client secret の取得をサーバーにリクエストする、非同期の `fetchClientSecret` 関数を作成します。この関数をプロバイダーで受け入れられる `options` プロパティに渡します。 ```jsx import * as React from 'react'; import {loadStripe} from '@stripe/stripe-js'; import { EmbeddedCheckoutProvider, EmbeddedCheckout } from '@stripe/react-stripe-js'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('pk_test_123'); const App = () => { const fetchClientSecret = useCallback(() => { // Create a Checkout Session return fetch("/create-checkout-session", { method: "POST", }) .then((res) => res.json()) .then((data) => data.clientSecret); }, []); const options = {fetchClientSecret}; return (
) } ``` Checkout は、HTTPS 接続を介して支払い情報をStripeに安全に送信する iframe でレンダリングされます。 > 一部の支払い方法では、別のページにリダイレクトして支払いを確定する必要があるため、Checkout は別の iframe 内に配置しないでください。 ### デザインをカスタマイズする アカウントの[ブランディング設定](https://dashboard.stripe.com/settings/branding)で、背景色、ボタンの色、枠線の角丸半径、フォントを設定して、サイトのデザインに合わせて Checkout をカスタマイズします。 デフォルトでは、Checkout は外側に余白やマージンが追加されずに表示されます。必要なマージンを適用するには (四方すべてに 16px など)、目的の余白を適用するコンテナー要素 (div など) を使用することをお勧めします。 ## 戻り先ページを表示する 顧客が支払いを試行すると、Stripe はサイトがホストしている戻りページに顧客をリダイレクトします。Checkout セッションを作成したときに、[return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) パラメーターで戻りページの URL は指定されています。[リダイレクト動作をカスタマイズする](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form)ためのオプションについては、こちらの記事をご覧ください。 戻り先ページを表示する際は、URL に含まれる Checkout セッション ID を使用して、Checkout セッションのステータスを取得します。セッションのステータスに応じて、結果を次のように処理します。 - `complete`:支払いが成功しました。Checkout セッションの情報を成功ページに表示します。 - `open`:支払いが失敗したか、またはキャンセルされました。顧客が再試行できるように Checkout を再マウントしてください。 #### Ruby ```ruby get '/session-status' do session = Stripe::Checkout::Session.retrieve(params[:session_id]) {status: session.status, customer_email: session.customer_details.email}.to_json end ``` ```javascript const session = await fetch(`/session_status?session_id=${session_id}`) if (session.status == 'open') { // Remount embedded Checkout } else if (session.status == 'complete') { // Show success page // Optionally use session.payment_status or session.customer_email // to customize the success page } ``` #### リダイレクトベースの決済手段 決済手段によっては、決済中に顧客が銀行のオーソリページなどの中間ページにリダイレクトされることがあります。顧客はそのページでアクションを完了すると、戻り先ページにリダイレクトされます。 [リダイレクトベースの決済手段とリダイレクト動作](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form#redirect-based-payment-methods)についてご紹介します。 # 高度な連携機能 > This is a 高度な連携機能 for when platform is web and ui is elements. View the full page at https://docs.stripe.com/payments/overcapture?platform=web&ui=elements. オーバーキャプチャーにより、カード決済でオーソリ額よりも高い金額をキャプチャーできるようになります。[増分オーソリ](https://docs.stripe.com/payments/incremental-authorization.md)とは異なり、オーバーキャプチャーではカードネットワークによる追加のオーソリは発生しません。PaymentIntent をオーバーキャプチャーしても、顧客のクレジットカード明細書にはすぐに反映されません。キャプチャー額が決済されると、保留中のオーソリのキャプチャー額が更新されます。 ## サポート状況 オーバーキャプチャーを行う際は、次の制限事項に注意してください。 - Visa、Mastercard、アメリカン・エキスプレス、ディスカバーでのみ利用できます。 - オンラインカード決済のみ利用できます。対面カード決済については、[チップの収集](https://docs.stripe.com/terminal/features/collecting-tips/overview.md)方法を一度ご確認ください。 - カードブランドは、オーバーキャプチャーできる金額を制限 (通常はオーソリ額の一定割合) し、国、カードタイプ、加盟店カテゴリー制限などの追加の制約を適用しています (以下を参照)。 > #### IC+ の特長 > > 当社では *IC+ 料金体系* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) でユーザーに対してオーバーキャプチャーを提供しています。標準の Stripe 料金でこの機能を利用したい場合は、[Stripe サポート](https://support.stripe.com)のフォームからお問い合わせください。 ### カードネットワーク、加盟店の所在国、加盟店カテゴリー別のサポート状況 | カードブランド | 加盟店の所在国 | 加盟店カテゴリー | 上限割合 | | ---------------- | --------- | -------------------------------------------------------------------------- | --------------------------------------- | | **Visa**\* | グローバル | タクシーおよびリムジン、飲食店 (酒類)、理髪店、健康および美容スパ | +20% | | | アメリカ | 飲食店、ファーストフード店、ケータリング | +30% | | | グローバル | 飲食店 / レストラン、ファストフード店 | +20% | | | グローバル | レンタカー | +15% または +75 USD (または現地通貨での相当額) の金額が高い方 | | | グローバル | 宿泊施設、クルーズ会社 | +15% | | | グローバル** | その他すべての加盟店カテゴリー | +15% | | **Mastercard** | アメリカ*** | 飲食店 / レストラン、ファストフード店 | +30% | | **アメリカン・エキスプレス** | グローバル**** | 飲食店 / レストラン、居酒屋 (酒類提供店)、ファストフード店 | +30% | | | グローバル | タクシー / リムジン、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | グローバル | 宿泊施設、レンタカー、トラック / 多目的トレーラーレンタル、キャンピングカー / RV レンタル、食料品店、小売店 | +15% | | **ディスカバー** | グローバル | タクシー / リムジン、飲食店 / レストラン、居酒屋 (酒類提供店)、ファーストフード店、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | グローバル | 宿泊施設、レンタカー | +15% | 欧州経済領域 (EEA) の事業者を除く \** カード保有者が開始した取引の場合 \*** アメリカで発行されたカードであること \**** デビットカード決済およびプリペイドカード決済の上限割合は 20% ### サポートが限定されるネットワーク (ベータ) 次のカードネットワークは、オーバーキャプチャーを限定的にサポートしています。 | カードブランド | 加盟店の所在国 | 加盟店カテゴリー | 上限割合 | | ------------ | --------------- | -------------------------------------------------------------------------- | ---- | | **ダイナースクラブ** | アメリカ (ディスカバー経由) | タクシー / リムジン、飲食店 / レストラン、居酒屋 (酒類提供店)、ファーストフード店、美容院 / 理髪店、ヘルススパ / エステティックサロン | +20% | | | アメリカ (ディスカバー経由) | 宿泊施設、レンタカー | +15% | ### 強力な顧客認証 (SCA) 下でのオーバーキャプチャー 強力な顧客認証 (SCA) 要件が適用される国にお客様とカード保有者が所在している場合は、オーバーキャプチャーの利用制限にご注意ください。 - SCA 要件では、通常、最終的なキャプチャー額以上の金額を認証する必要があります。キャプチャーを行う際は、このページの他の項目でも説明されているようにオーバーキャプチャーを行うのではなく、最も高い見積もり額に対して認証とオーソリを行うようにしてください。その後、商品またはサービスの合計金額に応じて、認証された全額をキャプチャーできます。元のオーソリ額および認証額を超える金額をキャプチャーする場合は、元の支払いをキャンセルし、希望する金額で新しい支払いを作成する必要があります。ただし、この要件にはいくつかの例外があります (以下を参照)。 - SCA は、オーバーキャプチャーが許可される[取引免除項目](https://support.stripe.com/questions/transaction-exemptions-for-strong-customer-authentication-%28sca%29)をいくつか設けています。たとえば、顧客が決済フローに介在しない加盟店主導の取引 (MIT) は、免除される可能性があります。[取引が MIT に分類されるケース](https://support.stripe.com/questions/merchant-initiated-transactions-\(mits\)-when-to-categorize-a-transaction-as-mit)については、こちらの記事をご覧ください。 オーバーキャプチャーと SCA 要件を総合的に理解するには、完全なドキュメントをよく理解する必要があります。詳細については、[SCA ガイド](https://stripe.com/guides/strong-customer-authentication)をご覧ください。 > #### 法令遵守 > > オーバーキャプチャーを行うにあたり、お客様は適用されるすべての法律、規制、ネットワーク規則を遵守する責任を負うものとします。この機能を使用するカードネットワークの規則に照らし、取引の内容が適用される規則に準拠していることを確認してください。規則はネットワークごとに異なります。たとえば、一部のカードネットワークは、オーソリ時に最終取引額が判明している取引でオーバーキャプチャーを利用することを認めていません。 > > このページに記載されている情報のうち、これらの要件の遵守に関する情報は一般的なガイダンスであり、法律、税務、会計、その他の専門的なアドバイスではありません。自らの義務について不明な点がある場合は、専門家に相談することをお勧めします。 ## 未キャプチャー分の PaymentIntent を作成して確定する [PaymentIntent の確定](https://docs.stripe.com/api/payment_intents/confirm.md)後にのみ、キャプチャーされていない支払いに対してオーバーキャプチャーを実行できます。オーソリとキャプチャーを個別に行うことを示すには、PaymentIntent の作成時に [capture_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-capture_method) を `manual` として指定します。オーソリとキャプチャーの分離について、詳細は[支払い方法を保留する方法](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)をご覧ください。 [request_overcapture](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_options-card-request_overcapture) パラメーターで `if_available` を使用し、オーバーキャプチャーする予定の PaymentIntents を指定する必要があります。 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]"=card \ -d payment_method=pm_card_visa \ -d confirm=true \ -d capture_method=manual \ -d "expand[]"=latest_charge \ -d "payment_method_options[card][request_overcapture]"=if_available ``` PaymentIntent 確定レスポンスで、[latest_charge](https://docs.stripe.com/api/charges/object.md) の [overcapture.status](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture) フィールドを参照し、[提供状況](https://docs.stripe.com/payments/overcapture.md#availability)に基づいて、その支払いにオーバーキャプチャーを利用できるかどうかを判断します。`available` の場合、[maximum_amount_capturable](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture-maximum_amount_capturable) フィールドは PaymentIntent でキャプチャーできる最大額を示します。`unavailable` の場合、maximum_amount_capturable はオーソリされた金額になります。 ```json // PaymentIntent response { "id": "pi_xxx", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, "amount_received": 0, "status": "requires_capture", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000 "overcapture": {"status": "available", // or "unavailable" "maximum_amount_capturable": 1200 } } } ... } ... } ``` ## PaymentIntent をキャプチャーする PaymentIntent の現在のオーソリ額を超える金額をキャプチャーするには、[capture (キャプチャー)](https://docs.stripe.com/api/payment_intents/capture.md) エンドポイントを使用し、[amount_to_capture](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-amount_to_capture) ([maximum_amount_capturable](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-overcapture) 上限) を指定します。 `maximum_amount_capturable` を超える金額をキャプチャーする必要がある場合は、[増分オーソリ](https://docs.stripe.com/payments/incremental-authorization.md)を実行してオーソリ額を増額します (サポートされている場合)。 ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=1200 \ -d "expand[]"=latest_charge ``` オーバーキャプチャーが成功すると、PaymentIntent キャプチャーのレスポンスに含まれる [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) と [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) フィールドが適宜更新されます。返されるキャプチャー済みの PaymentIntent では、この決済で移動する合計金額を反映する形で [amount](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) が更新されます。関連付けられている Charge の [amount_authorized](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-amount_authorized) フィールドを使用して、オーバーキャプチャーに成功した支払いの最初のオーソリ額を参照します。 ```json // PaymentIntent response { "id": "pi_xxx", "object": "payment_intent","amount": 1200, "amount_capturable": 0, "amount_received": 1200, "status": "succeeded", ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "payment_method_details": { "card": { "amount_authorized": 1000, "overcapture": { "maximum_amount_capturable": 1200, "status": "available" // or "unavailable" } } } ... } ... } ``` ## 実装内容をテストする 以下の Stripe テストカードを、セキュリティコードと将来の有効期限とともに使用して、テスト時にオーバーキャプチャーをリクエストして実行します。テスト時に、所定のネットワークの決済でオーバーキャプチャーが可能であれば、本番環境の決済でも利用できます。 | 番号 | 決済手段 | 説明 | | ---------------- | ---------------------------------------------- | ----------------------------------- | | 4242424242424242 | `pm_card_visa` | オーバーキャプチャーに対応する Visa のテストカード。 | | 5555555555554444 | `pm_card_mastercard` | オーバーキャプチャーに対応する Mastercard のテストカード。 | | 378282246310005 | `pm_card_amex` | オーバーキャプチャーに対応した Amex のテストカード。 | | 6011111111111117 | `pm_card_discover` | オーバーキャプチャーに対応する Discover のテストカード。 | | 4000008400000076 | `pm_card_credit_disableEnterpriseCardFeatures` | オーバーキャプチャーに対応していない Visa のテストカード。 |