x402 接入端到端联调清单

单测全绿,联调一样会挂。 x402 的坑几乎都在边界上:402 响应头发了但浏览器读不到(缺 CORS 暴露头)、 签名算对了但 facilitator 拒(nonce 重复 / 金额单位错)、钱到了但账对不上(对账源用错)。 这个工具按「免费发现 → 402 → 签名支付 → 拿到数据 → 链上对账」五步, 生成一份能一次跑通的联调脚本和一份每步「期望值 + 常见失败原因」的清单。

免费 · 无需登录 本地生成 · 内容不上传 对应事故 · 402 头发了但浏览器读不到

1你的端点

2计价与结算

结果联调概览

输出端到端联调脚本

0 行
—
五步一次跑完,任何一步不是期望值就停下来报原因。

输出分步清单(可交给同事照着做)

0 行
—

速查联调时的常见失败

现象真凶怎么修
抓包看到 402,JS 里读不到头没设 Access-Control-Expose-Headers把 payment-required 等自定义头加进暴露列表
facilitator 报 invalid noncenonce 复用,或签名域与链 ID 不一致每次重新生成随机 nonce;核对 domain 的 chainId
facilitator 报 amount mismatch金额单位错(USDC 6 位小数)0.01 USDC = 10000,不是 1e16
买家没 gas 也能付款(这是对的)EIP-3009 transferWithAuthorization 由 facilitator 代付 gas买家只需持有 USDC
钱到账但对账对不上用平台自己的记录对账,而不是链上事件只认链上 Transfer 事件,容差 ±$0.02
一直不到账没到起结门槛 / 还没到结算日自然月汇总,次月 10 号结算,$50 起结
探活把端点判成已死MCP 端点返回 SSE,客户端按 JSON 解析失败只按 HTTP 状态码判定,200 与 402 都算活
这个坑我们踩过

1 · 402 发了,浏览器读不到。抓包能看到响应头,JS 里却拿不到——自定义响应头必须显式加进 Access-Control-Expose-Headers,否则浏览器按安全策略直接屏蔽。

2 · 探活误判。用 JSON 客户端去探返回 SSE 的 MCP 端点,一律被判成「已死亡」;正确做法是只看状态码,200 和 402 都算活着。

3 · 金额单位。USDC 是 6 位小数,0.01 要写成 10000;写成 1e16 会被 facilitator 直接拒,且报错信息不会告诉你单位错了。

4 · 对账只认链上。平台自己的记录可能因为进程重启、内存旧值覆盖而不准,对账必须以链上 Transfer 事件为准。