90 lines
3.1 KiB
PHP
90 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use MonetaPhpShop\callback\CallbackController;
|
|
use MonetaPhpShop\callback\ThrottledLogger;
|
|
use MonetaPhpShop\host\Database;
|
|
use MonetaPhpShop\host\ErrorLogLogger;
|
|
use MonetaPhpShop\host\HostReceiptSource;
|
|
use MonetaPhpShop\host\MysqlLogThrottle;
|
|
use MonetaPhpShop\host\MysqlOrderLock;
|
|
use MonetaPhpShop\host\OperationRepository;
|
|
use MonetaPhpShop\host\OrderRepository;
|
|
use MonetaPhpShop\host\SettingsRepository;
|
|
use MonetaPhpShop\host\ShopContext;
|
|
use MonetaPhpShop\ModuleInfo;
|
|
use MonetaPhpShop\protocol\CallbackResponse;
|
|
|
|
/**
|
|
* Check URL è Pay URL ìîäóëÿ «Ìîíåòà».
|
|
* Çàãðóæàåòñÿ íàïðÿìóþ, ìèìî index.php; ÿäðî ïîäíèìàåòñÿ òàê æå, êàê â êîëáýêàõ øòàòíûõ ìîäóëåé.
|
|
* Âñÿ ëîãèêà — â {@see \MonetaPhpShop\callback\CallbackController}.
|
|
*/
|
|
|
|
// Îòâåò — òîëüêî XML/JSON/FAIL: ïðåäóïðåæäåíèÿ ÿäðà PHPShop íå äîëæíû ïîïàñòü â òåëî.
|
|
ini_set('display_errors', '0');
|
|
ob_start();
|
|
|
|
$_classPath = dirname(__DIR__, 3) . '/';
|
|
|
|
require_once $_classPath . 'class/obj.class.php';
|
|
require_once $_classPath . 'class/mail.class.php';
|
|
require_once dirname(__DIR__) . '/class/autoload.php';
|
|
|
|
PHPShopObj::loadClass([
|
|
'base', 'lang', 'order', 'file', 'xml', 'orm', 'payment', 'modules', 'system', 'security',
|
|
'parser', 'string', 'array', 'date', 'delivery', 'product', 'valuta',
|
|
]);
|
|
|
|
$PHPShopBase = new PHPShopBase($_classPath . 'inc/config.ini');
|
|
$PHPShopSystem = new PHPShopSystem();
|
|
$PHPShopModules = new PHPShopModules($_classPath . 'modules/');
|
|
$PHPShopLang = new PHPShopLang();
|
|
|
|
/**
|
|
* @param CallbackResponse $response
|
|
*/
|
|
function moneta_callback_send($response)
|
|
{
|
|
while (ob_get_level() > 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);
|