
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 和机器人中,现有用户是被续期而不是被替换,付款后模块返回订阅链接。
Webhook 到达两次也不会重复
Webhook 可能被投递不止一次,有时同时到达。四个模块都是幂等的:即使重复或并发投递,每张账单也只开通一次。模块在执行任何操作前都会验证 HMAC-SHA256 签名(5 分钟窗口),并通过 SnapEX Pay API 重新读取账单;只有已支付的账单才会开通用户。机器人还会检查账单是否属于机器人自己的订单。
付款时面板不可用怎么办
在 Marzban 服务中,如果面板无法访问,Webhook 处理程序返回 502,SnapEX Pay 稍后会重试投递,面板恢复后续费即生效。Webhook 投递总体上都会重试:SnapEX Pay 最多尝试 5 次。
改价不影响已支付订单
Telegram VPN 机器人在每个订单中保存一份套餐副本,因此之后修改 PLANS 不会改变已支付的订单。
无需真实资金测试续费
所有模块都有测试模式:测试账单自动确认,不涉及真实资金。用一次测试付款创建用户,再为同一用户名或 Telegram 账号付款一次,然后在面板中检查新的到期时间。详见:如何不用真实资金测试加密货币支付。
模块:Marzban、3x-ui、Remnawave、Telegram VPN 机器人。VPN 服务概览:VPN 加密货币支付。注册:pay.snapex.pro。