VPN 面板
支持加密货币付款的 Telegram VPN 机器人
一个以加密货币销售 VPN 订阅的自托管 Telegram 机器人。客户在聊天中选择套餐,并在 SnapEX Pay 页面付款(TRC20、ERC20 或 BEP20 上的 USDT,以及 SnapEX 针对该金额提供的其他币种)。付款确认后,机器人会在您的 Marzban、3x-ui 或 Remnawave 面板中创建或续期用户,并把订阅链接发送到同一个聊天。
免费。版本 1.1.0。
功能
- 无需运行钱包或区块链节点:资金进入您的 SnapEX Pay 商户余额。
/start以按钮显示您的套餐;每次点击都会创建一张 SnapEX Pay 账单,并回复一个支付按钮。- 支持 Marzban、3x-ui(3.1+ 的 clients API 和旧的 inbound API)以及 Remnawave 2.x 和 3.x。使用
PANEL_TYPE=none时,机器人只确认付款,由您自行发放访问权限。 - 签名 Webhook(HMAC-SHA256,5 分钟窗口);账单会从 SnapEX Pay API 重新读取,只有已支付且属于机器人订单时才开通。重复投递只会开通一次。
- 续期:回头客(同一 Telegram 账户)从当前到期时间续期;有流量限制的套餐会开始新的配额。
- 单个容器,使用长轮询,因此只需开放 Webhook 端口。订单保存在 SQLite 中,并附带套餐副本。
安装
- 在 SnapEX Pay 商户后台创建一个具有
invoices.read和invoices.write权限的 API 密钥。 - 下载并解压压缩包,运行
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)。将其置于 Caddy 或 nginx 等 TLS 反向代理之后。 - 在后台添加 Webhook 端点
https://<your bot host>/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)和 Webhook 密钥(whsec_…)。 |
| SNAPEX_ENVIRONMENT, SNAPEX_FEE_ON | live 或 test 账单;谁支付 SnapEX 手续费 — merchant 或 customer。 |
| PANEL_TYPE | marzban、3xui、remnawave 或 none,以及该面板的凭据。 |
| PLANS | 逗号分隔的 id:days:price_usd:traffic_bytes;0 字节 = 不限。 |
常见问题
机器人支持哪些面板?
Marzban、3x-ui(MHSanaei,两个 API 版本)以及 Remnawave 2.x 和 3.x。使用 PANEL_TYPE=none 时只收款。
客户如何与 VPN 用户对应?
面板用户名为 tg<telegram_id>,因此每个 Telegram 账户恰好对应一个 VPN 用户,再次付款会为其续期。
以后修改价格会怎样?
订单保存了套餐副本,因此修改 PLANS 不会改变已支付的订单。
一笔付款会被重复开通吗?
不会。重复或并发的 Webhook 投递只会开通一次,每次点击按钮都会生成自己的账单。
服务器需要为 Telegram 开放端口吗?
不需要。机器人使用长轮询;只需为 SnapEX Pay 开放 HTTPS 后面的 Webhook 端口。
准备好接收加密货币了吗?
创建商户账户,获取 API 密钥并连接模块。每笔支付 1%,无月费。