简中

IFF 实用教程

集成之前,
先检查 x402 端点。

在连接付款逻辑前,先阅读未付款即取得并已保存的 x402 v2 证据,再选择适合你角色的步骤。

阅读图解证据示例

教学示例 · · 非实时数据

阅读图解证据卡。

静态的合成教学示例,数值仅供说明。此资源不代表真实的 observed 或 verified 卡片,打开本页也不会向服务提供者发出要求。

示例数值不是实时证据
资源
https://api.example.com/v1/resource
层级
observed Observed from public sources. Ownership not verified. Not an IFF-verified Evidence Card. 来自公开来源的观测。所有权未经验证。不是 IFF 验证的证据卡。
协议
valid · x402 v2 通过协议检查。
付款选项
exact · eip155:8453 · synthetic token contract 0x…C3 · 1000 atomic units · payTo 0x…A1 合成值。缩写识别码仅供显示,不能用作付款指示。
新鲜度
fresh at sample time 实际卡片会显示观测时间与间隔;使用前请重新检查。
要求
current run: 4 observations 多次观测相符;不能解释服务提供者为何选择这些条件。

可以得出什么结论

在真实卡片中,这些字段表示监测器在观测时间记录了协议有效、未付款即取得的挑战,其中包含列出的付款选项。

仍无法确定什么

此示例不能证明所有权、付款安全性、服务交付、结算或服务提供者的意图,也没有真实报告、签名或日志证明。

API 使用者

使用前检查端点。

不需钱包、API 密钥或付款,即可查看 IFF 的观测。

准备
API 资源的完整准确 URL
你将获得
已保存的公开证据卡(如有)
打开实时查询
  1. 使用资源路径,而不是网站首页。

    打开实时查询,将完整 URL 粘贴 x402 endpoint URL。服务提供者的首页不会搜索该域名上的所有 API。

    资源 URL 示例
    https://api.solmachina.com/v1/epoch

    此 URL 在 2026 年 9 月 6 日曾有公开证据。这只是示例,不代表推荐。

  2. 选择付款网络,再点击“Inspect evidence”。

    Base、BSC、0G 与 Robinhood Chain 会筛选已保存挑战中的主网选项;All networks 包含测试网与其他网络。查询不会调用服务提供者;选择网络不能改变其接受的条件,也不能证明结算。

  3. 分别阅读每个维度。

    所有权
    来源站控制权是否已验证?observed 卡片仍可能未验证。
    协议
    未付款的响应是否通过 x402 v2 检查?这不是付款后结果的测试。
    新鲜度
    何时观测,目前是否仍在监测时间窗口内?
    可用性
    查看样本数与时间范围。缺少量测不代表通过。
了解每个证据字段

代理与应用开发者

把证据放在付款逻辑之前。

比较客户端收到的要求与 IFF 的独立观测。

准备
x402 v2 客户端与付款策略
你将获得
比较判定,而非付款批准
打开 SDK 教程
  1. 安装预检 SDK。

    使用 Node 20+ 或现代浏览器。不需 IFF API 密钥。

    终端
    npm install @ifandonlyif/x402-preflight
  2. 将经过检查的 fetch 传给付款客户端。

    包装器会在付款程序库动作前检查 402。它不持有钱包密钥,也不执行付款。

    TypeScript · 集成模式
    import { wrapFetch } from "@ifandonlyif/x402-preflight";
    
    const preflightFetch = wrapFetch(fetch, {
      onDiverged: "throw",
      onStale: "strict",
      onUnobserved: "warn",
    });
    
    // Pass preflightFetch as your payment client's fetch.
    // Creating this function alone makes no request.

    不是完整结帐流程。替代方式:verify()、HTTP API、MCP 指令。

  3. 决定应用如何处理不确定性。

    consistent
    比较相符。是否继续仍由你的付款策略决定。
    diverged
    要求不同。此示例会在付款逻辑继续前抛出错误。
    stale
    观测已过期。strict 在过期且不相符时抛出错误,过期但相符时只发出警告。
    unobserved
    没有可比较的观测。此示例发出警告,不会自动阻止。

端点所有者

证明控制权,
开始运行。

API 流程。你不需要新域名,但必须控制端点的来源站。

准备
支持 personal-sign 的 Ethereum EOA 钱包(不支持合约钱包)、公开 x402 v2 端点、well-known 文件访问权
你将获得
验证成功后的所有者访问权
开始钱包验证
  1. 签署服务器登录挑战。

    按照钱包验证步骤要求挑战,签名其消息,再提交签名以取得访问令牌与更新令牌。令牌须保密;不要把私钥传给 IFF。

  2. 注册准确的端点 URL。

    用访问令牌与端点数据调用 POST /api/v3/endpoints,保存返回的 claim_attempt_id 与 ownership 文档。注册只是开始声明流程,尚未授予所有者访问权。

    请使用公开 HTTPS 的 443 端口,不得包含认证数据、查询字符串、片段或重定向。

  3. 发布所有权文件并排队验证。

    提供返回的 ownership.document,位置必须是指定且完全相符的 ownership.verification_url;通常是相同来源站的 /.well-known/iff-trust.json。挑战会在 24 小时后过期。

    同一来源站若有多个端点,保留既有声明,并依 claims 格式加入新声明。

    调用 POST /api/v3/endpoints/:id/verify-ownership。202 只代表已排入队列,不代表验证完成;请用 GET /api/v3/endpoints 查看结果。

  4. 等待监控证据,然后添加通知。

    所有者访问权与公开证据彼此独立。verified 层级首次发布需要所有权,加上至少三次通过的观测。请持续公开所有权文件,以便重新验证。

    验证后,可针对状态或要求变更设置 Webhook。保存只显示一次的共享密钥,验证每次发送的签名与时间戳,并将重试去重。

查看请求示例与所有权文件规则

证据审阅者

检查签署内容,
与信任决策分开处理。

检查实验性的签名验证结果信封 IFF Service Receipt v2。

准备
收据 JSON 或完整 API 响应;固定信任(pinning)还需要通过独立渠道获取的签发者数据
你将获得
签名、签发者、时间与绑定各自的检查结果
打开收据验证工具(英文)
  1. 加载 JSON,而不是 URL。

    粘贴收据封套或完整 API 响应,或加载 JSON 文件。端点 URL 请改用实时查询。解析与签名检查在浏览器内执行;签发者检查可能会取得 IFF 公开密钥目录。

    没有收据?请开发者提供含 service_receipt 的 IFF 响应,可通过可选的直接 API 集成要求;一般响应不包含。

  2. 区分有效签名与可信签发者。

    签名有效表示内嵌密钥签名了该主体;与目录相符只是识别密钥。若要独立固定,请输入通过另一个可信管道取得的预期签发者与完整 sha256: 密钥指纹,不要从正在验证的收据复制。

  3. 阅读签署主体、时间范围与绑定。

    确认签名的 URL 与结果符合预期。有效的旧签名仍可能属于已过期收据。单独收据无法证明外层响应与签名主体一致。

    只验证收据签名,不会验证被引用的观测、日志收录或链上锚定。

阅读收据规范与验证范围

结果不符合预期时

确认下一步。

缺少证据和检查失败需要不同的处理方式。

检查通过代表应该付款吗?

不代表。协议有效性、所有权、新鲜度、要求一致性与收据真实性各自回答不同问题,没有一项保证付费服务或其结果。请维持自己的付款政策与风险上限。