【EC-CUBE4.x】海外通貨で運用する時のペイパルプラグインの不具合

日本円以外の海外通貨で運用するEC-CUBEのサイトに、
ペイパルチェックアウト決済プラグイン(1.0.4)を導入したところ、
決済ボタンを押しても決済ページへ遷移しない不具合に遭遇しました。
そのような時はまず、原因を確認してみてください。

まず、以下ファイルのparametersセクションに、
「paypal.debug: false」を追加します。
app/Plugin/PayPalCheckOut/Resource/config/services.yaml

そして、不具合を再現します。すると、var/log/以下のログファイルに
詳細なエラーが表示されるようになります。

そこに以下のようなエラーが出ているかをチェックしてみてください。

message: 'CreateOrderRequest has been failed'

'{"name":"UNPROCESSABLE_ENTITY","details":[{"issue":"MULTI_CURRENCY_ORDER","description":"Multiple differing values of currency_code are not supported. Entire Order request must have the same currency_code."}]

決済ボタンを押したあと、ペイパルへ受注データを送信するのですが、
複数の通貨コード(currency_code)が使われており、
このプラグインがサポートしていない旨が表示されています。

ペイパルチェックアウト決済プラグイン(1.0.4)では、
日本円(JPY)を使うことを前提としており、
EC-CUBEで使う通貨の単位をJPY以外にしていると、
上記のようなエラーが発生し、決済手続きに失敗します。

これを修正するには、以下のファイルを修正します。

PayPalCheckout/Service/PayPalService.php (478-507行目辺りのコード)

ポイントは、currency_codeをJPYからAUDなど、
運用する通貨に変更すること。
そして、運用する通貨が小数点を扱う場合は、
roundedCurrencyFormat()メソッドを取り除くこと。
また、array_reduce()メソッドに型がintになっているところを、
floatにも対応させます。

こうすることで、ペイパルへ送る受注データを海外通貨で統一することができ、
無事決済ページへも遷移することができます。

ABOUTこの記事をかいた人

フリーランスとして働く、フルスタックエンジニア 初崎 匠のサイト。仕事のことから趣味のアニメーション制作、英語学習など、様々なことを通じて、少しでも多くの人が幸せになれるような価値を提供できるよう挑戦し続けます。