StableOps
常见问题

为什么支付在等待审批,应该如何恢复?

了解 Agent 支付为什么需要管理员做出一次性决定,以及审批后如何安全恢复原支付 Intent。

awaiting_approval 表示这笔支付符合人工决策条件,但尚未获得授权。保存返回的 Intent ID,由组织管理员批准或拒绝锁定的付款详情;审批通过后,使用 resumeIntentId 恢复同一个 Intent

等待审批时不要创建替代 Intent。

为什么需要审批

新建付款 Agent 默认采用保守配置:自动付款阈值为零。在运营者创建并激活明确的策略版本前,每笔支付都需要审批。

激活策略后会出现三种结果:

策略结果支付结果
来源和收款方均在允许列表中,金额不超过自动付款阈值,并满足其它限制自动批准
来源未知、收款方未知,或金额高于自动付款阈值但没有超过单笔限额等待一次性审批
金额超过策略或平台硬上限、付款信息不受支持、预算不足或风险门禁失败直接拒绝,审批无法覆盖

对未知来源或收款方的审批只适用于当前 Intent,不会把它加入策略允许列表。以后再次向同一个未知目标购买时,仍可能需要审批。

管理员批准的内容

审批会锁定组织、环境、Agent、钱包、请求方法、来源、收款方、网络、资产合约、最高金额、x402 付款要求、策略版本和过期时间的快照。

管理员只能批准或拒绝该快照,不能修改收款方、资产、网络或金额后再批准。管理 API Key 可以读取审批队列,但做出决定必须使用当前组织管理员的短时会话。建议直接使用 Agent Payments 审批页

安全恢复流程

保存首次请求的结果:

const result = await agent.x402Fetch(resourceUrl, {
  idempotencyKey: 'research-task-284:market-report:v1',
})

if (result.status === 'awaiting_approval') {
  await savePendingPayment({
    intentId: result.intentId,
    approvalId: result.approvalId,
    approvalExpiresAt: result.approvalExpiresAt,
  })
}

确认审批状态确实为 approved 后,读取先前保存的 Intent ID 并恢复:

const pending = await loadPendingPayment()

const resumed = await agent.x402Fetch(resourceUrl, {
  resumeIntentId: pending.intentId,
})

恢复操作不会复用之前的远端 402 响应。SDK 会重新请求资源,把最新付款要求与已审批 Intent 比较,全部符合后才申请执行授权。

x402 付款要求发生变化时

旧审批不能授权一笔实质不同的付款:

  • 来源、收款方、网络或资产变化会使旧审批失效;
  • 金额超过已批准的最高值会使旧审批失效;
  • 金额不变或降低时,也只有其它锁定字段全部一致才能继续。

这样可以防止卖方在人工决定和实际签名之间更换收费内容。不要通过直接调用签名器或修改 Intent 载荷绕过不一致检查。

审批过期或被拒绝时

过期或被拒绝的审批不能恢复,StableOps 会释放其尚未提交的预算预留。如果业务仍要购买,应先重新检查当前资源报价和策略,再把它作为一笔新的、明确决定的购买处理;不要尝试恢复已经终止的 Intent。

审批默认有效 30 分钟。如果执行授权已经签发,则由执行授权自身的短时有效期和随机数状态决定后续结果;审批到期不会取消一笔可能已经提交的付款。

相关内容

这篇文档怎么样?

最后更新

本页内容