Files
Moodle/classes/local/order/CurrentPrice.php
T

52 lines
1.8 KiB
PHP

<?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);
}
}