PaymentIntents の仕組み
非同期のプロセスを含む決済は、管理が複雑になることがあります。たとえば、ユーザーは 3D セキュアを使用して支払いを確定するよう求められる可能性があります。非同期の決済フローは、アプリケーションの外部で発生する顧客とのやり取りによって変わるため、管理が困難です。PaymentIntent (支払いインテント) および SetupIntent (支払い方法設定インテント) は、state machine のフローのステータスを追跡することで、管理をシンプルにします。
PaymentIntent が作成されると、決済手段が関連付けられるまで、ステータスは requires_payment_method
1 になります。
請求金額が分かり次第、PaymentIntent を作成することをお勧めします。これにより、支払いの試行をすべて Stripe で記録することができます。
顧客が支払い情報を入力したら、PaymentIntent を確定できます。
通常、組み込みでは支払い方法の情報が支払いの確定と同時に送信されるため、この状態はスキップされます。
3D セキュアでの認証など、支払いに追加アクションが必要な場合、PaymentIntent のステータスは requires_action
1 になります。
口座引き落としなどの非同期の支払い方法の場合、必要なアクションの処理が終わると、PaymentIntent は processing
に移行します。このようなタイプの支払い方法では、処理に最大で数日かかることがあります。カードなど他の支払い方法の場合は処理がスピーディーで、processing
ステータスにはなりません。
売上のオーソリとキャプチャーを個別に行っている場合は、代わりに PaymentIntent を requires_capture
に移行できます。その場合、売上のキャプチャーを試行すると、ステータスは processing
に移行します。
PaymentIntent のステータスが succeeded の場合は、その決済フローが完了していることを意味します。
売上がお客様のアカウントに入金されていることを確認できたため、確信を持って注文のフルフィルメントを実行できます。顧客に返金する必要がある場合は、Refunds API を使用できます。
支払い処理が失敗した場合 (支払い拒否など)、支払いを再試行できるように PaymentIntent のステータスは requires_payment_method
に戻ります。
PaymentIntent は、processing
2 または succeeded
ステータスより前の任意の時点でキャンセルできます。キャンセルすると、今後の支払い処理で PaymentIntent は無効になり、これを取り消すことはできません。売上が保留されている場合は、キャンセルすると売上はリリースされます。
1 2019-02-11 以前の API のバージョンでは、requires_payment_method
の代わりに requires_source
、requires_action
の代わりに requires_source_action
が表示されます。
2 関連付けられている決済手段がアメリカの銀行口座であるときは、processing
ステータスの PaymentIntent をキャンセルできます。ただし、キャンセル期間は限定的かつ多様なため、キャンセルが失敗することもあります。