首页 / 快速开始
快速开始
从注册到收到第一条到账确认 webhook,大约 5 分钟。
1. 注册账号,创建 API key
- 在 tronhooks.com/app 注册(邮箱+密码,或 TronLink 钱包登录)。
- 在 API keys 区创建 key。前缀与网络绑定:
tw_test_…只用于 Nile 测试网,tw_live_…只用于主网。key 明文只显示一次,立即保存。
2. 注册监控地址
curl -X POST https://tronhooks.com/v1/watches \
-H "Authorization: Bearer tw_live_..." \
-H "Content-Type: application/json" \
-d '{
"address": "T你的地址...",
"asset_filter": "USDT",
"direction": "incoming",
"webhook_url": "https://your-server.example/tron-hook"
}'
201 响应包含 watch 信息和 只显示一次 的签名密钥 secret(whsec_…)。
⚠️ secret 只显示一次,服务端加密存储、无法找回——丢了就删掉 watch 重建一个。
生效时间:新 watch 约 3 秒内生效(一个扫描周期);生效前的历史转账不会追溯通知。
direction 可选 incoming(入账,默认)/ outgoing(转出)/ both(双向)。
3. 接收并验签
到账固化确认后,我们 POST 一条 JSON,带 X-Signature 头。必须对原始请求体验签:
import express from 'express';
import { constructEvent } from '@tronhooks/sdk'; // npm i @tronhooks/sdk
const app = express();
app.post('/tron-hook', express.raw({ type: 'application/json' }), (req, res) => {
const event = constructEvent(req.body, req.header('x-signature'), process.env.WHSEC);
console.log(`${event.amount} ${event.asset} → ${event.to}`);
res.sendStatus(200); // 任何 2xx 都算确认收到
});
必须用原始请求体(raw body)验签——任何 JSON 重新序列化(JSON.stringify(req.body)、框架 body parser)都会改变字节顺序导致验签失败。所以示例用 express.raw()。详细说明(含 Python 版):验签指南(英文)。
4. 随时对账
curl "https://tronhooks.com/v1/events?limit=10" \
-H "Authorization: Bearer tw_live_..."
GET /v1/events 返回全部事件与投递状态——接收端宕机时的兜底。投递语义是 at-least-once:按 event_id 去重。
不写代码?Telegram 路径
- 在 /app 注册。
- 点 Connect Telegram → 打开链接 → 按 Start(群聊:把
@tronhooks_bot拉进群,发/bind 绑定码)。 - 添加地址,通知目标选 → Telegram。到账确认后 TG 消息直达,带 Tronscan 链接。
在 Nile 测试网试用
- 去 nileex.io 水龙头 免费领测试 TRX 和 USDT。
- 我们监控的 Nile 测试 USDT 合约是
TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj(水龙头发的就是它)。 - 控制台切到 Nile testnet,建
tw_test_…key 和 watch,给自己转一笔水龙头 USDT 即可看到完整流程。
收不到回调?三个常见原因
- URL 不可达或被安全规则拒绝:必须是公网可解析的 http(s) 地址,内网/保留地址(localhost、10.x、192.168.x 等)在创建和投递时都会被拒。开发期可用 webhook 调试器。
- 验签失败:几乎都是没用原始 body(见上面的加粗提示)。
- 看投递日志:控制台 → Events & delivery log → 点开事件,每次尝试的响应码都有记录(重试节奏 1m/5m/30m/2h/6h,之后进死信)。
整个接入就这些。免费档 3 个监控地址,无需绑卡。
打开控制台