VPN 面板
Marzban VPN 加密货币支付
一个小型自托管服务,通过 SnapEX Pay 以加密货币销售 Marzban VPN 订阅。您的商店或 Telegram 机器人向它请求结账链接,客户在 SnapEX Pay 页面付款(TRC20、ERC20 或 BEP20 上的 USDT,以及 SnapEX 针对该金额提供的其他方式),账单支付后,服务会在您的 Marzban 面板中创建或续期用户并返回订阅链接。
免费。版本 1.1.0。
功能
- 无需运行钱包或区块链节点。
POST /v1/checkout为某个套餐创建 SnapEX Pay 账单并返回pay_url;GET /v1/orders/{invoice_id}从服务自身的记录(由 Webhook 更新)返回状态和订阅 URL,机器人可以轮询。- 签名 Webhook(HMAC-SHA256,5 分钟时间戳窗口)。从不信任 Webhook 内容:账单会从 SnapEX Pay API 重新读取,只有在已支付时才开通用户。
- 幂等:重复或并发的 Webhook 投递只会为一张账单开通一次。
- 新用户获得面板中所有已配置入站的协议;现有用户从当前到期时间续期(如果已过期或原本没有到期时间,则从现在开始),流量套餐会把套餐配额加在当前限额或已用流量(取较大者)之上。
- 套餐通过一个环境变量设置;订单保存在 SQLite 中。测试模式不涉及真实资金。
安装
- 下载并解压压缩包,然后在其目录中运行
cp .env.example .env。 - 在 SnapEX Pay 商户后台创建一个具有
invoices.read和invoices.write权限的 API 密钥,填入SNAPEX_API_KEY。 - 设置
API_TOKEN(例如openssl rand -hex 32)、MARZBAN_URL和 Marzban 管理员凭据(MARZBAN_USERNAME和MARZBAN_PASSWORD),并在PLANS中设置套餐(id:days:usd:traffic_bytes,0字节 = 不限)。 - 启动:
docker compose up -d,然后检查curl http://127.0.0.1:8080/health。将服务置于 HTTPS 反向代理之后。 - 在后台 → Developers 将 Webhook URL 设为
https://<your service>/webhook,将whsec_…签名密钥(仅在首次保存 URL 时显示一次)复制到SNAPEX_WEBHOOK_SECRET并重启服务。 - 从您的商店或机器人调用
POST /v1/checkout,带上Authorization: Bearer <API_TOKEN>,把pay_url发给客户,并轮询GET /v1/orders/{invoice_id}获取订阅链接。如需无真实资金测试,设置SNAPEX_ENVIRONMENT=test。
设置
| SNAPEX_API_KEY | 具有 invoices.read 和 invoices.write 权限的商户 API 密钥(smk_…)。 |
|---|---|
| SNAPEX_WEBHOOK_SECRET | 您的 Webhook 端点的签名密钥(whsec_…)。 |
| SNAPEX_ENVIRONMENT | live 或 test。测试账单不涉及真实资金。 |
| SNAPEX_FEE_ON | 谁支付 SnapEX 服务费:merchant 或 customer。 |
| API_TOKEN | 您的机器人或商店发送到 /v1/checkout 和 /v1/orders/* 的 Bearer 令牌。 |
| MARZBAN_URL, MARZBAN_USERNAME, MARZBAN_PASSWORD | 面板 URL 和管理员凭据(或现成的 MARZBAN_TOKEN;令牌会过期,因此长期运行的服务更适合使用用户名和密码)。 |
| PLANS | 逗号分隔的 id:days:usd:traffic_bytes,默认 month:30:5.00:0,quarter:90:12.00:0。 |
| SNAPEX_PARTNER_ID | 可选:为您配置此模块的集成商的 Partner ID(SnapEX Pay 推荐计划)。如果是您自己安装,请留空。 |
常见问题
可以在 Telegram 机器人中使用吗?
可以。机器人调用 POST /v1/checkout,把 pay_url 发给用户,并轮询 GET /v1/orders/{invoice_id} 获取订阅链接。另外还有适用于 Marzban、3x-ui 和 Remnawave 的完整 Telegram 机器人。
现有用户再次付款会怎样?
订阅从当前到期时间续期(如果已过期或原本没有到期时间,则从现在开始);流量套餐会把套餐配额加在当前限额或已用流量(取较大者)之上。
Webhook 会重复开通用户吗?
不会。重复或并发的投递只会为一张账单开通一次,服务在执行任何操作前都会从 SnapEX Pay API 重新读取账单。
付款到达时 Marzban 面板宕机怎么办?
Webhook 处理程序返回 502,SnapEX Pay 会稍后重试投递。
为什么需要 HTTPS?
SnapEX Pay 只向 https:// URL 投递 Webhook,因此请将服务置于 nginx、Caddy 或 Traefik 之后。
准备好接收加密货币了吗?
创建商户账户,获取 API 密钥并连接模块。每笔支付 1%,无月费。