如何使用 Webhooks 自动化 稳定币 支付对账(开发者运行手册)
发布: (2026年3月10日 GMT+8 10:35)
3 分钟阅读
原文: Dev.to
Source: Dev.to
如何使用 Webhook + 确定性 ID 自动化稳定币支付对账
如果你的团队已经拥有 Web2 后端并希望避免手动的加密货币对账,下面是一套实用流程:
- 创建结账(支付链接)
- 接收 webhook 事件(
payment.created、payment.confirmed、payment.rejected) - 拉取订单凭证 以供审计
- 在内部数据库中写入确定性账本键
资源
- GitHub 入门套件
- Postman 文档
在 10 分钟内运行 API 流程(Postman)
将以下文件导入 Postman
NUVO-Verify-Developer-Inbound.postman_collection.jsonNUVO-Verify-Sandbox.postman_environment.json
然后执行以下步骤
- 商户登录
- 创建支付链接
- 创建 Webhook
- 发送测试 Webhook
- 获取订单凭证
示例 webhook 处理程序(Node.js)
import express from "express";
import crypto from "crypto";
const app = express();
app.use(express.raw({ type: "*/*" }));
const WEBHOOK_SECRET = process.env.NUVO_WEBHOOK_SECRET;
function verifySignature(rawBody, signatureHeader, secret) {
const expected =
"sha256=" +
crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(signatureHeader || "");
const b = Buffer.from(expected);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
app.post("/webhooks/nuvo", (req, res) => {
const sig =
req.header("x-nuvo-signature") ||
req.header("x-signature") ||
"";
if (!verifySignature(req.body, sig, WEBHOOK_SECRET)) {
return res.status(401).json({ ok: false, error: "invalid signature" });
}
const payload = JSON.parse(req.body.toString("utf8"));
const ledgerKey = `${payload?.data?.orderId}:${payload?.data?.tokenSymbol}:${payload?.event}`;
// upsert to your internal ledger table
// upsertLedger({ ledgerKey, payload });
return res.json({ ok: true });
});
app.listen(8787, () => console.log("listening on :8787"));
推荐的最小表字段
| 列名 | 描述 |
|---|---|
ledger_key (unique) | 确定性键(orderId:tokenSymbol:event) |
order_id | 原始订单标识符 |
event_type | Webhook 事件(created、confirmed、rejected) |
token_symbol | 稳定币符号(例如 USDC) |
amount | 交易金额 |
tx_hash | 区块链交易哈希 |
traffic_light | 状态指示灯(如 green/yellow/red) |
received_at | 接收到 webhook 的时间戳 |
raw_payload_json | 用于审计的完整 webhook 负载 |
关键要点
- 无需手动逐笔交易匹配。
- 确定性键可防止重复写入。
- 证明端点提供已完成订单的可审计证据。
- 保持现有的 Web2 后端,只需添加一个具备幂等写入能力的 webhook 接口。
- 先在沙箱环境中测试,随后迁移到生产环境。