【EC-CUBE3】クーポンプラグインとヤマト決済プラグイン併用によるエラーの解決方法

EC-CUBE3

2020.04.23

EC-CUBE3系にて、クーポンプラグインと、クロネコヤマト決済プラグインを併用した際に起こるバグの解決方法です。
運用中の通販サイトでクーポンを導入したのですが、お客様からの指摘でクレカ決済画面に行こうとするとエラーになることが判明。
ログを確認すると「AuthenticationCredentialsNotFoundException」?なんじゃそりゃ!?
さすがに焦って祈る思いで検索すると、解決方法を載せてくれている方がいました。
が、、、
 

解決方法が掲載されていたが、実は未解決だった。

ECオープンプラットフォーム「EC-CUBE」開発コミュニティに質問している方がいて、
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=22681&forum=16
↓別の方が修正方法を掲載してくれているのですが、
https://github.com/EC-CUBE/coupon-plugin/pull/117
この修正方法を適用すると、会員時のエラーは解決しました。
ですが実は、非会員の状態で試すとエラーが出てしまうのです。
それは、前出の質問者の方も指摘しているのですが、未回答のままで終わっているので解決してなかったのです。
 

非会員でもAuthenticationCredentialsNotFoundExceptionの解決方法

ということで、仕方ないので解決方法を探りまして何とか解決できましたのでご紹介します。
解決方法は、最初に貼り付けたURLのなかの質問者と回答者のやりとりがヒントになりました。
要するに「$app->isGranted()」を使用しないようにすればよいのではないかと。
もう少し詳しく言うと、「$app->isGranted()」を使用している箇所をtry catch文にして「AuthenticationCredentialsNotFoundException」が発生したら、セッションから会員情報を取得するように切り替える。ということをやればよいのではないかと考えました。
「$app->isGranted()」が使われているのは3ファイル合計4箇所でした。
以下の3つのファイルに修正を入れて行きます。
 

修正の前に
※修正の前には必ずバックアップを取ってくださいね。
※動作を保証するものではありませんので、修正は自己責任で行ってください。
 

1. Event.phpの修正

まずは、掲載どおり「Event.php」の修正を行います。

Event.phpファイルの場所

app/Plugin/Coupon/Event/Event.php
※パスはEC-CUBE3のインストールフォルダからのパス
 

Event.phpの修正差分

わかりにくいかもしれませんが、ファイルを掲載すると長くなってしまうので修正差分だけ載せます。ごめんなさい。

 

2. CouponController.phpの修正

次に「$app->isGranted()」を使っている「CouponController.php」の修正を行います。

CouponController.phpファイルの場所

app/Plugin/Coupon/Controller/CouponController.php
※パスはEC-CUBE3のインストールフォルダからのパス
 

CouponController.phpの修正差分

これも修正差分だけ載せます。ごめんなさい。

 

3. CouponService.phpの修正

最後にこれも「$app->isGranted()」を使っている「CouponService.php」の修正を行います。

CouponService.phpファイルの場所

app/Plugin/Coupon/Service/CouponService.php
※パスはEC-CUBE3のインストールフォルダからのパス
 

CouponService.phpの修正差分

これも修正差分だけです。
このファイルでは2箇所「isGranted」を使用しているので、2箇所修正が入ります。

 

EC-CUBEのバージョンなど

EC-CUBE:3.0.18
クーポンプラグイン:2.0.1
クロネコヤマト カード・後払い一体型決済モジュール:1.1.4
 

最後に

上記のコード修正後、非会員の状態でも会員の状態でもカード決済で購入までできました。
カード以外の代引き、銀行振込でも問題なく購入できました。
コード的にはあまりイケてない気がしますが、まあ良しとします。
今のところ紹介したコードによる不具合は出ていないですが、致命的なバグをはらんでいる可能性もありますので、修正は自己責任でお願いいたします。
不具合が出たら追記します。

タグ