如何使用 Webhooks 自动化 稳定币 支付对账(开发者运行手册)

发布: (2026年3月10日 GMT+8 10:35)
3 分钟阅读
原文: Dev.to

Source: Dev.to

如何使用 Webhook + 确定性 ID 自动化稳定币支付对账

如果你的团队已经拥有 Web2 后端并希望避免手动的加密货币对账,下面是一套实用流程:

  1. 创建结账(支付链接)
  2. 接收 webhook 事件payment.createdpayment.confirmedpayment.rejected
  3. 拉取订单凭证 以供审计
  4. 在内部数据库中写入确定性账本键

资源

  • GitHub 入门套件
  • Postman 文档

在 10 分钟内运行 API 流程(Postman)

将以下文件导入 Postman

  • NUVO-Verify-Developer-Inbound.postman_collection.json
  • NUVO-Verify-Sandbox.postman_environment.json

然后执行以下步骤

  1. 商户登录
  2. 创建支付链接
  3. 创建 Webhook
  4. 发送测试 Webhook
  5. 获取订单凭证

示例 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_typeWebhook 事件(createdconfirmedrejected
token_symbol稳定币符号(例如 USDC)
amount交易金额
tx_hash区块链交易哈希
traffic_light状态指示灯(如 green/yellow/red)
received_at接收到 webhook 的时间戳
raw_payload_json用于审计的完整 webhook 负载

关键要点

  • 无需手动逐笔交易匹配。
  • 确定性键可防止重复写入。
  • 证明端点提供已完成订单的可审计证据。
  • 保持现有的 Web2 后端,只需添加一个具备幂等写入能力的 webhook 接口。
  • 先在沙箱环境中测试,随后迁移到生产环境。
0 浏览
Back to Blog

相关文章

阅读更多 »

开发者角色,重新定义

Developer = Product + Architect + QA。 那就是在 AI 代理带来的新现实下,今天软件工程师的角色。如果那个公式...