为什么支付在等待审批,应该如何恢复?
了解 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 分钟。如果执行授权已经签发,则由执行授权自身的短时有效期和随机数状态决定后续结果;审批到期不会取消一笔可能已经提交的付款。
相关内容
这篇文档怎么样?
最后更新