Files
xlx/docs/PAYMENTS_AND_REGISTRATION.md

124 строки
3.6 KiB
Markdown

# Регистрация и оплата
## Сценарий пользователя
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` только оплаченные подключения.