如何接受加密货币支付:自托管基础设施开发者指南
一份完整的、逐步的操作指南,教您通过自托管、非托管网关接受加密货币支付。从 Docker 部署到 webhook 集成——您所需要的一切,让您以零交易手续费开始接受 USDT、USDC 及其他加密资产,并完全掌控您的私钥。
为什么接受加密货币支付?
加密货币支付已从小众实验发展为主流支付通道,每日处理数十亿美元的交易量。对于商家而言,接受加密支付不再是关于投机——而是关于接入一个更快、更便宜、更具包容性的金融系统。以下是企业将加密结账加入支付栈的原因:
全球覆盖
加密支付无国界,无需货币兑换、无需跨境手续费、无需银行账户。任何拥有钱包的人都可以向您付款,无论他们身在哪个国家、是否有银行账户或信用评分。这将您的业务开放给全球 14 亿无银行账户的成年人和快速增长的加密原生消费群体。
低费用
传统支付处理商收取 1.5–3.5% 加每笔交易固定费用。自托管加密网关收取 0% 交易手续费——您只需支付网络 Gas 费。在 TRON 上,一笔 USDT 转账约需 $0.02–$0.10。在 Arbitrum 等 L2 上,通常低于 $0.01。对于每月处理 $10 万的企业,年节省额超过 $2 万。
无拒付
区块链交易是不可逆的。一旦支付在链上确认,就无法撤销或拒付。这消除了在线商家的第一大成本:支付欺诈和争议费用。对于拒付率可能超过 5% 的数字商品商家而言,改用加密货币可以大幅改善利润空间。
财务隐私
通过自托管、非托管网关,您完全保留对资金和财务数据的控制权。无需 KYC 要求,没有支付处理商账户冻结风险,也没有第三方有权限制您的访问。您客户的支付数据仅在他们与区块链之间——没有支付处理商数据库可能泄露或变现。
自托管 vs 第三方网关
在深入了解设置之前,有必要理解自托管和托管(第三方)加密支付网关之间的优劣权衡。每种模式满足不同需求:
| 方面 | 第三方(托管) | 自托管 |
|---|---|---|
| 设置时间 | 几分钟(SaaS 注册) | 30 分钟(Docker 部署) |
| 交易手续费 | 每笔交易 1–3% | 0%(仅 Gas 费) |
| 月度费用 | $30–$300+ 套餐费 | $10–$20(VPS 托管) |
| 密钥托管 | 托管(处理商持有密钥) | 非托管(您持有密钥) |
| 结算方式 | 延迟(每日/每周批量结算) | 即时(直达钱包) |
| 需要 KYC | 是(企业认证) | 否(自主身份) |
| 账户冻结风险 | 有(处理商决定) | 无(您控制访问) |
| 白标结账 | 需要处理商品牌标识 | 完全白标(您的品牌) |
| 源码访问 | 闭源 | 完全可审计 |
| 维护工作 | 无(托管服务) | 自行管理更新/监控 |
像 XPay Labs 这样的自托管网关适合希望获得最大控制权、最低费用和主权基础设施的开发者及企业。第三方网关适用于偏好全托管解决方案且愿意为便利付费的非技术用户。
前提条件
开始之前,请确保您具备以下条件:
- 1一台 VPS 或云服务器— Linux 机器,至少 1 GB 内存、20 GB 存储空间和公网 IP。Hetzner($5/月)、DigitalOcean($12/月)或 AWS EC2 等提供商均可。
- 2Docker 和 Docker Compose— 安装在您的服务器上。大多数 VPS 镜像已预装 Docker,或者您可以使用官方安装脚本。
- 3一个域名 — 指向您的服务器 IP,用于网关 API 和结账页面,通过 Let's Encrypt 或 Caddy/Nginx 等反向代理实现 SSL。
- 4RPC API 密钥 — 用于您想支持的区块链。TRON 使用 TronGrid,EVM 链使用 Alchemy 或 Infura,以及 SUI RPC 提供商。大部分都有免费套餐。
- 5基础 DevOps 知识— 熟悉命令行、环境变量,以及配置反向代理用于 TLS 终止的能力。
步骤 1:部署核心节点
开始接受加密货币支付的最快方式是使用 Docker Compose。在您的 VPS 上创建一个目录,并将以下内容保存为 docker-compose.yml:
version: '3.8'services: xpay-gateway: image: ghcr.io/xpaylabs/gateway:latest container_name: xpay_core restart: unless-stopped ports: - "8080:8080" environment: - XPAY_SEED_PHRASE=${XPAY_SEED_PHRASE} - XPAY_HMAC_SECRET=${XPAY_HMAC_SECRET} - XPAY_TRON_RPC=https://api.trongrid.io - XPAY_EVM_RPC=https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY} - XPAY_WEBHOOK_URL=https://api.yourdomain.com/webhooks/xpay volumes: - ./data:/app/data logging: driver: "json-file" options: max-size: "10m" max-file: "3"运行 docker compose up -d 启动网关。首次启动时,如果未设置 XPAY_SEED_PHRASE,XPay Labs 会生成一个新的 HD 钱包种子,或者从您现有的种子派生地址。网关在 8080 端口上暴露 REST API,并立即开始扫描已配置链上的传入交易。
步骤 2:配置环境变量
网关需要几个环境变量才能运行。在与 docker-compose.yml 相同的目录中创建一个 .env 文件:
| 变量名 | 必填 | 说明 |
|---|---|---|
| XPAY_SEED_PHRASE | 是 | HD 钱包派生的 BIP-39 助记词种子(12–24 个单词)。离线生成,可使用 'openssl rand -hex 16 | xargs -I echo ' 或使用硬件钱包。 |
| XPAY_HMAC_SECRET | 是 | 用于签名 webhook 负载的 HMAC 密钥。使用 64 字符十六进制字符串。在您的服务器上使用此密钥验证 webhook。 |
| XPAY_TRON_RPC | 可选 | TRON 全节点 URL。默认为 https://api.trongrid.io。生产环境请使用您自己的 TronGrid API 密钥或专用节点。 |
| XPAY_EVM_RPC | 可选 | 您要支持的链的 EVM RPC URL。对于多链支持,分别指定每条链(例如 XPAY_EVM_RPC_ETH、XPAY_EVM_RPC_BNB)。 |
| XPAY_WEBHOOK_URL | 可选 | 所有支付的默认回调 URL。可按发票单独覆盖。您的服务器必须返回 200 OK 以确认收到。 |
| XPAY_CONFIRMATIONS | 可选 | 触发 webhook 前所需的区块确认数。默认值:TRON 为 19,EVM 链为 12。降低可使检测更快但风险更高。 |
# .envXPAY_SEED_PHRASE="abandon abandon apple ... twelve words here"XPAY_HMAC_SECRET="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1"XPAY_TRON_RPC=https://api.trongrid.ioXPAY_EVM_RPC_ETH=https://eth-mainnet.g.alchemy.com/v2/your_keyXPAY_EVM_RPC_BNB=https://bsc-dataseed.binance.orgXPAY_WEBHOOK_URL=https://api.yourdomain.com/webhooks/xpayXPAY_CONFIRMATIONS=19步骤 3:生成 API 密钥
在网关运行后,生成一个商户 API 密钥来验证您的支付请求。使用管理端点:
curl -X POST "http://localhost:8080/v1/admin/api-keys" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${XPAY_ADMIN_TOKEN}" \ -d '{ "label": "production-checkout", "permissions": ["payments:create", "payments:read"] }'响应中包含一个以 xpay_live_ 为前缀的 API 密钥。请安全存储此密钥——它将取代所有支付 API 调用的用户名/密码认证。您可以为开发、测试和生产环境生成多个具有不同权限范围的密钥。
// Example response{ "id": "key_7f3d9c2a1b", "label": "production-checkout", "key": "xpay_live_8f3a9d7219bc4e5f6a7b8c9d0e1f2a3b4c5d6e7f", "permissions": ["payments:create", "payments:read"], "created_at": "2026-05-22T10:30:00Z"}步骤 4:创建您的第一笔支付
现在您可以创建一笔支付发票。当客户到达结账页面时,您的后端调用此端点:
curl -X POST "https://gateway.yourdomain.com/v1/payments" \ -H "Authorization: Bearer xpay_live_8f3a9d7219bc" \ -H "Content-Type: application/json" \ -d '{ "amount": "100.00", "currency": "USDT", "chain": "TRON", "order_id": "order_783120", "callback_url": "https://api.merchant.com/v1/webhooks/xpay", "customer_email": "[email protected]", "metadata": { "product_id": "prod_456", "plan": "premium_annual" } }'网关响应包含一个从您的种子派生的唯一充值地址、一个发票 ID 以及当前支付状态:
{ "id": "pay_9f3b8c2a1d", "order_id": "order_783120", "amount": "100.00", "currency": "USDT", "chain": "TRON", "deposit_address": "TYpSq7f8MubE8bK6vG7m8F7WbA9c3DxE1F", "qr_code": "https://gateway.yourdomain.com/v1/qr/pay_9f3b8c2a1d", "status": "pending", "expires_at": "2026-05-22T11:00:00Z", "created_at": "2026-05-22T10:00:00Z"}向您的客户显示充值地址和二维码。网关监控区块链上发往此地址的传入交易。一旦检测到并确认后,它会向您的回调 URL 发送 webhook,并将发票状态更新为"confirmed"。
步骤 5:处理 Webhook 回调
XPay Labs 通过 POST 请求向您的 callback_url 发送支付确认 webhook,并在 X-Signature 请求头中附带 HMAC-SHA256 签名。以下是在 Node.js 中验证和处理负载的方法:
import crypto from 'crypto';// Your HMAC secret from XPAY_HMAC_SECRETconst HMAC_SECRET = process.env.XPAY_HMAC_SECRET;export async function POST(request: Request) { const body = await request.text(); const signature = request.headers.get('x-signature'); // Verify HMAC-SHA256 signature const expected = crypto .createHmac('sha256', HMAC_SECRET) .update(body, 'utf8') .digest('hex'); if (signature !== expected) { return Response.json({ error: 'invalid signature' }, { status: 401 }); } const payload = JSON.parse(body); // payload structure: // { // "event": "payment.confirmed", // "payment": { // "id": "pay_9f3b8c2a1d", // "order_id": "order_783120", // "amount": "100.00", // "currency": "USDT", // "chain": "TRON", // "tx_id": "b4f7c3a12d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2", // "from_address": "TXYZ...", // "to_address": "TABC...", // "confirmations": 32, // "status": "confirmed", // "timestamp": 1715875200 // } // } if (payload.event === 'payment.confirmed') { // Fulfill the order await fulfillOrder(payload.payment.order_id, payload.payment); return Response.json({ received: true }); } return Response.json({ received: true });}Webhook 使用指数退避重试机制发送(3 次尝试:10 秒、60 秒、300 秒),直到您的服务器返回 200 OK。使用 payment.id 实现幂等性检查,以防止在重复 webhook 投递时出现双重履约。
支持的链与代币
XPay Labs 开箱即用支持三个区块链生态系统,覆盖绝大多数稳定币和山寨币支付量。每条链都有独特的特点,影响着交易速度、成本和集成方式:
TRON(TRC-20)
TRON 是稳定币支付的主导链,托管着超过 $500 亿的 TRC-20 USDT——超过任何其他区块链。其 3 秒出块时间和低于 1 美分的交易费用使其成为高流量商家支付的理想选择。TRC-20 USDT 占所有链上稳定币转账量的大部分。
- •出块时间:~3 秒,19 个区块确认后终局(约 57 秒)
- •每笔 USDT 转账费用:~0.2–1 TRX($0.02–$0.10),配合能量管理
- •支持的代币:USDT、USDC、USDD、TUSD 以及任意 TRC-20 代币
- •RPC:TronGrid API(免费套餐:每日 1 万次请求)或您自己的全节点
- •地址格式:Base58 T 地址(以"T"开头)
EVM 链(ERC-20)
XPay Labs 支持所有 EVM 兼容链,包括 Ethereum、BNB Chain、Polygon、Arbitrum、Optimism 和 Base。虽然 Ethereum 主网在网络拥堵时费用较高,但 Arbitrum 和 Base 等 L2 网络提供低于 1 美分的交易成本,同时拥有 Ethereum 级别的安全保证。
- •出块时间:2–15 秒,取决于具体链(ETH 主网 12 秒,Polygon 2 秒,Arbitrum 0.25 秒)
- •每笔 USDC 转账费用:~$0.50–$5(ETH),~$0.0003(Polygon),~$0.01(Arbitrum)
- •支持的代币:USDT、USDC、DAI 以及每条链上的任意 ERC-20 代币
- •RPC:Alchemy、 Infura、公共节点或您自己的执行客户端
- •地址格式:0x 十六进制地址(所有 EVM 链相同)
SUI
SUI 是基于 Move 语言构建的新兴 Layer 1 区块链,具备并行执行和亚秒级终局性。虽然其稳定币生态仍在增长,SUI 在所有支持的链中提供了最快的交易终局性,并在加密原生商家和用户中日益受到欢迎。
- •出块时间:~1 秒(通过 Narwhal/Bullshark 共识实现即时终局)
- •每笔交易费用:~0.001 SUI(约 $0.001)——不到 1 美分
- •支持的代币:SUI、USDC(原生)以及自定义基于 Move 的资产
- •RPC:SUI 公共端点或您自己的全节点
- •地址格式:0x 前缀十六进制地址
multi_chain_scan: true。网关根据代币精度归一化金额,一旦任意已配置链收到正确的付款,即触发 webhook。后续步骤
您现在已拥有一个功能完善的自托管加密支付网关。以下是可以进一步探索的内容,以充分利用您的基础设施:
