Files
xlx/docs/PAYMENTS_AND_REGISTRATION.md
T

3.6 KiB

Регистрация и оплата

Сценарий пользователя

  1. Пользователь отправляет позывной, email и пароль кабинета.
  2. Система нормализует позывной и проверяет, что такого позывного еще нет во внутренней базе.
  3. Если позывной принят, создается платеж.
  4. Пользователь выбирает:
    • оплату через YooKassa;
    • перевод с отправкой чека на ручную проверку.
  5. После подтверждения оплаты система:
    • активирует аккаунт;
    • назначает внутренний DMR ID;
    • генерирует отдельный DMR-пароль;
    • отдает данные подключения Pi-Star.

YooKassa

В config/config.php:

'billing' => [
    'mode' => 'yookassa',
    'yookassa' => [
        'shop_id' => '...',
        'secret_key' => '...',
        'return_url' => 'https://xlx.example.com/payment/return',
        'webhook_secret' => 'long-random-token',
        'capture' => true,
    ],
],

Webhook URL:

https://xlx.example.com/api/webhooks/yookassa?token=long-random-token

Обрабатывается событие:

payment.succeeded

Повторный webhook безопасен: если платеж уже оплачен, система вернет текущий доступ без повторной выдачи ID.

Перевод с чеком

Если пользователь оплатил переводом, он отправляет номер или ссылку чека:

POST /api/payments/receipt
Content-Type: application/json

{
  "payment_id": 1,
  "user_id": 1,
  "receipt_reference": "https://bank.example/receipt/123",
  "comment": "Оплата за R0XXX"
}

Админ подтверждает чек:

POST /api/admin/receipts/approve
X-Admin-Token: change_this_long_random_admin_token
Content-Type: application/json

{
  "receipt_id": 1,
  "admin_user_id": 1
}

Основные API

Регистрация:

POST /api/register
Content-Type: application/json

{
  "callsign": "R0XXX",
  "email": "user@example.com",
  "password": "strong-password"
}

Подтверждение платежа админом:

POST /api/admin/payments/confirm
X-Admin-Token: change_this_long_random_admin_token
Content-Type: application/json

{
  "payment_id": 1,
  "admin_user_id": 1
}

Экспорт активных пользователей для gateway:

GET /api/admin/access/export
X-Admin-Token: change_this_long_random_admin_token

Pi-Star и пароль

xlxd поднимает сам reflector и принимает MMDVM/DMR на UDP 62030. Персональная проверка логина/пароля на уровне Pi-Star требует отдельного access gateway/proxy или auth-слоя перед reflector.

В проекте уже есть:

  • хранение отдельного DMR-пароля;
  • включение/выключение доступа;
  • экспорт активных пользователей;
  • единая активация после YooKassa или ручного чека.

Следующий слой - UDP gateway, который будет читать экспорт активных пользователей и пропускать к xlxd только оплаченные подключения.