Добавить установщик XLX системы и веб-панель
Этот коммит содержится в:
@@ -0,0 +1,123 @@
|
||||
# Регистрация и оплата
|
||||
|
||||
## Сценарий пользователя
|
||||
|
||||
1. Пользователь отправляет позывной, email и пароль кабинета.
|
||||
2. Система нормализует позывной и проверяет, что такого позывного еще нет во внутренней базе.
|
||||
3. Если позывной принят, создается платеж.
|
||||
4. Пользователь выбирает:
|
||||
- оплату через YooKassa;
|
||||
- перевод с отправкой чека на ручную проверку.
|
||||
5. После подтверждения оплаты система:
|
||||
- активирует аккаунт;
|
||||
- назначает внутренний DMR ID;
|
||||
- генерирует отдельный DMR-пароль;
|
||||
- отдает данные подключения Pi-Star.
|
||||
|
||||
## YooKassa
|
||||
|
||||
В `config/config.php`:
|
||||
|
||||
```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:
|
||||
|
||||
```text
|
||||
https://xlx.example.com/api/webhooks/yookassa?token=long-random-token
|
||||
```
|
||||
|
||||
Обрабатывается событие:
|
||||
|
||||
```text
|
||||
payment.succeeded
|
||||
```
|
||||
|
||||
Повторный webhook безопасен: если платеж уже оплачен, система вернет текущий доступ без повторной выдачи ID.
|
||||
|
||||
## Перевод с чеком
|
||||
|
||||
Если пользователь оплатил переводом, он отправляет номер или ссылку чека:
|
||||
|
||||
```http
|
||||
POST /api/payments/receipt
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"payment_id": 1,
|
||||
"user_id": 1,
|
||||
"receipt_reference": "https://bank.example/receipt/123",
|
||||
"comment": "Оплата за R0XXX"
|
||||
}
|
||||
```
|
||||
|
||||
Админ подтверждает чек:
|
||||
|
||||
```http
|
||||
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
|
||||
|
||||
Регистрация:
|
||||
|
||||
```http
|
||||
POST /api/register
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"callsign": "R0XXX",
|
||||
"email": "user@example.com",
|
||||
"password": "strong-password"
|
||||
}
|
||||
```
|
||||
|
||||
Подтверждение платежа админом:
|
||||
|
||||
```http
|
||||
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:
|
||||
|
||||
```http
|
||||
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` только оплаченные подключения.
|
||||
Ссылка в новой задаче
Block a user