割引を動的に更新する
決済中に割引コードを適用および変更する方法をご紹介します。
プライベートプレビュー
動的割引はプライベートプレビューです。Request access to dynamic updates to checkout.
Checkout Session で割引を動的に追加または削除する方法をご紹介します。
ご利用事例
このガイドでは、社内の割引システムを導入して動的な金額割引を作成する方法を説明します。合わせて、次についても理解できます。
- ロイヤルティ割引の適用: 顧客ロイヤルティ段階または購入履歴に基づき、割引を自動的に適用します。
- カート金額のプロモーション: 注文合計が特定の基準値を超えた場合に割引を追加します (たとえば、100 ドルを超える注文から 10 ドル割引など)。
- 時間的制約のあるオファー: 期間限定のプロモーション割引を適用したり、期限切れの割引コードを削除したりできます。
- 店舗ベースの割引: 顧客の配送先住所に基づいて、地域別に割引を適用します。
- 顧客固有のオファー: 顧客セグメントまたは以前の購買行動に基づき、個人に合わせた割引を作成します。
Payment Intents API
Payment Intents API を使用する場合は、決済金額を手動で計算して変更するか、金額を調整した新しい PaymentIntent を作成することで割引を適用できます。
SDK を設定するサーバー側
Stripe の公式ライブラリを使用して、アプリケーションから Stripe API にアクセスします。
サーバー SDK を更新するサーバー側
このプレビュー機能を使用するには、まず SDK を更新して、checkout_ ベータ版ヘッダーを使用します。
Checkout Session の更新権限を設定するサーバー側
Checkout Session を作成する際に、permissions.update_discounts=server_only オプションを渡して、クライアント側の割引の適用を無効にし、サーバーからの割引の更新を有効にします。
割引を動的に更新するサーバー側
サーバーでエンドポイントを作成し、Checkout Session に割引を適用します。これは、後のステップでフロントエンドから呼び出します。
セキュリティのヒント
クライアント側のコードは、ユーザーによって制御された環境で実行されます。悪意のあるユーザーは、クライアント側の検証を迂回し、リクエストを傍受して変更したり、サーバーへの新しいリクエストを作成したりすることができます。
エンドポイントを作成する際には、次のことを推奨します。
- 汎用的にするのではなく、特定の顧客とのやり取りのためにエンドポイントを作成します。たとえば、一般的な「更新」アクションの代わりに「ロイヤルティ割引を適用」します。特定のエンドポイントは、検証ロジックの作成と維持に役立ちます。
- クライアントからエンドポイントに セッションデータ を直接渡さないでください。悪意のあるクライアントはリクエストデータを変更し、Checkout Session の状態を判別するための信頼できないソースにする可能性があります。代わりに、セッション ID をサーバーに渡して、それを使用して Stripe API からデータを安全に取得してください。
導入をテストする
導入内容をテストして、動的な割引が正しく機能することを確認するには、以下のステップに従います。
本番環境を反映したサンドボックス環境を設定します。この環境では、Stripe サンドボックスの API キーを使用してください。
さまざまな割引シナリオをシミュレーションして、
recomputeDiscounts関数がさまざまなシナリオを正しく処理することを確認できます。ログツールやデバッグツールを使用してサーバーが以下を行っていることを確認し、サーバー側のロジックを検証します。
- Checkout Session (セッション) を取得します。
- 割引リクエストを検証します。
- ご自身の事業のロジックに基づき、更新された割引を再計算します。
- カスタム条件が満たされた場合に Checkout Sessionを新しい割引で更新します。更新のレスポンスに新しい割引が示されていることを確認します。デフォルトでは、リクエストがオブジェクトを拡張しない限り、レスポンスには割引のフィールドは示されません。
ブラウザーで決済プロセスを複数回実行し、クライアント側のロジックを検証します。割引の適用後に UI がどのように更新されるかに注意してください。以下を確認してください。
- runServerUpdate 関数が想定どおりに呼び出される。
- 割引は事業のロジックに基づき正しく適用されます。
- Checkout の合計が更新され、適用される割引が反映されます。
- 割引の申し込みが失敗した場合は、エラーメッセージが正しく表示されます。
無効な割引リクエストなど、さまざまな割引シナリオをテストするか、サーバーエラーをシミュレーションして、サーバー側とクライアント側の両方でエラー処理をテストします。