0) { ob_end_clean(); } header('Content-Type: ' . $response->getContentType()); echo $response->getBody(); } $logger = new ErrorLogLogger(); // checkInstall() ядра делает exit с текстом — выключенный модуль отвечаем протоколом. // Таблиц выключенного модуля нет, счётчика частоты тоже: такие отказы пишутся все. if (empty($PHPShopModules->ModValue['base'][ModuleInfo::PATH])) { $logger->error('Уведомление отклонено: модуль выключен в PHPShop.'); moneta_callback_send(CallbackResponse::fail()); exit; } try { $database = Database::fromHost(); $shopContext = new ShopContext(); $settings = (new SettingsRepository())->load(); $controller = new CallbackController( $settings, $shopContext->orderCurrency(), $shopContext->cms(), new OrderRepository(), new OperationRepository($database), new MysqlOrderLock($database), new HostReceiptSource($settings, $database, $logger), $logger, new ThrottledLogger($logger, new MysqlLogThrottle($database)) ); // Метод (GET или POST) задаётся в настройках счёта MONETA.RU — читаем оба, приоритет у POST. $response = $controller->handle(CallbackController::requestFields($_GET, $_POST)); } catch (\Throwable $exception) { $logger->error('Сбой колбэка: ' . get_class($exception) . ': ' . $exception->getMessage()); $response = CallbackResponse::fail(); } moneta_callback_send($response);