
主机和 VPS 客户常常希望用加密货币付款,其中最多的是 USDT。本指南介绍如何在 BILLmanager 6 中添加加密货币支付方式:客户在充值余额或支付订单时选择 SnapEX Pay (crypto),使用 TRON、Ethereum 或 BSC 网络上的 USDT 或其他币种付款,款项在 BILLmanager 中自动入账。您无需运行自己的钱包或区块链节点——资金以 USDT 形式进入您的 SnapEX Pay 商户余额。
付款流程
客户 → 充值或订单 → SnapEX Pay
BILLmanager → SnapEX Pay:USD 账单
客户 → 在 SnapEX Pay 页面付款
SnapEX Pay → 签名 Webhook → BILLmanager
模块 → 通过 API 查询账单 → paid?
BILLmanager:付款已入账
- 客户在支付方式中选择 SnapEX Pay (crypto)。模块按付款金额创建一张以 USD 计价的 SnapEX Pay 账单,并把客户带到支付页面。
- 客户选择币种和网络并付款。账单支付完成后,SnapEX Pay 向您的计费系统发送签名 Webhook。
- 模块通过 SnapEX Pay API 重新读取账单,只有账单状态为
paid且金额正确时才会入账。仅凭 Webhook 正文不会让任何款项入账。
付款通过三种独立方式入账,以先到者为准:签名 Webhook、客户从支付页面返回,以及定期检查(checkpay,每 5 分钟一次)。丢失的 Webhook 不会让已付款项无法入账,同一笔付款也绝不会入账两次。
准备条件
- 任意版本的 BILLmanager 6,以及其服务器的 root 权限。
- 该服务器上的
python33.6+。模块只使用标准库:无需额外的软件包,也不需要billmanager-plugin-python-libs。 - 币种为 USD 的支付方式:SnapEX Pay 账单以美元计价。
- SnapEX Pay 商户账户:在 pay.snapex.pro 注册。
第 1 步:安装模块
下载 snapexpay-billmanager-1.1.0.tar.gz(免费),在 BILLmanager 服务器上以 root 身份运行:
curl -fsSLO https://pay.snapex.pro/downloads/billmanager/snapexpay-billmanager-1.1.0.tar.gz
tar xzf snapexpay-billmanager-1.1.0.tar.gz
cd snapexpay-billmanager-1.1.0
sh install.sh
脚本会把模块复制到 /usr/local/mgr5,添加每 5 分钟运行一次的 checkpay 定时任务(/etc/cron.d/snapexpay)作为兜底,并重启 BILLmanager。如果找不到 BILLmanager 或 python3 3.6+,脚本会给出提示并停止。
第 2 步:获取 API 密钥
在 SnapEX Pay 商户后台打开 Developers 页面,创建 API 密钥。模块需要 invoices.read 和 invoices.write 权限;后台创建的密钥自动拥有 Merchant API 的全部权限,其中包括这两项。密钥只显示一次,请立即复制。重新生成密钥会立即作废旧密钥,因此请同时更新支付方式中的密钥。
第 3 步:添加支付方式
在 BILLmanager 中打开 Provider → Payment methods → Add,选择 SnapEX Pay (crypto)。币种设为 USD,粘贴 API 密钥。
保存时会向 SnapEX Pay 校验密钥:密钥错误或已作废,或币种不是 USD,都无法保存。
其他设置:
- Client pays the network fee——关闭:客户只支付付款金额,各项手续费从您收到的款项中扣除;开启:SnapEX Pay 手续费和网络手续费加在客户应付金额上。详见:加密货币账单的手续费由谁支付。
- Payment window, minutes——SnapEX Pay 支付页面的有效时间:1 到 1440 分钟,默认 60。客户之后再次打开付款时,会生成新的页面。
- Test mode——见第 6 步。
- Partner ID——见第 5 步。
- API URL——留空。
客户用其他货币付款?BILLmanager 会按自己的汇率把金额换算成支付方式的币种(USD),请保持 USD 汇率为最新。
第 4 步:配置 Webhook
Webhook 是可选的,但建议配置:有了它,付款一经确认余额就会入账。
- 在后台的 Developers 页面填写 Webhook 地址
https://<您的计费域名>/mancgi/snapexpayresult并保存。 - 签名密钥
whsec_…只显示一次,就在第一次保存之后。把它粘贴到支付方式设置中的 Webhook secret。
模块如何校验通知:
Webhook-Signature请求头:使用您的密钥对{Webhook-Timestamp}.{原始请求正文}计算的 HMAC-SHA256;未签名或被篡改的请求返回401;Webhook-Timestamp与服务器时钟相差不超过 5 分钟——请保持 NTP 开启;- 账单本身:用您的密钥通过 SnapEX Pay API 重新读取。
如果此时无法访问 API,模块返回 502,SnapEX Pay 会重试投递。后台每个账户只有一个 Webhook 地址;不是本模块创建的账单事件,模块会忽略。即使不配置 Webhook,客户从支付页面返回时以及每 5 分钟的检查也会让付款入账。关于签名和重试的更多内容:加密货币支付 Webhook。
第 5 步:Partner ID——谁配置了模块
Partner ID 字段是可选的。如果您是为自己的主机公司安装 BILLmanager,请留空。
如果您是集成商,为客户配置计费系统,请填写您的 Partner ID:客户的商户账户会绑定到您名下,您将获得该客户付款中我们手续费的 35%。客户自己创建 SnapEX Pay 账户和 API 密钥,资金进入客户自己的余额。条款:SnapEX Pay 集成商合作伙伴计划。
第 6 步:不用真实资金的测试付款
- 另建一个开启 Test mode 的支付方式,并只对测试客户开放(Payment methods → 按客户组限制)。
- 以测试客户身份登录,发起一次充值并选择这个支付方式。
- SnapEX Pay 页面上会有 Test 标记。任选币种和网络:页面会显示一个测试地址,大约 10 秒后付款会自动确认。无需发送任何资金。
- 该付款在 BILLmanager 中应变为已入账。如果没有,请查看
/usr/local/mgr5/var/pmsnapexpay.log以及 Developers 页面上的投递日志。 - 关闭测试模式,或删除测试支付方式。
测试模式关闭后,测试付款绝不会入账,因此测试资金无法支付真实服务。详见:如何不用真实资金测试加密货币支付。
客户看到什么
- 充值或支付订单时的支付方式中有 SnapEX Pay (crypto)。
- SnapEX Pay 支付页面:TRC20、ERC20 和 BEP20 网络上的 USDT 以及其他币种(共 50 多种),前提是 SnapEX Pay 针对该账单金额提供这些币种。
- 付款后客户返回计费系统。如果付款已确认,BILLmanager 显示常规的付款成功页面;如果尚未确认,客户会看到 "Thank you! Your payment is being confirmed on the blockchain"("谢谢!您的付款正在区块链上确认")以及返回付款列表的链接——余额会自动入账。
- 如果客户离开后在付款时限内再次打开付款,进入的是同一个页面,而不会生成第二张账单。
BILLmanager 中会发生什么
- 客户打开付款 → 付款状态变为 In payment,外部 ID 为 SnapEX Pay 账单号(
INV-…)。 - 全额支付 → 付款入账;信息字段显示币种、网络和实收金额。
- 部分支付(客户少付且未及时补足)→ 不入账,日志中记录 closed with a PARTIAL payment (…) - review in SnapEX Pay and credit manually。已收到的款项在您的 SnapEX Pay 余额中。付款不足如何处理:客户付款少于账单金额。
- 未按时支付 → 付款保持 In payment,方便客户重试;最后一张 SnapEX Pay 账单过期一天后,付款被取消。
- 重复支付、付款取消后才支付,或账单关闭后的额外付款 → 记录到日志;资金在您的 SnapEX Pay 余额中。
遇到问题时
- 支付方式无法保存。 检查 API 密钥(错误或已作废)和币种:只接受 USD。
- 客户看到 "Crypto payments are not available for this currency"。 支付方式的币种不是 USD。
- 客户看到 "Could not start the crypto payment"。 SnapEX Pay 拒绝了这张账单;原因见
pmsnapexpay.log。 - Webhook 返回 401。 Webhook 密钥不一致,或服务器时钟不准。
- Webhook 返回 503 "webhook secret is not configured"。 后台已设置 Webhook 地址,但支付方式中的 Webhook secret 为空。
- 客户已付款,但余额没有入账。 在
/usr/local/mgr5/var/pmsnapexpay.log中查找这笔付款:部分支付以及付款取消后才支付的款项都不会自动入账。
卸载模块:在解压后的目录中运行 sh install.sh --uninstall。付款历史保留在 /usr/local/mgr5/var/snapexpay.sqlite 中。
费用
每笔付款 1%,无接入费,无月费。模块免费。
模块页面:BILLmanager。正在为主机业务挑选网关?请看 主机商如何选择加密货币支付网关。主机商概览:主机商的加密货币支付。注册:pay.snapex.pro。