124 строки
3.6 KiB
Markdown
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` только оплаченные подключения.
|