agentwallets.si
← 返回博客

独立解读

Agent 支付失败时会发生什么?从超时、超额和交付失败说起

文章图解 · 概念示意
01请求超时02预算不足03交付失败

类型:本地模拟与失败分析|运行日期:2026-10-28|没有连接真实钱包或支付网络

Agent 调用付费服务后,屏幕显示“请求超时”。它应该立刻再付一次吗?不一定:超时只能说明没有及时收到结果,不能单独证明钱没付出去。

处理失败的第一步,是把付款失败、付款状态未知和服务交付失败分开。

flowchart TD A[请求未获得预期结果] --> B{支付状态?} B -->|明确失败| C[检查原因和允许的处理方式] B -->|未知| D[查询支付或订单状态] B -->|成功| E{服务是否交付?} E -->|已交付| F[关联记录并继续任务] E -->|失败或未知| G[查询交付状态并联系服务商] D --> H[确认状态后再决定是否重试]

常见失败与下一步

场景 知道什么 合理的下一步
预算不足 当前规则不允许本次请求 停止,必要时请求用户调整预算
授权过期 权限不再有效 重新获得授权后再试
支付被拒 此次尝试未获批准,但原因各异 根据服务反馈处理,避免盲目重试
支付请求超时 结果暂时未知 查订单或支付状态;避免直接创建新支付
支付成功、交付失败 钱的状态与服务状态不同 查询交付、依据条款处理重试或退款
收到重复通知 同一事件可能多次到达 根据服务提供的标识去重并核对状态

有些支付方式会异步完成,Stripe 的文档分别列出了完成、异步成功和异步失败事件;具体事件、查询接口和重试策略要遵循实际提供方。Stripe 支付与履约说明

我们做了什么本地模拟?

在本机运行本系列 测试代码,使用本地 payment_lab.py,没有联网也没有真实资金。2026-10-28 运行 5 项测试,全部通过。其中包括:

  1. 模拟付款成功后,把交付记为失败;支付状态仍保留为成功。
  2. 模拟付款超时后,用同一订单标识再次请求;示例返回“状态未知”,不会再创建一笔模拟付款。
  3. 状态未知的金额暂时计入模拟预算占用,避免另一笔请求立即使用同一额度。
  4. 授权过期、商家不允许、超出预算与需要审批分别返回不同结果。

可在示例代码目录运行:

python3 -m unittest -v test_payment_lab

这些结果只说明示例代码的行为:它没有后台状态查询、退款、持久化、并发保护或真实交易确认。真实系统可能有不同状态、超时和重试语义,必须使用其官方文档及实际记录验证。

要保留哪些证据?

记录任务和订单标识、支付请求标识、金额与币种、支付状态、服务结果及时间。不要把私钥、完整凭证或敏感用户资料写入日志。出现争议时,数据足够让用户或运营人员查清“付款到哪一步、服务到哪一步”,比一个笼统的“失败”更有用。

可靠的 Agent 体验不是让失败消失,而是让系统在不确定时停下来、查状态,并把可执行的下一步交给合适的人或程序。

资料:Stripe 自动化测试;Stripe 支付与履约;x402 规范。