ZH
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 中。测试模式不涉及真实资金。

安装

  1. 下载并解压压缩包,然后在其目录中运行 cp .env.example .env。
  2. 在 SnapEX Pay 商户后台创建一个具有 invoices.read 和 invoices.write 权限的 API 密钥,填入 SNAPEX_API_KEY。
  3. 设置 API_TOKEN(例如 openssl rand -hex 32)、MARZBAN_URL 和 Marzban 管理员凭据(MARZBAN_USERNAME 和 MARZBAN_PASSWORD),并在 PLANS 中设置套餐(id:days:usd:traffic_bytes,0 字节 = 不限)。
  4. 启动:docker compose up -d,然后检查 curl http://127.0.0.1:8080/health。将服务置于 HTTPS 反向代理之后。
  5. 在后台 → Developers 将 Webhook URL 设为 https://<your service>/webhook,将 whsec_… 签名密钥(仅在首次保存 URL 时显示一次)复制到 SNAPEX_WEBHOOK_SECRET 并重启服务。
  6. 从您的商店或机器人调用 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_ENVIRONMENTlive 或 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%,无月费。