
Первая оплата VPN-клиента — простая часть. Сложнее вторая, третья и десятая: клиент платит снова до или после окончания подписки, и нужно правильно добавить дни, сохранить рабочий конфиг и не создать пользователя дважды. Вот как модули SnapEX Pay обрабатывают продление.
Как узнаётся вернувшийся клиент
Продление — это оплата за пользователя, который уже есть в панели.
- Сервисы для Marzban, 3x-ui, Remnawave: ваш магазин или бот передаёт в новой оплате то же имя пользователя. Существующий пользователь продлевается, новый — создаётся.
- Telegram VPN-бот: имя пользователя в панели —
tg<telegram_id>, поэтому каждому аккаунту Telegram соответствует ровно один VPN-пользователь, и повторная оплата с того же аккаунта его продлевает.
От какой даты считаются новые дни
Ранняя оплата не должна сжигать оставшиеся дни, а поздняя — дарить дни перерыва.
- Marzban: подписка продлевается от текущей даты окончания или от сейчас, если она уже истекла.
- 3x-ui: срок сдвигается вперёд или считается от сейчас, если уже закончился.
- Remnawave: дни тарифа добавляются к более поздней из дат: сейчас или текущее окончание.
- Telegram VPN-бот: вернувшийся клиент продлевается от текущей даты окончания.
Трафик при продлении
- Marzban: тарифы с трафиком добавляют новую квоту сверх использованного.
- 3x-ui: трафик сбрасывается для тарифов с квотой, клиент снова включается.
- Remnawave: лимит трафика ставится по новому тарифу.
- Telegram VPN-бот: тариф с лимитом трафика начинает новую квоту.
Конфиг клиента продолжает работать
В 3x-ui продлённый клиент сохраняет UUID и subId, поэтому конфиг, уже импортированный на устройства клиента, продолжает работать — ничего пересылать не нужно. В Marzban, Remnawave и в боте существующий пользователь продлевается, а не заменяется, и после оплаты модуль возвращает ссылку на подписку.
Никаких дублей, если вебхук пришёл дважды
Вебхук может прийти больше одного раза, иногда одновременно. Все четыре модуля идемпотентны: каждый счёт выдаёт доступ только один раз, даже при повторных или одновременных доставках. Прежде чем что-то делать, модуль проверяет подпись HMAC-SHA256 (окно 5 минут) и перечитывает счёт через API SnapEX Pay; доступ выдаёт только оплаченный счёт. Бот дополнительно проверяет, что счёт относится к его собственному заказу.
Если панель недоступна в момент оплаты
В сервисе для Marzban обработчик вебхука отвечает 502, если панель не отвечает, и SnapEX Pay повторяет доставку позже — продление применится, когда панель поднимется. Вебхуки вообще повторяются: SnapEX Pay делает до 5 попыток.
Смена цен не трогает оплаченные заказы
Telegram VPN-бот хранит в каждом заказе копию тарифа, поэтому правка PLANS не меняет уже оплаченные заказы.
Проверьте продление без реальных денег
Во всех модулях есть тестовый режим: тестовые счета подтверждаются сами и не двигают реальные деньги. Создайте пользователя одной тестовой оплатой, оплатите ещё раз для того же имени или аккаунта Telegram и проверьте новый срок в панели. Подробнее: Как протестировать криптоплатежи без реальных денег.
Модули: Marzban, 3x-ui, Remnawave, Telegram VPN-бот. Обзор для VPN-сервисов: Криптоплатежи для VPN-сервисов. Регистрация: pay.snapex.pro.