配送オプションを動的にカスタマイズする
顧客の配送先住所に基づいて配送オプションを更新します。
顧客が Checkout で入力した住所に基づいて配送オプションを動的に更新する方法をご紹介します。
ご利用事例
- 住所を検証する: 貴社に合わせたカスタム検証ルールを使用して、顧客の住所に商品を配送できるかどうかを確認します。また、顧客が希望する住所を確認するためのカスタム UI を作成することもできます。
- 関連する配送オプションを表示する: 顧客の住所に基づいて、利用可能な配送方法のみを表示します。たとえば、お住まいの国での配送の場合にのみ翌日配送を表示するなどです。
- 配送料を動的に計算する: 顧客の配送先住所に基づいて配送料を計算して表示します。
- 注文合計額に基づいて配送料を更新する: 配送先住所または注文合計額に基づいて配送料を提示します (100 USD を超える注文の場合は送料無料など)。数量変更やクロスセルが可能な決済フローについては、項目を動的に更新するをご覧ください。
制限事項
- payment mode (支払いモード) でのみサポートされます。shipping rates (配送料金) はサブスクリプションモードではご利用いただけません。
- 決済ページの外部からの変更に対応した更新はサポートしていません。
Checkout セッションを作成するサーバー側
サーバーで Checkout セッションを作成します。
- ui_mode を
embedded
に設定します。 - permissions.update_shipping_details を
server_
に設定します。only - shipping_address_collection.allowed_countries に、配送先を提供する国のリストを設定します。
- shipping_options.shipping_rate_data を設定して、0 USD のダミー配送料を作成します。
デフォルトでは、Stripe Checkout クライアントは、Checkout セッションオブジェクトの shipping_details を、顧客が入力する顧客の名前や住所などの配送情報で自動的に更新します。
警告
permissions.update_shipping_details が server_
の場合、クライアント側の自動更新は無効になり、サーバーのみが Stripe の秘密キーを使用して配送情報を更新できます。
配送オプションをカスタマイズするサーバー側
サーバーで、顧客の配送先住所に基づいて配送オプションを計算する新しいエンドポイントを作成します。
- リクエスト本文から取得した
checkoutSessionId
を使用して、Checkout セッションを取得します。 - リクエスト本文にある顧客の配送先情報を検証します。
- 顧客の配送先住所と Checkout セッションのラインアイテムに基づいて配送オプションを計算します。
- 顧客の shipping_details と shipping_options で Checkout セッションを更新します。
Checkout をマウントするクライアント側
注意
onShippingDetailsChange
関数からは必ず Promise
が返され、ResultAction オブジェクトで解決されます。
Checkout クライアントは、onShippingDetailsChange
関数の結果に基づいて UI を更新します。
- 結果に
type: "accept"
が含まれる場合、Checkout UI はサーバーで設定した配送オプションを表示します。 - 結果に
type: "reject"
が含まれる場合、Checkout UI は結果で設定したエラーメッセージを表示します。
必要に応じて、onShippingDetailsChange
をリッスンし、複数の可能な住所から希望の住所を選択して確認するための、カスタム UI を作成できます。
Checkout は、HTTPS 接続を介して支払い情報をStripeに安全に送信する iframe でレンダリングされます。
よくある間違い
一部の支払い方法では、別のページにリダイレクトして支払いを確定する必要があるため、Checkout は別の iframe 内に配置しないでください。
実装をテストする
実装内容をテストして、カスタムの配送オプションが正しく機能することを確認するには、以下のステップに従います。
本番環境を反映したサンドボックス環境を設定します。この環境では、Stripe サンドボックスの API キーを使用してください。
さまざまな配送先住所をシミュレーションして、
calculateShippingOptions
関数がシナリオを正しく処理していることを確認します。ログツールやデバッグツールを使用してサーバーが以下を行っていることを確認し、サーバー側のロジックを検証します。
- Checkout Session (セッション) を取得します。
- 配送の詳細を検証します。
- 配送オプションを計算します。
- 新しい配送の詳細とオプションで Checkout Session (セッション) を更新します。更新のレスポンスに新しい配送の詳細とオプションが含まれていることを確認します。
ブラウザーで決済プロセスを複数回実行することで、クライアント側のロジックを検証します。配送の詳細の入力後に UI がどのように更新されるかに注意してください。次のことを確認してください。
onShippingDetailsChange
関数が指定したとおりに呼び出されている。- 配送オプションが指定された住所に基づいて正しく更新される。
- 配送先が利用できない場合にエラーメッセージが適切に表示される。
無効な配送先住所を入力するか、サーバーエラーをシミュレーションして、サーバー側とクライアント側の両方のエラー処理をテストします。