3Dセキュア導入時などの際に、カード決済を行っても決済会社の画面では完了になっているのにもかかわらず、EC-CUBE上では決済処理中ステータスのままということがあります。その原因として考えられることをご紹介します。
決済処理中ステータスとは?
EC-CUBEから外部の決済サイトに遷移して決済手続きを行なっている間に設定されるステータスです。購入処理中と似ていますが、決済処理中は決済会社のプラグインが使うステータスです。
解決方法は?
決済完了してもEC-CUBE上で注文ステータスが決済処理中から変化しない理由は、決済会社の決済画面からのリクエストの戻りを受け取り損なっているためです。
ではなぜ受け取れないかというとこれには複数の原因が考えられます。代表的なものを列挙します。
SameSiteクッキーの不具合に未対応
ブラウザのクッキー処理の挙動に変更があったため、3Dセキュアやリンク型カード決済の完了後戻ってくる際にセッションが利用できなくなった問題です。
これにより外部サイトで決済を行った場合に不具合が発生します。下の修正で対応することが可能です。
旧バージョンにはこういった最新の仕様から取り残された問題が残っていますので最新にバージョンアップをご検討ください。
EC-CUBE2系、3.0.17以前、4.0.3 以前のバージョンではこれに該当している可能性があります。外部からのPOSTリクエストでセッションが利用できないため、決済完了した対象の受注が取得できずステータスが変わらない場合があります。
EC-CUBEのログを確認すると判明することがあります。
決済完了通知エラーの不具合
決済の状況に変更があったとき、その変更を教えてくれる機能が多くの決済代行会社に存在します。この機能は決済通知と呼ばれています。
この決済通知がECサイト側のWAFに引っかかったり、SSL証明書のエラーなどで受信できていない場合があります。
WAFのログやApacheのログを確認することで判明することがあります。あるいはECサイト上での不具合の場合はEC-CUBEのログを確認します。
戻ってきたときのURLに何らかの不具合
決済画面から戻ってきた時、プラグイン独自のURLに戻ってくることが多いですが、そこに何らかの不具合がある場合があります。
EC-CUBEのログでエラーが出ていないか確認してみてください。
「システムエラーが発生しました」の原因をログから確認する方法
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。