feat: paygw_moneta 1.0.0, MONETA.Assistant payment gateway for Moodle
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace paygw_moneta\local\order;
|
||||
|
||||
use core_payment\helper;
|
||||
use paygw_moneta\local\ErrorLogLogger;
|
||||
use paygw_moneta\local\GatewayConfig;
|
||||
use paygw_moneta\local\Logger;
|
||||
use paygw_moneta\local\Money;
|
||||
|
||||
/**
|
||||
* Текущая цена оплачиваемого объекта (с наценкой шлюза) против суммы заказа:
|
||||
* Pay URL и ссылка на оплату не должны давать дожать заказ, если цена
|
||||
* изменилась после его создания.
|
||||
*
|
||||
* @package paygw_moneta
|
||||
* @copyright 2026 Moneta Labs {@link https://moneta.ru/}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class CurrentPrice
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Logger $logger = new ErrorLogLogger(),
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Сумма заказа равна текущей стоимости объекта. Объект мог исчезнуть —
|
||||
* тогда и оплачивать нечего.
|
||||
*/
|
||||
public function matches(Order $order): bool
|
||||
{
|
||||
try {
|
||||
$payable = helper::get_payable($order->component, $order->paymentArea, $order->itemId);
|
||||
$current = Money::fromFloat(
|
||||
helper::get_rounded_cost(
|
||||
$payable->get_amount(),
|
||||
$payable->get_currency(),
|
||||
helper::get_gateway_surcharge(GatewayConfig::GATEWAY),
|
||||
),
|
||||
);
|
||||
} catch (\Throwable $exception) {
|
||||
$this->logger->error('Оплачиваемый объект недоступен: ' . get_class($exception));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return $payable->get_currency() === $order->currency && $current->equals($order->amount);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user