将来の支払いを設定する
Checkout の設定モードを使用すれば、支払いの詳細を収集して、今後の決済時に再利用できます。設定モードは、 Setup Intents API を使用して Payment Methods を作成します。
GitHub の実用サンプルをご覧ください。
Checkout セッションを作成するクライアント側サーバ側
ウェブサイトに決済ボタンを追加し、サーバー側のエンドポイントを呼び出して Checkout セッションを作成します。
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>
To create a setup mode Session, use the mode
parameter with a value of setup
when creating the Session. You can optionally specify the customer parameter to automatically attach the created payment method to an existing customer. Checkout uses Dynamic payment methods by default, which requires you to pass the currency parameter when using setup
mode.
success_url
に {CHECKOUT_SESSION_ID}
テンプレート変数を追加することで、顧客が Checkout セッションを正常に完了した後でセッション ID にアクセスできます。Checkout セッションを作成したら、レスポンスで返された URL に顧客をリダイレクトします。
Checkout セッションを取得するサーバ側
顧客が Checkout セッションを正常に完了した後に、お客様は Session オブジェクトを取得する必要があります。これは、以下の 2 つの方法で実行できます。
- 非同期: Session オブジェクトを含む
checkout.session.completed
Webhook を処理します。詳細は、Webhook の設定をご覧ください。 - 同期: ユーザーがサイトにリダイレクトされるときに
success_url
からセッション ID を取得します。セッション ID を使用して、Session オブジェクトを取得します。
顧客が支払いの成功後に必ず success_url
に到達するとは限らないため、ドロップオフの許容度に応じて適切な判断をする必要があります。リダイレクトが発生する前に顧客がブラウザータブを閉じることもあります。Webhook を処理することで、システムがこのようなドロップオフの影響を受けずに済みます。
Session オブジェクトの取得後、Checkout セッションの際に作成された SetupIntent の ID である setup_intent
キーの値を入手します。SetupIntent は、今後の支払いに備えて顧客の銀行口座情報を設定するために使用されるオブジェクトです。
以下に checkout.session.completed
ペイロードの例を示します。
{ "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "cancel_url": "https://example.com/cancel", "client_reference_id": null, "customer": "", "customer_email": null, "display_items": [], "mode": "setup", "setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" }
次のステップに備えて setup_intent
ID を書き留めておきます。
SetupIntent を取得するサーバ側
setup_intent
ID を使用し、SetupIntent オブジェクトを取得します。 返されるオブジェクトには payment_method
ID が含まれ、これを次のステップで顧客に関連付けることができます。
注
この情報を (Webhook の処理とは異なり) Stripe API から同期的にリクエストする場合は、 /v1/checkout/session エンドポイントに対するリクエスト内の SetupIntent オブジェクトを拡張することで、前のステップとこのステップを結合できます。このようにすることで、新しく作成された PaymentMethod ID にアクセスするためのネットワークリクエストを二重に作成する必要がなくなります。
支払い方法を使用するサーバ側
既存の顧客を使用して Checkout セッションを作成しなかった場合、payment_method
ID を使用して、Customer に PaymentMethod を関連付けます。Customer に PaymentMethod を関連付けると、PaymentIntent を使用して PaymentMethod に請求できるようになります。
Stripe について顧客に開示する
Stripe は顧客の Elements とのやり取りに関する情報を収集して、サービスを提供し、不正利用を防止し、サービスを向上します。これには、Cookie と IP アドレスを使用して、1 つの決済フローセッションで顧客に表示する Elements を特定することが含まれます。Stripe がこのような方法でデータを使用するために必要なすべての権利と同意について開示し、これらを取得することはお客様の責任です。詳細については、プライバシーセンターをご覧ください。