Как запустить магазин цифровых товаров с API
Краткий ответ
Запустить магазин цифровых товаров с API — значит создать витрину, которая подключается к REST API оптового поставщика для данных каталога, информации об остатках и фулфилмента кодов по требованию — вместо хранения инвентаря. Магазин обрабатывает фронтенд (листинг товаров, оформление заказа, оплату), а API берёт на себя фулфилмент (генерацию и доставку кода). При наличии API-поставщика функциональный магазин может пройти путь от нуля до тестируемого за 2–4 недели для разработчика с веб-опытом.
Определение: Магазин цифровых товаров с API — это веб- или Telegram-витрина, которая интегрируется с оптовым поставщиком цифровых товаров через REST API для продажи подарочных карт и пополнений с автоматической доставкой кода при оплате — без предварительной покупки или хранения инвентаря оператором.
Главный вывод: Модель API по требованию устраняет капитальный риск и логистику предварительной закупки инвентаря. Вы платите за коды только тогда, когда покупает клиент. Компромисс — API-доступ требует отношений с поставщиком, открытия счёта и предоплатного баланса, — но этот баланс ликвиден и невелик по сравнению с возможностью дохода.
Для кого это руководство
- Разработчики, строящие магазин цифровых товаров с нуля
- Предприниматели, планирующие выйти на рынок реселлинга цифровых товаров
- Владельцы бизнеса, добавляющие цифровые товары как новый канал дохода
Шаг 1: Определите бизнес-модель
Перед написанием кода ответьте на вопросы:
- Канал продаж: Сайт, Telegram-бот или оба?
- Целевой рынок: Игровой (региональные пополнения), широкий (подарочные карты) или вертикальный (корпоративный HR)?
- Основные географии: US, EU, SEA, MENA или глобальный?
- Способы оплаты: Карта, крипто, локальные платежи или несколько?
Эти решения определяют ваш каталог, поставщика и технический стек.
Шаг 2: Выберите поставщика и откройте счёт
Оптовый API-поставщик предоставляет:
- REST API с эндпоинтами каталога, остатков и заказов
- Модель предоплатного баланса (вы пополняете, заказы списывают)
- Sandbox-среду для разработки
- Документацию для всех эндпоинтов
Верификация перед подписанием:
- Убедитесь, что у поставщика есть нужные вам продукты в нужных регионах
- Подтвердите наличие sandbox
- Получите политику замены недействительных кодов в письменной форме
- Уточните минимальный депозит для активации живого счёта
Полный процесс due diligence см. в Как верифицировать поставщика подарочных карт перед оптовой закупкой.
Шаг 3: Выберите технический стек
Вариант A: Сайт-магазин
| Слой | Варианты технологий |
|---|---|
| Frontend | Next.js, Nuxt, plain HTML/CSS |
| Backend | Node.js, Python (FastAPI/Django), Go |
| База данных | PostgreSQL или MySQL |
| Платежи | Stripe, Paddle или крипто-шлюз (NOWPayments, CoinGate) |
| Хостинг | VPS (Hetzner, DigitalOcean) или managed (Vercel + Railway) |
Вариант B: Telegram-бот
| Слой | Технология |
|---|---|
| Bot framework | python-telegram-bot (Python), aiogram (Python), telegraf.js (Node.js) |
| База данных | PostgreSQL или SQLite для малого масштаба |
| Платежи | Telegram Payments (Stripe), TON/Stars или крипто-инвойс |
| Хостинг | VPS с постоянно работающим процессом (systemd или PM2) |
Вариант C: Оба
Общий бэкенд-API обслуживает и сайт, и Telegram-бот. Интеграция с поставщиком — один и тот же слой независимо от фронтенда.
Шаг 4: Постройте интеграцию каталога
Загружайте и храните каталог поставщика в вашей базе данных:
# Pseudocode — catalog import job
response = supplier_api.get('/catalog')
for product in response['products']:
db.upsert('products', {
'supplier_sku': product['sku'],
'name': f"{product['name']} — {product['region']}",
'wholesale_price': product['wholesale_price'],
'retail_price': calculate_retail(product['wholesale_price']),
'region': product['region'],
'category': product['category'],
'in_stock': product['in_stock'],
'updated_at': now()
})
Расчёт розничной цены:
Retail price = Wholesale ÷ (1 − payment_fee% − fx_buffer% − target_margin%)
Запускайте это задание ежедневно. Обновляйте розничные цены при изменении оптовых.
Шаг 5: Постройте проверку остатков
Проверяйте наличие перед отображением кнопки «Купить» и при оформлении заказа:
def check_stock(sku):
response = supplier_api.get(f'/stock/{sku}')
return response['available']
Кешируйте ответы на 5–15 минут. Никогда не позволяйте покупателю дойти до оформления заказа на отсутствующий товар.
Шаг 6: Постройте поток заказа
Наиболее критичный пайплайн:
1. Покупатель нажимает «Купить»
2. Проверка остатков (в реальном времени)
3. Показ оформления заказа с ценой
4. Покупатель платит (Stripe / крипто / TON)
5. Платёжный webhook подтверждает успех
6. Вызов POST /orders к API поставщика
7. Получение кода в ответе
8. Хранение: order_id, code, buyer_id, timestamp
9. Отображение кода покупателю
10. Отправка подтверждения (email или Telegram-сообщение)
Никогда не вызывайте API поставщика до подтверждения платежа. Если платёж не прошёл после вызова API, вы заплатили за код без покупателя.
Шаг 7: Постройте интерфейс доставки кода
Код — это продукт. Доставка должна быть:
- Немедленной: Никаких многоминутных ожиданий
- Чёткой: Моноширинный шрифт; весь код виден
- Постоянной: Покупатель может просматривать покупки в истории аккаунта
Пример экрана доставки:
✅ Order Complete
Steam Gift Card $20 — US
Code: XXXXX-YYYYY-ZZZZZ
Redeem at: store.steampowered.com/account/redeemwalletcode
Order ID: ORD-00123
Шаг 8: Настройте мониторинг и алерты
Перед запуском:
| Алерт | Триггер | Действие |
|---|---|---|
| Сбой заказа | API поставщика возвращает ошибку | Оповестить ops; поставить в очередь для повтора |
| Низкий баланс | Баланс поставщика < 2× дневной объём заказов | Оповестить финансы |
| API недоступен | Нет ответа от поставщика | Оповестить немедленно; приостановить заказы |
| Высокий % возвратов | Запросы на возврат > 1% дневных заказов | Оповестить ops |
| Дрейф цен | Оптовая цена изменилась на >3% | Оповестить; обновить розничные цены |
Чек-лист запуска
До разработки:
- Счёт поставщика открыт; sandbox-учётные данные получены
- Каталог продуктов определён (10–30 SKU для запуска)
- Бизнес-модель определена: канал, география, способы оплаты
- Технический стек выбран
Разработка:
- Задание импорта каталога построено и протестировано в sandbox
- Проверка остатков реализована (страница товара и оформление заказа)
- Поток заказа: оплата → API поставщика → доставка кода
- Экран доставки кода реализован с историей заказов
- Мониторинг и алерты настроены
Настройка платежей:
- Платёжный шлюз интегрирован и протестирован
- Webhook-эндпоинт защищён (валидация подписи)
- Тестовый платёж завершён end-to-end в sandbox
До запуска:
- End-to-end тест: купить реальный код за реальные деньги; проверить погашение
- Нагрузочный тест: что происходит при 10× ожидаемого трафика?
- Условия обслуживания опубликованы: коды невозвратны, регион на ответственности покупателя
- Живой баланс поставщика пополнен на ≥30 дней ожидаемого объёма заказов
- Дашборды мониторинга активны
День запуска:
- Мягкий запуск с ограниченной аудиторией (друзья, тест-группа)
- Следить за первыми 50 заказами вручную
- Убедиться, что все коды доставлены; проверить логи завершения заказов
- Масштабировать после подтверждения отсутствия сбоев в первой партии
Оценка сроков
| Этап | Продолжительность | Что строится |
|---|---|---|
| Настройка и поставщик | 1–3 дня | Счёт, sandbox, документация по API изучена |
| Интеграция каталога | 3–5 дней | Задание импорта, схема БД, розничное ценообразование |
| Поток заказа | 5–7 дней | Оплата, API поставщика, доставка кода |
| Frontend / бот | 5–10 дней | UI или поток Telegram-бота |
| Тестирование | 3–5 дней | End-to-end тесты, граничные случаи |
| Итого | 3–5 недель | Функциональный магазин с 10–30 SKU |
Разработчик с опытом API-интеграций может значительно сократить это время. Команда из двух человек сокращает его вдвое.
