日本円以外の海外通貨で運用する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にも対応させます。
こうすることで、ペイパルへ送る受注データを海外通貨で統一することができ、
無事決済ページへも遷移することができます。