В ScreenCat можно покупать скины, и раньше это работало через Supabase Edge Functions. Но теперь у нас свой сервер: FastAPI + PostgreSQL внутри Docker, и это стало огромным апгрейдом.
🐣 Немного контекста
Supabase - альтернатива Firebase:
- PostgreSQL + генерация API
- Storage, Auth
- Edge Functions на Deno
Работало, но были проблемы:
- 💤 Функции «засыпали» -> первый запрос после простоя - 3+ сек
- 🔌 Иногда Robokassa не могла достучаться (cold start)
- 🤯 Невозможно нормально логировать
- 🧱 Всё чёрным ящиком
🐳 Почему я перешёл на Docker + FastAPI
Решил развернуть свой backend (GPT мне подсказала что нужно выбирать 😀):
• FastAPI - простой и быстрый Python-сервер
• PostgreSQL - та же база, но у себя
• Docker - магия! Поднял всё одним docker-compose up
• Robokassa бьёт в /result endpoint
⚙️ Пример кода: проверка подписи и UPSERT
signature = md5_upper(f"{OutSum}:{InvId}:{password2}:Shp_email={Shp_email}:Shp_skin={Shp_skin}")
if SignatureValue.upper() != signature:
raise HTTPException(403, detail="Invalid signature")
stmt = insert(Purchase).values(
invoice_id=InvId,
skin=Shp_skin,
status="paid",
email=Shp_email,
).on_conflict_do_update(
index_elements=["invoice_id"],
set_={"skin": Shp_skin, "status": "paid", "email": Shp_email}
)
await db.execute(stmt)
await db.commit()✨ Что работает сейчас
✅ POST /payment/robokassa/result — принимает оплату
✅ GET /payment/robokassa/status — проверка покупки по email и скину
✅ 🔐 Проверка MD5-подписи от Robokassa
✅ 📬 Уведомление в Telegram о каждой оплате
✅ 🧠 Вся база под контролем — можно смотреть, фильтровать, восстанавливать покупки
📚 Документация API (Swagger, пж не дудосьте)
👉 https://pay.prefire.ru/docs
(Работает сразу из коробки благодаря FastAPI ❤️)
PS: Такой простой сервер оказалось написать проще чем простое приложение)
PS2: Docker вообще супер простая и удобная штука, теперь использую во всех своих скриптах)
