Commerce Currency Resolver
Drupal Commerce 3向けの多通貨拡張モジュール。柔軟な通貨解決と自動価格変換機能を提供します。
commerce_currency_resolver
インストール
composer require 'drupal/commerce_currency_resolver:^2.0'
概要
Commerce Currency Resolverは、Drupal Commerce 3における多通貨機能を包括的に拡張するモジュールです。Commerce 3は標準で複数通貨をサポートしていますが、このモジュールはアクティブな通貨を決定する柔軟な方法と、異なる通貨間での自動価格計算・変換機能を追加することで、その機能を拡張します。
このモジュールは、ストアベース(Commerceのデフォルト動作)、Cookieベースのユーザー選択、言語ベースのマッピング、GeoIPまたはSmart IPモジュールを使用したジオロケーションベースの検出など、複数の通貨解決戦略をサポートしています。Commerce Exchangerモジュールと組み合わせると、様々な外部プロバイダーからのリアルタイム為替レートを使用した自動価格変換が可能になります。
このモジュールは、商品価格だけでなく、プロモーション、手数料、カスタム調整、税金、送料の通貨変換も処理し、注文ライフサイクル全体を通じて一貫した通貨処理を保証します。パーソナライズされたコンテンツレンダリングのための適切なキャッシュコンテキストサポートを含み、Dynamic Page Cacheとシームレスに連携します。
Features
- 複数の通貨解決戦略:ストアベース(デフォルト)、Cookieベースのユーザー選択、言語ベースのマッピング、GeoIPまたはSmart IPによるジオロケーション
- 3つの価格処理モード:通貨ごとの専用価格フィールド、為替レートによる自動変換、または両方のアプローチを組み合わせたコンボモード
- 注文処理時の注文アイテム、プロモーション、手数料、カスタム調整、送料の自動通貨変換
- 訪問者がCookieに保存される希望の通貨を手動で選択できる通貨セレクターブロック
- 各サイト言語に通貨を割り当てる管理UIを備えた言語から通貨へのマッピング
- 柔軟なマトリックス設定を備えたジオロケーションサービス(GeoIPまたはSmart IP)による国から通貨へのマッピング
- 多通貨金額をサポートするためのCommerce Core promotionオファー(OrderFixedAmountOff、OrderItemFixedAmountOff)のオーバーライド
- 多通貨手数料計算のためのCommerce Feeプラグイン(OrderFixedAmount、OrderItemFixedAmount)のオーバーライド
- 送料の自動通貨変換のためのCommerce Shipping定額配送方法のオーバーライド
- 通貨依存コンテンツの適切なキャッシュのためのカスタムキャッシュコンテキスト(currency_resolver)
- 通貨の不一致を検出し、必要に応じて注文の再計算をトリガーするOrder Processor
- 注文の読み込みを監視し、ユーザーの解決された通貨が注文の通貨と異なる場合に通貨を更新するEvent Subscriber
- 通貨ごとの専用価格フィールドを作成するための設定可能なフィールドプレフィックスパターン(例:field_price_eur、field_price_usd)
- 割引価格の互換性のためのCommerce VADOとの統合
Use Cases
複数通貨を使用した国際ECサイト
顧客の現地通貨で価格を表示して国際的に商品を販売するオンラインストア。GeoIPまたはSmart IPサブモジュールを使用して訪問者の場所を自動検出し、現地通貨で価格を表示します。基本通貨からの自動価格変換のためにExchangerサブモジュールを有効にします。
言語ごとに通貨を設定した多言語サイト
各言語バージョンで特定の通貨を使用する複数言語のウェブサイト(例:英語サイトはUSD、ドイツ語サイトはEUR)。Languageサブモジュールを有効にし、言語から通貨へのマッピングを設定します。ユーザーが言語を変更すると価格が自動的に切り替わります。
ユーザーが選択可能な通貨設定
場所や言語に関係なく、訪問者が希望の通貨を手動で選択できるようにします。Cookieサブモジュールを有効にし、テーマに通貨セレクターBlockを配置します。ユーザーはCookieを介してセッション間で持続する希望の通貨を選択できます。
フォールバック付きの通貨ごとの専用価格
主要通貨には特定の価格が設定されているが、その他の通貨には自動変換が必要な商品。主要通貨用の専用価格フィールド(例:field_price_eur、field_price_usd)を使用したコンボモードを使用します。フィールドが空の場合、Exchangerサブモジュールが基本通貨から自動的に価格を計算します。
完全自動の多通貨ストア
単一の基本通貨で商品を管理し、他のすべての通貨は自動計算。Exchangerサブモジュールを有効にし、通貨ソースを「自動変換」に設定します。すべての価格、プロモーション、手数料、送料が設定された為替レートプロバイダーを使用して自動的に変換されます。
多通貨サポート付きの配送
顧客の通貨に自動的に調整される送料を提供します。ExchangerとShippingの両方のサブモジュールを有効にします。定額配送方法は自動的にレートを変換するか、配送方法設定で通貨ごとの特定金額を設定できます。
Tips
- 最適なキャッシュパフォーマンスのために、現在の通貨に依存するrender arrayには'currency_resolver'キャッシュコンテキストを使用してください。
- 通貨選択のCookie名はsettings.phpでSettings::set('commerce_currency_cookie', 'your_cookie_name')を使用してカスタマイズできます。
- プログラムで注文アイテムを追加する場合、注文アイテムを作成する前にcommerce_currency_resolver.price_resolverサービスを使用して正しい価格を解決してください。
- 通貨リゾルバの優先度が優先順位を決定:Cookie(1000)> GeoIP/Smart IP(900)> Language(800)> Store(デフォルト)。優先度の高いリゾルバが最初にチェックされます。
- Cookieサブモジュールを使用したリバースプロキシ設定では、Cookieを直接読み取る代わりにXヘッダー(デフォルトはX_COMMERCE_CURRENCY)を介して通貨を渡すことができます。
- プロモーション、手数料、配送方法の'fields'設定を使用して、通貨ごとの特定金額を設定してください。空のフィールドは自動変換にフォールバックします。
- CURRENCY_RESOLVER_SKIP_REFRESHフラグを注文データに設定して、特定の注文の自動通貨更新を防止できます。
- CURRENCY_RESOLVER_FORCE_REFRESHフラグを使用して、通常は更新をトリガーしない注文でもプログラムで通貨更新を強制できます。
Technical Details
Admin Pages 4
/admin/commerce/config/commerce_currency_resolver/settings
Commerce Currency Resolverのメイン設定ページ。通貨の解決方法と異なる通貨での価格計算方法を設定します。
/admin/commerce/config/commerce_currency_resolver/language
サイトの言語を通貨にマッピングします。有効にすると、現在のユーザーの言語に基づいて通貨が解決されます。Languageサブモジュールが必要です。
/admin/commerce/config/commerce_currency_resolver/geoip
GeoIPジオロケーションを使用して国を通貨にマッピングします。有効にすると、訪問者の検出された国に基づいて通貨が解決されます。GeoIPサブモジュールが必要です。
/admin/commerce/config/commerce_currency_resolver/smart_ip
Smart IPジオロケーションを使用して国を通貨にマッピングします。GeoIPマッピングと機能的には同一ですが、ジオロケーションにSmart IPモジュールを使用します。Smart IPサブモジュールが必要です。
権限 1
Hooks 5
hook_commerce_promotion_offer_info_alter
プロモーションオファーPluginの定義を変更し、CoreのOrderFixedAmountOffとOrderItemFixedAmountOffを通貨対応バージョンに置き換えます。
hook_commerce_fee_info_alter
手数料Pluginの定義を変更し、CoreのOrderFixedAmountとOrderItemFixedAmountを通貨対応バージョンに置き換えます。
hook_commerce_condition_info_alter
条件Pluginの定義を変更し、CoreのOrderTotalPriceを通貨対応バージョンに置き換えます。
hook_commerce_shipping_method_info_alter
配送方法Pluginの定義を変更し、flat_rateとflat_rate_per_itemを通貨対応バージョンに置き換えます。
hook_entity_view_alter
適切なキャッシュを保証するために、commerce productとproduct variation Entityにcurrency_resolverキャッシュコンテキストを追加します。
Troubleshooting 7
通貨リゾルバサブモジュール(Cookie、Language、GeoIP、またはSmart IP)のいずれかを有効にしていることを確認してください。ベースモジュールは価格フィールドサポートのみを追加します。また、Internal Dynamic Page Cacheモジュールが有効でPage Cacheモジュールが無効であることを確認してください。
Page Cacheモジュールはパーソナライズされたコンテンツをサポートしていません。無効にして、通貨依存の価格のような動的コンテンツ向けに設計されたInternal Dynamic Page Cacheモジュールのみを使用してください。
Commerce Exchangerをインストールして設定し、commerce_currency_resolver_exchangerサブモジュールを有効にし、少なくとも1つの為替レートプロバイダーを作成し、Currency Resolver設定でそれを選択していることを確認してください。
通貨固有の価格フィールドが設定で構成された命名パターンに従っていることを確認してください。デフォルトは'field_price_[通貨コード]'で小文字です(例:ユーロはfield_price_eur)。フィールドがproduct variation typeに存在することを確認してください。
「ドラフト」状態の注文は通貨が変更されると自動的に更新されます。注文が非ドラフト状態(例:完了)に移行すると、通貨はロックされます。これは履歴的な注文データを保持するための期待される動作です。
送料を変換する必要がある場合は、commerce_currency_resolver_shippingサブモジュールを有効にしてください。また、Exchangerサブモジュールが有効であることを確認してください。または、配送方法で「注文通貨」条件を使用して特定の通貨でレートを提供することもできます。
多通貨金額をサポートするためにプロモーションオファーPluginをオーバーライドするExchangerサブモジュールを有効にしてください。その後、プロモーション設定で通貨ごとの特定金額を設定するか、自動計算させることができます。
Security Notes 3
- Cookieとヘッダーからの通貨値を盲目的に信頼してはいけません。モジュールは使用前に有効な通貨に対して通貨コードを検証します。
- 為替レートプロバイダーにはレート制限がある場合があります。サービス中断を避けるために使用量を監視してください。
- ジオロケーションベースの通貨解決はVPNによってスプーフィングやマスクされる可能性のあるIPアドレスに依存しています。検出された場所に基づいてセキュリティに敏感なビジネス決定を行う際にはこれを考慮してください。