支払いを複数回キャプチャーする
オーソリされた金額に達するまで、PaymentIntent を複数回キャプチャーします。
マルチキャプチャーを実行すると、1 件のオーソリに対して複数回 PaymentIntent のキャプチャーを行えるようになります (PaymentIntent の総額に達するまで)。配送が数回に分かれる注文があり、注文のフルフィルメントを部分的に実行するたびにその売上をキャプチャーしたい場合は、このマルチキャプチャーが有効です。
IC+ の特長
マルチキャプチャーは、IC+ 料金体系のユーザーに提供される機能に含まれています。現在 Stripe の料金体系を組み合わせてご利用で、この機能へのアクセスをご希望の場合は、Stripe サポートにお問い合わせください。
サポート状況
マルチキャプチャーを行う際は、次の制限事項に注意してください。
- オンラインカード決済のみサポートしています
- アメリカン・エキスプレス、Visa、ディスカバー、Mastercard、Cartes Bancaires、ダイナースクラブ、銀聯カード (CUP)、JCB で利用可能です。
- source_transaction を使用する支払いと送金別方式の売上フローには対応していない
- Stripe では 1 つの PaymentIntent に対して最大 50 回キャプチャーできます
CUP と JCB のサポート
CUP によるマルチキャプチャーは、アメリカでのみご利用いただけます。JCB によるマルチキャプチャーは、アメリカ、カナダ、オーストラリア、ニュージーランドでのみご利用いただけます。
ベストプラクティス
1 つの注文を複数回に分けて配送する場合は、各配送の詳細を最終顧客に事前通知するようにしてください。そうすることで、銀行取引明細書に複数の取引が表示されていることに混乱した顧客からの問い合わせやチャージバックを防止できます。顧客への通知については、以下のベストプラクティスを参考にしてください。
- 購入前の段階で、配送予定日と取引金額を顧客に通知する。
- 配送の都度、取引金額を通知する。
- 全額返金とキャンセルに関するポリシーを開示する。
法令遵守
マルチキャプチャーを行うにあたり、お客様は適用されるすべての法律、規制、ネットワーク規則を遵守する責任を負うものとします。この機能を使用するカードネットワークの規則に照らし、取引の内容が適用されるすべての規則に準拠していることを確認してください。規則はネットワークごとに異なります。たとえば、ほとんどのカードネットワークでは、マルチキャプチャーの用途を個別配送される商品の販売に対するカード非提示取引に制限しています。一部のカードネットワークでは、業種 (旅行業など) によって企業のマルチキャプチャーを認めていますが、分割払いや入金のワークフローでマルチキャプチャーを行うことは認められない場合があります。
このページに記載されている情報のうち、これらの要件の遵守に関する情報は一般的なガイダンスであり、法律、税務、会計、その他の専門的なアドバイスではありません。自らの義務について不明な点がある場合は、専門家に相談することをお勧めします。
未キャプチャー分の PaymentIntent を作成して確定する
オーソリとキャプチャーを個別に行うことを示すには、PaymentIntent の作成時に capture_method を manual
として指定します。オーソリとキャプチャーの分離について、詳細は支払い方法を保留する方法をご覧ください。
if_
または never
パラメーターを使用し、この支払いに対して Multicapture をリクエストします。
if_
: 作成される PaymentIntent では、支払い方法が対応している場合に、複数回のキャプチャーが許可されます。available never
: 作成される PaymentIntent では、複数回のキャプチャーが許可されません
レスポンスでは、latest_charge の payment_
フィールドには、顧客の支払い方法に基づき available
または unavailable
が含まれます。
// PaymentIntent Response { "id": "pi_xxx", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, "amount_received": 0, ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "amount": 1000, "amount_captured": 0, "amount_refunded": 0, "payment_method_details": { "card": { "multicapture": { "status": "available" // or "unavailable" } } } ... } ... }
PaymentIntent をキャプチャーする
PaymentIntent が requires_capture 状態で、かつマルチキャプチャーが available
の場合、オプションの final_
パラメーターを false
に設定すると、キャプチャー用の API を呼び出す際に未キャプチャーの残額をリリースしないよう Stripe に指示が送られます。たとえば、10 USD の PaymentInent を確定した場合に、7 USD を final_
にしてキャプチャーすると、残りの 3 USD はオーソリ状態が維持されることになります。
PI キャプチャーのレスポンスに含まれる amount_capturable と amount_received フィールドは適宜更新されます。
// PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent", "amount": 1000, "amount_capturable": 300, // 1000 - 700 = 300 "amount_received": 700, // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "amount": 1000, "amount_captured": 700, "amount_refunded": 0, ... } ... }
最終キャプチャー
以下のいずれかが実行されるまで、PaymentIntent のステータスは requires_
のままです。
final_
をcapture true
に設定する。final_
パラメーターを使わずにキャプチャーする (capture final_
はデフォルトでcapture true
に設定されているため)。- オーソリの有効期間が切れる。
この時点で Stripe は残りの売上をリリースし、PaymentIntent のステータスが succeeded
に変わります。
PI キャプチャーのレスポンスに含まれる amount_capturable と amount_received フィールドは適宜更新されます。
// PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, // not 100 due to final_capture=true "amount_received": 900, // 700 + 200 = 900 // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge", "amount": 1000, "amount_captured": 900, "amount_refunded": 0, ... } ... }
未キャプチャーの PaymentIntent は canceled
になりますが、一部キャプチャーされた PaymentIntent は succeeded
になります。
構築したシステムをテストする
Stripe テストカードと任意のセキュリティコード、郵便番号、将来の日付の有効期限を使用して、マルチキャプチャーによる決済をテストします。
番号 | 決済手段 | 説明 |
---|---|---|
pm_ | このテストカードは、マルチキャプチャーをサポートしています。 | |
pm_ | マルチキャプチャーをサポートする Cartes Bancaires または Visa のテストカード。 |
返金
PaymentIntent のステータスが requires_
の場合、キャプチャー合計額から返金合計額を引いた金額 (amount_received — amount_refunded に達するまで、何度でも返金できます。charge.refunded フィールドは、最後のキャプチャーが実行され、amount_received の全額が返金された場合にのみ true
に移行します。
Stripe は、refund_application_fee=true または reverse_transfer=true を指定した一部返金に対応していません。代わりに、application fee refund (プラットフォーム手数料の返金) エンドポイントと transfer reversal (送金の差戻し) エンドポイントを使用して、手数料の一部返金と送金の差戻しを手動で実行できます。application fee refund エンドポイントまたは transfer reversal エンドポイントを使用すると、Stripe は refund_
または reverse_
の返金に対応できなくなります。
Connect
Multicapture は、source_transaction パラメーターを伴う支払いと送金別方式を除き、Connect のすべてのユースケースに対応します。application_fee_amount と transfer_data[amount] パラメーターにはいくつかの追加検証があります。Multicapture を Connect に実装する際は以下の検証を考慮してください。
- 最初のキャプチャー時に
application_
またはfee_ amount transfer_
を設定した場合、後続のすべてのキャプチャーで同じ値が要求されます。キャプチャー時に渡されるdata[amount] application_
またはfee_ amount transfer_
は、PaymentIntent の作成、確定、更新時に渡される値を上書きします。data[amount] - Stripe は、refund_application_fee=true または reverse_transfer=true を指定したマルチキャプチャーに対する一部返金に対応していません。application fee refund (プラットフォーム手数料の返金) エンドポイントと transfer reversal (送金の差戻し) エンドポイントを使用すると、手数料の一部返金や送金の差戻しを実行できます。
Webhook
支払いの更新 Webhook
Stripe は、支払いのキャプチャーが行われるたびに、charge.updated Webhook を送信します。
たとえば、application_
が指定されたデスティネーション支払いをマルチキャプチャーする場合、最初のキャプチャーが行われると、Stripe はこれらの空のフィールドに値を入力します。
// charge.updated { "data": { "id": "ch_xxx", "object": "charge", "amount": 1000, "balance_transaction": "txn_xxx", // applicable to all charges "transfer": "tr_xxx", // applicable to destination charges only "application_fee": "fee_xxx", // applicable to Connect only ... }, "previous_attributes": { "balance_transaction": null, // applicable to all charges "transfer": null, // applicable to destination charges only "application_fee": null, // applicable to Connect only } }
payment_intent.amount_capturable_updated
Stripe は、amount_
と final_
の値に関係なく、キャプチャーのたびに payment_intent.amount_capturable_updated を送信します。
たとえば、10 USD の金額の PaymentIntent から 1 USD をキャプチャーすると、PaymentIntent の amount_capturable フィールドが 9 USD に更新されます。
// payment_intent.amount_capturable_updated { "data": { "id": "pi_xxx", "object": "payment_intent", "amount": 1000, "amount_capturable": 900 // 1000 - 100 = 900 ... }, "previous_attributes": { "amount_capturable": 1000 } }
支払いのキャプチャーイベント
Stripe は 最後のキャプチャー、またはオーソリ期間の終了時に、未キャプチャーの金額のオーソリを差戻すために charge.captured イベントを送信します。支払いの captured フィールドは、最後のキャプチャーまたはオーソリの差戻しが終わった時にのみ true
になります。
たとえば、amount=0
と final_
を指定してキャプチャーを行うと、支払いの captured 属性は false から true に変わります。
// charge.captured { "data": { "id": "ch_xxx", "object": "charge", "captured": true ... }, "previous_attributes": { "captured": false } }
返金 Webhook
マルチキャプチャーの返金 Webhook は、マルチキャプチャー以外の返金 Webhook と同じです。
部分返金が行われるたびに、refund.created イベントが送信されます。連結アカウントの場合、これに加えてプラットフォーム手数料を返金する際には application_fee.refunded イベント、また送金を差戻す際には transfer.reversed イベントも送信されます。