feat: paygw_moneta 1.0.0, MONETA.Assistant payment gateway for Moodle
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace paygw_moneta\local;
|
||||
|
||||
use core_payment\helper;
|
||||
|
||||
/**
|
||||
* Загрузка {@see GatewayConfig} из платёжных аккаунтов Moodle
|
||||
* (`payment_gateways`). Сам `GatewayConfig` — только значения, без обращения
|
||||
* к БД; здесь — всё, что его читает.
|
||||
*
|
||||
* @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 GatewayConfigRepository
|
||||
{
|
||||
/**
|
||||
* Настройки для оплачиваемого объекта — тот же путь, что у ядра при показе модального окна.
|
||||
*/
|
||||
public function forPayable(string $component, string $paymentArea, int $itemId): GatewayConfig
|
||||
{
|
||||
return GatewayConfig::fromArray(
|
||||
helper::get_gateway_configuration($component, $paymentArea, $itemId, GatewayConfig::GATEWAY),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Настройки аккаунта заказа — для колбэков и ссылки на оплату, где
|
||||
* оплачиваемый объект уже известен по заказу.
|
||||
*/
|
||||
public function forAccount(int $accountId): ?GatewayConfig
|
||||
{
|
||||
global $DB;
|
||||
|
||||
$record = $DB->get_record('payment_gateways', ['accountid' => $accountId, 'gateway' => GatewayConfig::GATEWAY]);
|
||||
if ($record === false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::fromRecord($record);
|
||||
}
|
||||
|
||||
/**
|
||||
* Заполненные настройки с данным номером счёта MONETA.RU — чтобы проверить
|
||||
* подпись уведомления по заказу, которого нет в БД.
|
||||
*/
|
||||
public function findByAccountNumber(string $accountNumber): ?GatewayConfig
|
||||
{
|
||||
global $DB;
|
||||
|
||||
foreach ($DB->get_records('payment_gateways', ['gateway' => GatewayConfig::GATEWAY]) as $record) {
|
||||
$config = self::fromRecord($record);
|
||||
if ($config->isComplete() && $config->accountNumber === $accountNumber) {
|
||||
return $config;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static function fromRecord(\stdClass $record): GatewayConfig
|
||||
{
|
||||
$config = json_decode((string) $record->config, true);
|
||||
|
||||
return GatewayConfig::fromArray(is_array($config) ? $config : [], (bool) $record->enabled);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user