feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+

This commit is contained in:
2026-10-27 11:45:22 +03:00
parent 78b7405637
commit f8c12ce44a
82 changed files with 7387 additions and 58 deletions
+89
View File
@@ -0,0 +1,89 @@
<?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);