Magento2の通貨設定と為替レート自動アップデートについて

By |2019-05-03T10:59:44+09:002018年6月10日|Categories: Magentoの設定|Tags: , , |

1. Magento2のベース決済通貨の設定について

Magento2では、商品価格の表示や決済回収となる通貨を複数設定することができます。
マルチストアにして、各ストアで別の通貨を設定することもできますし、シングルストアで複数の通貨を設定し、ストアに通貨切り換えスイッチを表示することもできます。また、マルチストアで、それぞれストアごとに違った通貨(一つでも複数でも)を設定することもできます。

ただ、決済のベースとなる通貨は、マルチストアの構成に関係するので、詳細はMagentoマルチストアもご参照ください。
決済ベースの通貨を基準に、任意の為替レートを手動で入力したり、APIで外部からレートを取り入れたり、またそのAPIにより自動でレートを更新したりすることができます。
さらに、支払い方法によっては、ベース通貨での決済が固定となるか、あるいは、ベース通貨での決済かストア上での表示通貨での決済か選択できるものもあります。

Magento2通貨設定

上の画像は、Magento公式ドキュメントから拝借したもので、Magento2における通貨設定のイメージになります。

ポイントとなるのは、base currency scope(決済ベース通貨の設定)を、global(default)の層で固定するか、websiteの層で固定するか、自由に選択ができる点です。

globalの層でベース通貨を設定すると、Magentoで構成するすべてのストア(すべてのwebsite > すべてのstore > すべてのstore view)の決済が、一つのベース通貨に固定され、商品の値付けは一つの通貨でしか行えません。もちろん、ストアに表示する通貨は多通貨を設定し、デフォルトの表示通貨を別の通貨にすることもできますが、商品価格の基準はベース通貨となります。
上の公式ドキュメントの画像では、globalでアメリカドルを設定している図と解釈できます。右下のstore viewは日本円表示ですが、websiteのベース通貨がアメリカドルなので、store viewの日本円は、ドル円の為替レートにより変動的に(もしくは固定レートで)表示されることになります。

一方、websiteの層でベース通貨を設定すると、websiteごとに決済ベース通貨を選ぶことができます。そのMagentoが二つのwebsiteを持つのなら、wesiteAはアメリカドル、websiteBは日本円というふうに、仮に同じ商品を販売するとしても、それぞれ別の通貨で値付けを行うことができます。それにより、為替レートの変動を気にすることなく、商品登録画面上から、直接日本円で商品価格を設定できます。
上の公式ドキュメントの画像でいうと、右側のwebsiteのベース通貨を日本円で設定し、その下層のstoreも日本円、store viewも日本円(+多通貨表示)というイメージになります。こうすることで、商品の値付けを日本円で行うことができます。

Magento2のベース通貨の設定

このbase currency scope(決済ベース通貨の設定)は、Magento2の管理画面 Stores > Configration > Catalog > Catalog > Price の Catalog Price Scope で設定します。
上記画像の欄で、プルダウンで、Global(default)か、Websiteか、自由に選択ができます。
Globalに(Magento全体に)ベース通貨を統一してしまうか、それとも、Websiteごとにベース通貨を設定するかが選択できるのです。

2. Magento2の多通貨の設定について

Magento2の管理画面で具体的に通貨を設定するには、上記の Base Currencyに加えて、Default Display Currency、Allowed Currencies と、合計三つの項目で通貨を選択します。
これは、以下の画像のように、管理画面 Stores >Configration > General > Currency Setup の Currency Options で設定をいたします。

Magento2での多通貨の設定

Base Currencyは、上記でも説明いたしましたように、Magento2での決済ベースとなる通貨です。
Catalog Price Scopeを「Global」にしている場合は、Magento2のDefaultの層でのみ設定できます。Catalog Price Scopeを「Website」にしている場合は、Magento2に構成している各Websiteの層でそれぞれ設定できます。

Default Display Currecnyは、そのストアのデフォルトで表示する通貨で、各Store viewの層で設定ができます。
例えば、WebsiteのBase Currencyが日本円であったとしても、そのStore viewのDefault Display Currencyがアメリカドルであれば、ユーザーがそのストアにアクセスすると、商品価格はアメリカドルで表示されます。商品の値付けは日本円ですが、為替レートにより計算されたアメリカドルの価格がストアに表示されます。

Allowed Currenciesは、そのストアで表示のできる通貨リストのすべてで、複数を選択することができます。画面で複数通貨を選択する際には、キーボードの「Ctrl」(Macの場合は「command」キー)を押しながら選択すると、選択された通貨がすべてブルーで反転して、同時に設定できます。
一般的に、Allowed Currenciesで複数通貨を設定すると、ストアのヘッダー部に通貨スイッチャーが表示され、ユーザーが任意で表示通貨を切り換えることができるようになります。
例えば、WebsiteのBase Currencyが日本円で、Default Display Currencyがアメリカドル、そしてAllowed Currenciesに日本円、アメリカドル、ユーロが設定されていると、ユーザーがアクセスすると、商品価格はアメリカドルで表示されます。しかし、ユーザーは通貨スイッチャーにより、商品価格を日本円かユーロに切り換えることができます。その際、表示される日本円価格は、ストア運営者が商品の値付けを行った日本円と同じ価格になります。アメリカドルとユーロの表示価格は、為替レートにより計算された価格となります。

マルチストア構成で、Store viewにより異なる通貨を設定、表示させる場合には、下の画像のように、管理画面左上のStore viewの切り換えスコープで該当のストアを選択し、それぞれ設定をいたします。マルチストアの場合、Store viewの切り換えで、そのストアに適用される管理画面が開きますので、ストアごとにそれぞれ設定を分けることができます。これは通貨設定に関わらず、他の設定でも同じ仕様です。

Magento2 Store viewの切り換え設定

また、通貨の設定で注意していただくことは、Allowed Currenciesの選択リストには、Base CurrencyとDefault Currencyが含まれている必要があるということです。
例えば、Base Currencyがアメリカドルで、Default Currencyにイギリスポンドを選ぼうとしても、Allowed Currencyの項目で「イギリスポンド」を選択してないと、Default Currencyの保存でエラーになってしまいます。なので、先ずはAllowed Currencyに「イギリスポンド」を追加し、その後にDefault Currencyで「イギリスポンド」を設定する流れになります。

Magento2の通貨スイッチャー

上記は、Magentoデモ・事例でご紹介しているZENVAVAというサイトですが、ヘッダーの右上に通貨スイッチャーがあります。
このサイトは、WebsiteでBase Currencyをアメリカドルで設定し、Store viewでDefault Display Currencyもそのままアメリカドルにし、Allowed Currenciesで、AUD(オーストラリアドル)、GBP(イギリスポンド)、CAD(カナダドル)、EUR(ユーロ)、USD(アメリカドル)を設定しています。

インストールしているデザインテーマによって、スイッチャーの位置は違いがありますが、おおよそ上記のイメージになります。マウスオーバーすると、通貨リストのプルダウンが現われます。
また、有料/無料のエクステンション(Geo IP等の名称)を入れると、ユーザーのアクセスしたIPアドレスからユーザーの滞在国/地域を特定し、該当通貨を自動でデフォルト表示させることもできるようになります。エクステンションの導入については、Magentoエクステンションもご参照ください。

2. Magento2の通貨レート自動アップデート方法

Magento2には、デフォルトで、三つの通貨レートプロバイダーとの連携モジュールが入っています。Yahoo financeとWebservicex、そしてFixer.ioです。
APIで通貨レートをワンクリックで取り込んだり、時間を決めて自動でレート更新を行うことができるようになっています。

ところが、この連携モジュール、三つもあるのですが、2018年6月現在、Magento2のプラットフォームできちんと動作するものがありません。
唯一、Fixer.ioは動いていたのですが、先日の6月5日に、Fixerで大きなシステム変更があり、無料プランではEuroベースの為替レートしか取り込むことができなくなってしまいました。
現在、Fixer.ioの月額10ドルのプランを購入すると、すべてのベース通貨でのレートを読み込むことができるようになります。

ただ、この状況がずっと続くのは考えづらいので、いずれ近いうちに、安定的に為替レートをインポートできる無料サービスが、またMagento2で簡単に使えるようになるのではないかと思います。

Free currency converter fixer.io stopped working
https://magento.stackexchange.com/questions/228588/free-currency-converter-fixer-io-stopped-working

例えば、上記のMagentoフォーラムのページでは、有志の開発者が無料で新しい自作モジュールを公開しています。
これを自分でフォルダに整理し、app/code/以下に手作業でアップロードすれば、通常のエクステンションのマニュアルインストールと同じ要領で、無料の為替レートモジュールをMagento2に入れることができます。
(実際にご利用される場合は、テスト環境で試していただき、自己責任にてお使いください。私も試しましたが、きちんと動作しています。)

このように、Magentoコミュニティで自然発生的に生まれる解決策が、様々な検証の後、Magentoのコアコードに(そのままではないにしても)採用されるようになることもあります。(*)

Magento2通貨レート取り込み

この通貨レート取り込みツールは、上記画像のように、管理画面 Stores > Configration > General > Currency Setup の Scheduled Import Settings で設定をいたします。

画像では、コミュニティで公開されている無料モジュール(Free Currency Converter)を選択しています。
レートの更新スケジュールは、時刻と、頻度(毎日/毎週/毎月)の二項目で設定することができます。ここで設定する時刻は、Magento2にとっての時刻で、それは、Stores > Configration > General >General > Locale Options > Timezone で指定されたタイムゾーンの時刻になります。

Magento2通貨レート

自動更新スケジュールで取り込んだ通貨レートは、上記画像のように、Stores > Currency Rates で確認をすることができます。
また、自動更新を使わず、この画面から手作業で最新のレートをインポートすることもできます。その場合は、Import Serviceで、APIツールを選び、下の[Import]ボタンをクリックし、右上のオレンジ色の[Save Currency Rates]をクリックすると、新しい通貨レートを保存、適用することができます。
あるいは、ツールを使わずに、この画面上で手作業で直接にレートを入力し、保存することも可能です。自社の固定レートを採用する際にも、ここでレートを入力したり、変更したりすることができます。

以上、Magento2での通貨の設定についてご説明いたしました。

追記(2019年5月3日):
Free Currency Converter APIは、Magento2.3よりデフォルトで連携モジュールが搭載されるようになりましたが、2019年2月末頃より、APIキーの設定が必須となり、現在、通貨レートの読み込みができない状況になっています。時期Magento2.3.2では、修正が施される可能性があります。
https://github.com/magento/magento2/pull/22461
https://github.com/magento/magento2/issues/21487