Moon

 · 5 days ago

X402支付在Rails中的执行顺序与逻辑

总结:JS → Middleware → (402) JS 签名 → Middleware 验证 → Controller/内容 → JS 渲染。

X402 支付执行顺序与逻辑

整体流程

  1. 用户访问页面(e.g., /posts/1):
    • JS (Stimulus connect/load):触发 fetch(url) 发送 GET 请求。
  2. 服务器处理 (外到内)
    • Middleware.call(env):检查头,若无 X402-Payment + 条件满足 → 返回 402 + WWW-Authenticate 头(支付细节)。
    • Controller.show:若无中间件拦截,执行业务逻辑;但在 402 场景下,中间件先拦截,返回 402(不进入 Controller)。
  3. 402 触发
    • JS handlePayment:解析头 → 钱包签名 (EIP-712) → 构建 payment → fetch(url, { method: 'POST', headers: { 'X402-Payment': JSON.stringify(payment) } })。
  4. 支付处理
    • Middleware.call(env):检测 HTTP_X402_PAYMENT 头 → 验证签名 + 结算 API → 返回 200 + 内容。
    • JS load:收到 200 → 渲染 HTML。
关键逻辑

  • Middleware:优先拦截所有请求(外层),处理 402/支付验证;Controller 只在 200 时执行。
  • JS:异步 fetch + 递归 load(防循环用 status 检查)。
  • 循环避免:支付成功后返回 200,JS 渲染结束。
总结:JS → Middleware → (402) JS 签名 → Middleware 验证 → Controller/内容 → JS 渲染。