当サイトでは電子書籍の販売をしています。
販売しているのですが、不覚にもカート内のエラーで8月中旬から注文出来ない状態となっていました。
SOY CMS/Shopでクラス名と同名のメソッドでエラーになる件を修正
8月中旬といえば、当サイトのSOY ShopからPHP7では推奨されておらず、PHP8では廃止されるコードを撤廃した時で、この時にクレジット決済モジュールの対応が抜けていたことが原因です。
カートのエラーの間に仮登録という形で注文が多数あり、読者の方に対して大変申し訳ないことをしたと感じています。
以後、カートのエラーのまま放置しないように、カートがエラーになった時に運営側にエラーの通知メールを送信する仕組みを作りたいと思います。

カートのエラーというのはこの画面で、使用しているプラグインに何らかの不備がある場合に表示されることが多いです。
この画面が表示される時に通知メールを送信する場合は、
/CMSのインストールディレクトリ/soyshop/webapp/src/cart/_common/page.php
にコードを追加します。
page.phpを開き、61行目の
/* 表示 */
try{
$page = SOY2HTMLFactory::createInstance($pageId . "Page");
$page->buildModules();
$page->display();
}catch(Exception $e){
$cart->clearAttribute("page");
$page = SOY2HTMLFactory::createInstance("ErrorPage");
$page->display();
}
try-catchの例外処理のところで何らかのエラーがあった場合にカートのエラーページに遷移させる仕様になっています。
ここに
/* 表示 */
try{
$page = SOY2HTMLFactory::createInstance($pageId . "Page");
$page->buildModules();
$page->display();
}catch(Exception $e){
//管理者にカートでエラーが表示された旨を伝える
SOY2::import("domain.config.SOYShop_ServerConfig");
$serverConfig = SOYShop_ServerConfig::load();
$adminMailAddress = $serverConfig->getAdministratorMailAddress();
$adminName = $serverConfig->getAdministratorName();
$title = "カート内でエラーが発生しました";
$body = "カート内でエラーが発生しました";
SOY2Logic::createInstance("logic.mail.MailLogic")->sendMail($adminMailAddress, $title, $body, $adminName);
$cart->clearAttribute("page");
$page = SOY2HTMLFactory::createInstance("ErrorPage");
$page->display();
}
メールの送信を行う処理を追加すれば、
エラーページが表示される度に管理者宛にエラー通知が送信される様になります。
本文を
$body = $e;
とすれば、
管理者宛にエラーレポートを送ることも可能です。
※メールの文面にディレクトリ構造が掲載されるので、おすすめはしません。
これで長い時間、カートが落ちているという状態は避けられるな。
今回のコードを組み込んだパッケージは下記のURLからダウンロード出来ます。
もちろんエラーが発生しているファイルのパスで知られてはいけない箇所は隠蔽しています。
https://github.com/inunosinsi/soycms/tree/master/package





