Included XML files for the "pay to new number" and "pay to old number" features in the Ozon platform.
182 lines
4.0 KiB
Markdown
182 lines
4.0 KiB
Markdown
# Task API
|
||
|
||
[← Главная](../index.md)
|
||
|
||
Управление задачами: получение очереди, добавление задач, отправка результатов.
|
||
|
||
---
|
||
|
||
## GET `/api/v1/task/get_tasks` 🔒
|
||
|
||
Получить список задач в очереди для текущего профиля.
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": [
|
||
{
|
||
"bank_name": "ozon",
|
||
"material_id": 42,
|
||
"type": "FETCH_PROFILE",
|
||
"body": {}
|
||
},
|
||
{
|
||
"bank_name": "birbank",
|
||
"material_id": 7,
|
||
"type": "FETCH_TRANSACTIONS",
|
||
"body": {}
|
||
},
|
||
{
|
||
"bank_name": "ozon",
|
||
"material_id": 5,
|
||
"type": "CREATE_TRANSACTION",
|
||
"body": {
|
||
"amount": 1000,
|
||
"currency": 643,
|
||
"type": "bank",
|
||
"bank_participator_id": "string",
|
||
"extra": {}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**Типы задач:**
|
||
|
||
| `type` | Описание | `body` |
|
||
|--------|----------|--------|
|
||
| `FETCH_PROFILE` | Получить баланс и данные аккаунта | пустой `{}` |
|
||
| `FETCH_TRANSACTIONS` | Получить историю транзакций | пустой `{}` |
|
||
| `CREATE_TRANSACTION` | Выполнить перевод | `CreateTransactionBody` |
|
||
|
||
**`CreateTransactionBody`:**
|
||
```json
|
||
{
|
||
"amount": 1000,
|
||
"currency": 643,
|
||
"type": "bank",
|
||
"bank_participator_id": "string",
|
||
"extra": {}
|
||
}
|
||
```
|
||
|
||
- `currency` — ISO 4217 numeric код валюты (643 = RUB, 840 = USD, 944 = AZN, 410 = KRW)
|
||
- `type` — `"bank"` или `"top-up"`
|
||
|
||
---
|
||
|
||
## POST `/api/v1/task/task_result` 🔒
|
||
|
||
Отправить результат выполненной задачи.
|
||
|
||
Тело запроса зависит от типа задачи (discriminator — поле `type`).
|
||
|
||
### FETCH_PROFILE
|
||
|
||
```json
|
||
{
|
||
"type": "FETCH_PROFILE",
|
||
"material_id": 42,
|
||
"bank_name": "ozon",
|
||
"data": {
|
||
"bank_account_id": "string",
|
||
"currency": 643,
|
||
"amount": 15000,
|
||
"extra": {}
|
||
}
|
||
}
|
||
```
|
||
|
||
### FETCH_TRANSACTIONS
|
||
|
||
```json
|
||
{
|
||
"type": "FETCH_TRANSACTIONS",
|
||
"material_id": 7,
|
||
"bank_name": "birbank",
|
||
"data": [
|
||
{
|
||
"bank_transaction_id": "string",
|
||
"amount": 500,
|
||
"currency": 944,
|
||
"transaction_type": "bank",
|
||
"bank_participator_id": "string",
|
||
"status": "completed",
|
||
"extra": {},
|
||
"created_at": "2024-01-01T12:00:00"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### CREATE_TRANSACTION
|
||
|
||
```json
|
||
{
|
||
"type": "CREATE_TRANSACTION",
|
||
"material_id": 5,
|
||
"bank_name": "ozon",
|
||
"data": {
|
||
"bank_transaction_id": "string",
|
||
"amount": 1000,
|
||
"currency": 643,
|
||
"transaction_type": "bank",
|
||
"bank_participator_id": "string",
|
||
"status": "completed",
|
||
"extra": {}
|
||
}
|
||
}
|
||
```
|
||
|
||
**`TransactionStatusEnum`:** `"progress"` | `"completed"` | `"declined"`
|
||
|
||
---
|
||
|
||
## POST `/api/v1/task/add_task`
|
||
|
||
Добавить задачу в очередь (вызывается внешней системой, не клиентом).
|
||
|
||
---
|
||
|
||
## POST `/api/v1/task/add_bank`
|
||
|
||
Зарегистрировать банк с webhook-URL.
|
||
|
||
**Query параметры:**
|
||
|
||
| Параметр | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `bank_name` | string | Название банка |
|
||
| `webhook_url` | uri | URL для уведомлений |
|
||
|
||
---
|
||
|
||
## Ошибка выполнения задачи
|
||
|
||
Если задача не может быть выполнена (аккаунт не найден, скрипт упал), в поле `data` передаётся:
|
||
|
||
```json
|
||
{
|
||
"type": "FETCH_PROFILE",
|
||
"material_id": 42,
|
||
"bank_name": "ozon",
|
||
"data": {
|
||
"status": "error",
|
||
"description": "Account not found for material_id: 42"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Связь с кодом проекта
|
||
|
||
| API | Метод в коде |
|
||
|-----|-------------|
|
||
| `GET /api/v1/task/get_tasks` | `NetworkService::getTasks()` |
|
||
| `POST /api/v1/task/task_result` | `NetworkService::postTaskResult()` |
|
||
|
||
Хелпер в `EventHandler`: `sendTaskResult(type, materialId, bankName, data)` — создаёт `NetworkService` в отдельном потоке и вызывает `postTaskResult()`.
|