HornyAPI Documentation
Обзор API
HornyAPI Merchant Service - это унифицированный API для работы с различными провайдерами цифровых товаров и услуг. API предоставляет единый интерфейс для управления заказами, продуктами, платежами и интеграцией с внешними провайдерами.
Аутентификация
API использует следующие методы аутентификации:
- API Key: Уникальный ключ для аутентификации
- Secret Key: Секретный ключ для подписи запросов
- JWT Token: Токен для авторизации запросов
- Access Key: Ключ доступа, присвоенный пользователю
Заголовки для аутентификации
Все API запросы должны включать следующие заголовки:
Authorization: Bearer <JWT_TOKEN>
X-API-Key: <API_KEY>
X-Access-Key: <ACCESS_KEY> # Для запросов от мерчантов
Доступные методы API
1. Products List (Список продуктов) - Административный
Endpoint: /api/products/
Method: GET
Описание: Получение полного списка продуктов (только для администраторов)
Параметры запроса
provider_type
- фильтр по типу провайдераis_available
- фильтр по доступностиcurrency
- фильтр по валютеsearch
- поиск по названию и описаниюordering
- сортировка (name, price, created_at, updated_at)
Пример ответа
{
"count": 100,
"next": "https://api.hornybox.com/api/products/?page=2",
"previous": null,
"results": [
{
"id": 1,
"name": "Game Coins",
"description": "In-game currency",
"price": 10.99,
"currency": "RUB",
"provider": "unipin",
"category": {
"id": 1,
"name": "Game Currency",
"slug": "game-currency"
},
"is_available": true,
"provider_product_id": "GAME123"
}
]
}
2. Merchant Products List (Список продуктов для мерчантов)
Endpoint: /api/merchant/products/
Method: GET
Описание: Получение списка продуктов для мерчантов
Параметры запроса
is_available
- фильтр по доступностиcurrency
- фильтр по валюте (по умолчанию RUB)search
- поиск по названию и описаниюordering
- сортировка (name, price, created_at, updated_at)category
- фильтр по категории
Пример ответа
{
"count": 100,
"next": "https://api.hornybox.com/api/merchant/products/?page=2",
"previous": null,
"results": [
{
"id": 1,
"name": "Game Coins",
"description": "In-game currency",
"price": 10.99,
"currency": "RUB",
"category": {
"id": 1,
"name": "Game Currency",
"slug": "game-currency"
},
"is_available": true
}
]
}
3. Order Creation (Создание заказа)
Endpoint: /api/orders/
Method: POST
Описание: Создание нового заказа
Тело запроса
{
"product_id": 1,
"quantity": 1,
"user_id": "user123",
"server_id": "server1",
"character_id": "char123",
"payment_method": "credit_card",
"callback_url": "https://your-site.com/callback"
}
Пример ответа
{
"id": "order_123",
"status": "pending",
"product": {
"id": 1,
"name": "Game Coins",
"price": 10.99,
"currency": "USD"
},
"amount": 10.99,
"currency": "USD",
"created_at": "2023-01-01T12:00:00Z",
"payment_url": "https://payment.hornybox.com/order_123"
}
4. Order Status (Статус заказа)
Endpoint: /api/orders/{order_id}/
Method: GET
Описание: Получение текущего статуса заказа
Пример ответа
{
"id": "order_123",
"status": "completed",
"product": {
"id": 1,
"name": "Game Coins"
},
"amount": 10.99,
"currency": "USD",
"created_at": "2023-01-01T12:00:00Z",
"completed_at": "2023-01-01T12:30:00Z",
"provider_order_id": "PROV123",
"delivery_data": {
"code": "GAME123456",
"expires_at": "2023-02-01T12:00:00Z"
}
}
5. Payment Methods (Методы оплаты)
Endpoint: /api/payment-methods/
Method: GET
Описание: Получение списка доступных методов оплаты
Пример ответа
{
"methods": [
{
"id": "credit_card",
"name": "Credit Card",
"currencies": ["USD", "EUR"],
"min_amount": 1.00,
"max_amount": 1000.00,
"fees": {
"percentage": 2.5,
"fixed": 0.30
}
},
{
"id": "crypto",
"name": "Cryptocurrency",
"currencies": ["USD", "EUR", "BTC"],
"min_amount": 10.00,
"max_amount": null,
"fees": {
"percentage": 1.0,
"fixed": 0.00
}
}
]
}
6. Balance Check (Проверка баланса)
Endpoint: /api/balance/
Method: GET
Описание: Получение текущего баланса и истории транзакций
Параметры запроса
currency
- валюта баланса (по умолчанию USD)start_date
- начало периода для историиend_date
- конец периода для истории
Пример ответа
{
"balance": {
"amount": 1000.00,
"currency": "USD",
"last_updated": "2023-01-01T12:00:00Z"
},
"transactions": [
{
"id": "txn_123",
"type": "order",
"amount": -10.99,
"currency": "USD",
"description": "Order #123",
"created_at": "2023-01-01T11:00:00Z"
},
{
"id": "txn_124",
"type": "deposit",
"amount": 1000.00,
"currency": "USD",
"description": "Balance top-up",
"created_at": "2023-01-01T10:00:00Z"
}
]
}
Статусы заказов
API использует следующие статусы заказов:
- pending: Заказ создан, ожидает оплаты
- processing: Заказ в обработке
- completed: Заказ успешно выполнен
- failed: Заказ не выполнен
- refunded: Заказ возвращен
- cancelled: Заказ отменен
Обработка ошибок
API возвращает стандартные HTTP коды статуса:
- 200: Успешный запрос
- 400: Неверный запрос
- 401: Не авторизован
- 403: Доступ запрещен
- 404: Ресурс не найден
- 500: Внутренняя ошибка сервера
Пример ответа с ошибкой:
{
"error": {
"code": "invalid_request",
"message": "Invalid product ID",
"details": {
"product_id": "Product with ID 999 does not exist"
}
}
}
Вебхуки
Для обработки уведомлений от провайдеров, API поддерживает вебхуки:
- Настройка вебхука для провайдера
- Обработка входящих уведомлений
- Автоматическое обновление статусов заказов
Пример вебхука:
{
"event": "payment.completed",
"data": {
"order_id": "order_123",
"payment_id": "payment_123",
"amount": 10.99,
"currency": "USD",
"timestamp": "2023-01-01T12:30:00Z"
}
}
Ограничения API
API имеет следующие ограничения на количество запросов:
- 100 запросов в минуту для обычных эндпоинтов
- 1000 запросов в минуту для вебхуков
- Ограничения могут быть изменены для конкретных клиентов
Безопасность
- Все запросы должны использовать HTTPS
- JWT токены имеют ограниченный срок действия
- API ключи должны храниться в безопасном месте
- Рекомендуется использовать IP-фильтрацию для важных операций
Рекомендации по использованию
- Всегда проверяйте статус ответа
- Используйте обработку ошибок
- Кэшируйте часто запрашиваемые данные
- Реализуйте механизм повторных попыток для неудачных запросов
- Ведите логирование важных операций