5 分钟接入 USDT 支付 — Node.js 实战教程

你想在网站、SaaS 或 Telegram Bot 里接受 USDT,但不想搞区块链节点、管理钱包、自己造收银台。

这篇教程帮你从零到一跑通一个 USDT 支付流程 --- 5 分钟 ,用 IronixPay,一个 TRON USDT 支付网关。

最终效果:用户点击「支付」→ 看到收银台(地址 + 二维码 + 倒计时)→ 转账 USDT → 你的服务器收到 Webhook 到账通知。

你需要什么

没了。不需要区块链节点,不需要钱包,不需要智能合约。


第 1 步:拿到 API Key

  1. 登录 IronixPay 控制台
  2. 侧边栏 → 密钥管理
  3. 点击 创建密钥 → 复制(以 sk_test_ 开头)

💡 开发阶段用 sk_test_ 密钥 --- 走 TRON Nile 测试网(免费测试 USDT)。上线后换成 sk_live_ 即可。


第 2 步:后端创建 Checkout Session

你的后端调用 API 创建一个支付会话,IronixPay 会生成唯一的收款地址和收银台链接。

javascript 复制代码
// server.js
const express = require('express');
const app = express();
app.use(express.json());

const IRONIXPAY_SECRET = process.env.IRONIXPAY_SECRET_KEY; // sk_test_...

app.post('/create-checkout', async (req, res) => {
  const response = await fetch(
    'https://sandbox.ironixpay.com/v1/checkout/sessions',
    {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${IRONIXPAY_SECRET}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        amount: 10000000, // 10.00 USDT(微单位:1 USDT = 1,000,000)
        currency: 'USDT',
        network: 'TRON',
        success_url: 'https://yoursite.com/success',
        cancel_url: 'https://yoursite.com/cancel',
        client_reference_id: req.body.orderId,
      }),
    }
  );

  const session = await response.json();
  res.json({ id: session.id, url: session.url });
});

app.listen(3000, () => console.log('Server running on :3000'));

响应里有两个关键字段:

  • url --- 托管的收银台页面(带二维码和收款地址)
  • id --- 会话 ID(形如 cs_abc123...),用于后续追踪

⚠️ 永远不要在前端代码里暴露 sk_test_sk_live_ 密钥。始终从后端创建会话。


第 3 步:引导用户去收银台

最简单的方式 --- 直接跳转:

javascript 复制代码
document.getElementById('pay-btn').addEventListener('click', async () => {
  const res = await fetch('/create-checkout', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ orderId: 'order_001' }),
  });
  const { url } = await res.json();
  window.location.href = url; // → 跳转到 IronixPay 收银台
});
html 复制代码
<button id="pay-btn">支付 10 USDT</button>

用户会看到一个收银台页面 --- 金额、TRON 收款地址、二维码和 30 分钟倒计时。

💡 想把收银台嵌入你自己的页面?用 @ironix-pay/sdk --- 参考 嵌入模式指南


第 4 步:接收 Webhook 到账通知

用户付款后,IronixPay 检测到链上交易,向你的服务器推送 session.completed Webhook:

javascript 复制代码
const crypto = require('crypto');
const WEBHOOK_SECRET = process.env.IRONIXPAY_WEBHOOK_SECRET; // whsec_...

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-signature'];
  const timestamp = req.headers['x-timestamp'];
  const payload = req.body.toString();

  // 1. 验证签名
  const message = `${timestamp}.${payload}`;
  const expected = crypto
    .createHmac('sha256', WEBHOOK_SECRET)
    .update(message)
    .digest('hex');

  if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
    return res.status(401).send('签名无效');
  }

  // 2. 检查时间戳(5 分钟窗口,防重放攻击)
  const now = Math.floor(Date.now() / 1000);
  if (Math.abs(now - parseInt(timestamp)) > 300) {
    return res.status(401).send('时间戳过期');
  }

  // 3. 处理事件
  const event = JSON.parse(payload);
  if (event.event_type === 'session.completed') {
    const { session_id, amount_received } = event.data;
    console.log(`✅ 收到付款!会话: ${session_id},金额: ${amount_received / 1_000_000} USDT`);
    // TODO: 在你的数据库中标记订单为已支付
  }

  res.status(200).send('OK');
});

💡 在控制台 开发者 → 回调管理 中填写你的端点 URL,复制签名密钥(whsec_...)。


完整可运行示例

以下是完整的 server.js --- 直接复制即可运行:

javascript 复制代码
require('dotenv').config();
const express = require('express');
const crypto = require('crypto');
const app = express();

const SECRET_KEY = process.env.IRONIXPAY_SECRET_KEY;
const WEBHOOK_SECRET = process.env.IRONIXPAY_WEBHOOK_SECRET;
const API_BASE = 'https://sandbox.ironixpay.com';

app.use('/public', express.static('public'));
app.use(express.json());

app.post('/create-checkout', async (req, res) => {
  const response = await fetch(`${API_BASE}/v1/checkout/sessions`, {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${SECRET_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      amount: req.body.amount || 10000000,
      currency: 'USDT',
      network: 'TRON',
      success_url: `http://localhost:3000/public/success.html`,
      cancel_url: `http://localhost:3000/public/cancel.html`,
      client_reference_id: req.body.orderId,
    }),
  });
  const session = await response.json();
  res.json({ id: session.id, url: session.url });
});

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const sig = req.headers['x-signature'];
  const ts = req.headers['x-timestamp'];
  const body = req.body.toString();

  const expected = crypto.createHmac('sha256', WEBHOOK_SECRET)
    .update(`${ts}.${body}`).digest('hex');

  if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
    return res.status(401).send('签名无效');
  }

  const event = JSON.parse(body);
  console.log(`[Webhook] ${event.event_type}:`, JSON.stringify(event.data, null, 2));

  if (event.event_type === 'session.completed') {
    console.log(`💰 订单已支付: ${event.data.amount_received / 1e6} USDT`);
  }

  res.sendStatus(200);
});

app.listen(3000, () => console.log('🚀 http://localhost:3000'));
bash 复制代码
# .env
IRONIXPAY_SECRET_KEY=sk_test_你的密钥
IRONIXPAY_WEBHOOK_SECRET=whsec_你的签名密钥
bash 复制代码
npm install express dotenv
node server.js

Telegram Bot?一样的 API

javascript 复制代码
bot.onText(/\/pay/, async (msg) => {
  const res = await fetch(`${API_BASE}/v1/checkout/sessions`, {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${SECRET_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      amount: 5000000,
      currency: 'USDT',
      network: 'TRON',
      success_url: 'https://t.me/your_bot',
      cancel_url: 'https://t.me/your_bot',
    }),
  });
  const session = await res.json();

  bot.sendMessage(msg.chat.id, '💳 支付 5 USDT 完成订单:', {
    reply_markup: {
      inline_keyboard: [[{ text: '🔗 立即支付', url: session.url }]],
    },
  });
});

背后发生了什么

markdown 复制代码
你的应用创建会话 → IronixPay 生成唯一 TRON 收款地址
                                ↓
        用户转账 USDT → 链上交易被检测到
                                ↓
          IronixPay 确认到账 → Webhook 推送到你的服务器
                                ↓
         USDT 自动归集到你的归集钱包 💰

你不需要碰私钥,不需要跑区块链节点。IronixPay 帮你搞定 HD 钱包派生、交易监听和资金归集。


了解更多


IronixPay 出品 --- 面向开发者的 USDT 支付网关。

相关推荐
听麟2 天前
HarmonyOS 6.0+ 跨端会议助手APP开发实战:多设备接续与智能纪要全流程落地
分布式·深度学习·华为·区块链·wpf·harmonyos
TechubNews2 天前
燦谷(Cango Inc)入局AI 資本重組彰顯決心
大数据·网络·人工智能·区块链
每次学一点3 天前
【ZeroTier自研之路】用ZeroNet在ZeroTier中建去中心化网站
网络·经验分享·去中心化·区块链
链上日记3 天前
WEEX 2025年度报告
大数据·人工智能·区块链
Web3VentureView6 天前
X Space AMA回顾|预测熊市底部:当市场寻找价格,SYNBO正在构建未来
人工智能·物联网·金融·web3·区块链
devmoon7 天前
使用 Zombienet 运行平行链网络
web3·区块链·sdk·polkadot·测试网·跨链
qyresearch_7 天前
移动感应健身:全球市场扩张下的中国机遇与破局之道
大数据·人工智能·区块链
软件工程小施同学7 天前
区块链论文速读 CCF A--VLDB 2025 (2) 附pdf下载
pdf·区块链
MQLYES8 天前
26-总结
区块链