始まりは「カード決済できない」との問い合わせ
EC-CUBEを使っているお客さまから、「カード決済が通るお客さまと通らないお客さまがいるようだ」との問い合わせ。
そんな馬鹿な、先方のカードのせいじゃない?と高を括っておりましたが、どうも挙動を見ると「3Dセキュア」がぶつかっている模様。
ヤマトフィナンシャルさんからもそんなお知らせが来ていたような・・・
EC-CUBE モジュールバージョンアップ及び 3D セキュア導入のお願い
とりあえずプラグインのバージョンが1.2.4と古かったようなので(最新は1.2.8)更新しようとしたのがことの始まりでした。
(システム情報)
EC-CUBE:3.0.18
サーバーOS:Linux(ロリポップ)
DBサーバー:MySQL 5.6.23-log
PHP:7.3.33
プラグインが更新できない→プラグインが削除できない→プラグインを無効にする→有効化できない
全て「システムエラー サーバ管理者に連絡してください」の表記。
カード決済できなくなってしまいました。これはまずい。
取り急ぎサイトログ(site_xxxx.log)を確認します。おっと・・・CRITICALが出ています。
[2023-07-07] eccube.CRITICAL [LogListener:logException:112] – Doctrine\DBAL\DBALException: Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it. (uncaught exception)
データベースの型が合っていない?
いろいろ調べてみると、プラグインによって新しい型を定義するとかなんとか・・・
結果として(自己責任でお願いします)
いろいろ試行錯誤した結果、おそらくこれが正解でないかと・・・
EC-CUBE 開発コミュニティ – フォーラム
イプシロン決済モジュール(3.0系)がインストール出来ません…
src/Eccube/Application.phpの508行目あたり(initDoctrineメソッドの末尾)に以下のようなコードを追記して、プラグインをインストールすれば解消されるかもしれません。
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=18975&forum=11&post_id=81927#forumpost81927... // 修正したDriverに差し替える. メソッド名はaddだけど実際はsetしてる. $chain->addDriver($newDriver, $namespace); } // ★以下を追記 $this['orm.em'] ->getConnection() ->getDatabasePlatform() ->registerDoctrineTypeMapping('enum', 'string'); }
藁にもすがる気持ちで書き換えてみます・・・
あ!システムエラーが出なくなって、プラグインの削除ができました!
(その後プラグインを追加しようとしましたが、購入済みのフラグが消えないので、なぜかと思ったら、キャッシュを消す必要があるのですね)
EC-CUBE管理画面>コンテンツ管理>キャッシュ管理
なんとか再度「クロネコヤマト カード・後払い一体型決済モジュール」の最新版をインストールして、無事テストで導通が確認できました。
試行錯誤した内容
(×:関係なさそう △:やや関係ある?)
× 他の(ぶつかっていると思われる)プラグインを無効化、削除してみる
× ロリポップのWAFを停止してみる
WAFの設定 / セキュリティ / マニュアル – ロリポップ!レンタルサーバー
× /vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.phpに型(enum)を追加してみる
△ EC-CUBEバージョンアップ時のmigrationを試してみる(バージョンアップした時にやった覚えがなかったので)
EC-CUBE本体のバージョンアップ
朝からWordPressもw3-cacheプラグインのせいで505が出たあとにプラグインを削除しようとしたら「重大なエラー」で悶絶したところです・・・半日かかってしまいました。