Telegram-бот для VPN с оплатой в крипте
Telegram-бот на вашем сервере, который продаёт VPN-подписки за криптовалюту. Клиент выбирает тариф в чате и платит на странице SnapEX Pay (USDT в TRC20, ERC20 или BEP20 и другие монеты, если SnapEX предлагает их для этой суммы). После подтверждения оплаты бот создаёт или продлевает пользователя в вашей панели Marzban, 3x-ui или Remnawave и присылает ссылку на подписку в тот же чат.
Бесплатно. Версия 1.0.0.
Что умеет модуль
- Не нужно держать кошелёк и ноду блокчейна: деньги приходят на баланс мерчанта SnapEX Pay.
/startпоказывает тарифы кнопками; каждое нажатие создаёт счёт SnapEX Pay и присылает кнопку оплаты.- Поддерживает Marzban, 3x-ui (и API клиентов 3.1+, и старый API inbound) и Remnawave 2.x и 3.x. С
PANEL_TYPE=noneбот только подтверждает оплату, а доступ вы выдаёте сами. - Подписанный вебхук (HMAC-SHA256, окно 5 минут); счёт перечитывается из API SnapEX Pay и обрабатывается, только если он оплачен и принадлежит заказу бота. Повторные вебхуки обрабатываются один раз.
- Продление: вернувшийся клиент (тот же Telegram-аккаунт) продлевается от текущего срока; тариф с лимитом трафика начинает новую квоту.
- Один контейнер, long polling — снаружи должен быть доступен только порт вебхука. Заказы хранятся в SQLite вместе с копией тарифа.
Установка
- В кабинете мерчанта SnapEX Pay создайте API-ключ с правами
invoices.readиinvoices.write. - Скачайте и распакуйте архив, выполните
cp .env.example .envи задайте токен бота, ключ SnapEX Pay,PANEL_TYPE(marzban,3xui,remnawaveилиnone), данные панели иPLANS. - Запустите:
docker compose up -d --build, смотрите логdocker compose logs -f bot. - Бот слушает порт
8080(/webhookи/health). Поставьте его за TLS reverse proxy, например Caddy или nginx. - В кабинете добавьте вебхук
https://<адрес бота>/webhook, впишите секретwhsec_…вSNAPEX_WEBHOOK_SECRETи перезапустите. Отправьте боту/startи проверьте тариф сSNAPEX_ENVIRONMENT=test.
Настройки
| TELEGRAM_BOT_TOKEN, SHOP_NAME | Токен бота от @BotFather; название магазина в /start и в описании счёта. |
|---|---|
| SNAPEX_API_KEY, SNAPEX_WEBHOOK_SECRET | API-ключ мерчанта (invoices.read, invoices.write) и секрет вебхука (whsec_…). |
| SNAPEX_ENVIRONMENT, SNAPEX_FEE_ON | Счета live или test; кто платит комиссию SnapEX — merchant или customer. |
| PANEL_TYPE | marzban, 3xui, remnawave или none и данные доступа к этой панели. |
| PLANS | Через запятую id:дни:цена_usd:байты_трафика; 0 — без лимита. |
Вопросы
Какие панели поддерживает бот?
Marzban, 3x-ui (MHSanaei, обе версии API) и Remnawave 2.x и 3.x. С PANEL_TYPE=none бот только принимает оплату.
Как клиент связывается с VPN-пользователем?
Имя в панели — tg<telegram_id>: каждому Telegram-аккаунту соответствует ровно один VPN-пользователь, повторная оплата его продлевает.
Что если я поменяю цены?
Заказы хранят копию тарифа, поэтому изменение PLANS не затрагивает уже оплаченные заказы.
Может ли один платёж обработаться дважды?
Нет. Повторные и одновременные вебхуки обрабатывают счёт один раз, а каждое нажатие кнопки создаёт свой счёт.
Нужен ли открытый порт для Telegram?
Нет. Бот работает через long polling; снаружи за HTTPS должен быть доступен только порт вебхука для SnapEX Pay.
Другие интеграции
Готовы принимать крипту?
Создайте аккаунт мерчанта, получите API-ключ и подключите модуль. 1% с платежа, без абонентской платы.