支払いを複数回キャプチャーする
Multicapture を使用すると、PaymentInent の総額に達するまで、単一のオーソリに対して PaymentIntent のキャプチャーを複数回行うことができます。配送が数回に分かれる注文があり、注文の一部のフルフィルメントを実行するたびに売上をキャプチャーしたい場合に、これを使用することができます。
IC+ 機能
Multicapture は、IC+ 料金体系のユーザーに提供される機能に含まれています。Stripe の料金体系を組み合わせてご利用で、この機能へのアクセスを希望のお客様は、Stripe サポートまでお問い合わせください。
提供状況
Multicapture を使用する際には、次の制限にご注意ください。
- Multicapture は、オンラインカード支払いにのみ対応している
- Amex、Visa、ディスカバー、Mastercard にのみ対応
- source_transaction を使用する支払いと送金別方式の売上フローには対応していない
- Stripe では 1 つの PaymentIntent に対して最大 50 回キャプチャーできる
ベータ
Cartes Bancaires の Multicapture へのアクセスは新機能であり、現在ご利用はベータユーザーに限定されています。 アクセスをご希望の場合は、こちらお問い合わせください。
ベストプラクティス
1 つの注文を複数回に分けて配送する場合は、事前に最終顧客に各配送の詳細を通知します。これにより、顧客が銀行明細書で複数の取引を目にして混乱した結果、照会とチャージバックが発生するのを防ぎます。その場合のベストプラクティスをご紹介します。
- 決済時、購入前に配送ごとの入金予定日と取引額を顧客に通知します。
- 各配送について取引額とともに顧客に通知します。
- 全額返金とキャンセルに関するポリシーを開示します。
ネットワークによっては、適用されるネットワーク規則に則って、こうしたベストプラクティスが必要になる場合があります。
法令遵守に向けた取り組み
Multicapture を使用する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。この機能を利用するカードネットワークの規則を確認し、売上の内容が適用される規則に準拠しているか確認してください。規則はネットワークによって異なります。たとえば、ほとんどのカードネットワークでは Multicapture の用途を、個別に配送される商品の売上に対する非対面カード取引に制限しています。一部のカードネットワークでは、業界 (旅行業界など) に基づいてビジネスでの Multicapture を認めていますが、分割払いや入金のワークフローに Multicapture を使用することは認められない場合があります。
当ページに記載の情報のうち、これらの要件の遵守に関する情報は一般的なガイダンスであり、法律、税務、会計、その他の専門的なアドバイスではありません。ご自身の義務について不明な点がある場合は、専門家に相談することをお勧めします。
未キャプチャー分の PaymentIntent を作成して確定する
オーソリとキャプチャーを個別に行うことを示すには、PaymentIntent の作成時に capture_method を manual
として指定します。オーソリとキャプチャーの分離について、詳細は決済手段を保留する方法をご覧ください。
if_available
または never
パラメーターを使用し、この支払いに対して Multicapture をリクエストします。
if_available
: 作成される PaymentIntent では、決済手段が対応している場合に、複数回のキャプチャーが許可されます。never
: 作成される PaymentIntent では、複数回のキャプチャーが許可されません
レスポンスでは、latest_charge の payment_method_details.card.multicapture.status
フィールドには、顧客の決済手段に基づき 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 状態で Multicapture が available
の場合、オプションの final_capture
パラメーターを false
に設定すると、Stripe に対して capture API を呼び出す際に未キャプチャーの残額をリリースしないよう指示することができます。たとえば、10 USD の PaymentInent を確定し、7 USD を final_capture=false
にしてキャプチャーすると、残りの 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_capture
のままです。
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 テストカードと任意のセキュリティコード、郵便番号、将来の日付の有効期限を使用して、Multicapture による決済をテストします。
カード番号 | 決済手段 | 説明 |
---|---|---|
pm_card_visa | このテストカードは Multicapture に対応しています。 |
返金
requires_capture
状態の PaymentIntent では、キャプチャー合計額から返金合計額を引いた金額 (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 のエンドポイントを使用した後で、refund_application_fee=true または reverse_transfer=true respectively によるさらなる返金はできません。
接続
Multicapture は、source_transaction パラメーターを伴う支払いと送金別方式を除き、Connect のすべてのユースケースに対応します。application_fee_amount と transfer_data[amount] パラメーターにはいくつかの追加検証があります。Multicapture を Connect に実装する際は以下の検証を考慮してください。
- 最初のキャプチャー時に、
application_fee_amount
またはtransfer_data[amount]
を設定すると、後続のすべてのキャプチャーでもそれが必要になります。キャプチャー時に渡されるそれぞれのapplication_fee_amount
およびtransfer_data[amount]
は、PaymentIntent の作成、確定、更新時に渡された値を上書きします。 - Stripe は refund_application_fee=true または reverse_transfer=true を指定した一部返金に対応していません。application fee refund と transfer reversal のエンドポイントを使用して、手数料の部分的な返金や送金の差戻しを実行できます。
Webhook
支払いを更新する Webhook
Stripe は、支払いのキャプチャーが行われるたびに、charge.updated Webhook を送信します。
たとえば、application_fee_amount
が指定されたデスティネーション支払いの Multicapture 決済で最初のキャプチャーが行われると、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_to_capture と final_capture の値に関係なく、キャプチャーのたびに 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_capture=true
でキャプチャーを行うと、支払いの captured 属性は false から true に変わります。
// charge.captured { "data": { "id": "ch_xxx", "object": "charge", "captured": true ... }, "previous_attributes": { "captured": false } }
返金 Webhook
Multicapture の返金 Webhook は、Multicapture 以外の返金 Webhook と同じです。
部分返金が行われるたびに、charge.refunded イベントを送信します。連結アカウントの場合、プラットフォーム手数料を返金する際には application_fee.refunded、送金の差戻しの際には transfer.reversed を追加で送信します。