StableOps
常見問題

結算狀態未知時應該怎麼辦?

當付費請求超時、網路中斷或結算證據不可靠時,理解 Agent Payments 的結算狀態未知意味著什麼。使用原付款 Intent、授權和回執安全對帳,等待鏈上確認或人工處理,避免透過建立付款、重新簽名或盲目重試造成重複支付。

停止付款重試,核對原 Intentsettlement_unknown 表示一筆已經授權的付款可能到達了 x402 結算服務,但目前回應和鏈上證據還不足以確認它是否已經結算。

它不表示“尚未付款”,更不允許建立替代 Intent、授權、冪等鍵或隨機數。

何時會進入該狀態

控制面簽發授權後,客戶簽名器生成準確的付款簽名,Agent SDK 再傳送付費請求。以下情況可能導致結算狀態未知:

  • 付費請求離開 Agent 執行時後超時;
  • 連線在可靠回應返回前關閉;
  • 資源回應缺少結算證據,或包含無法解析的結算證據;
  • 結算服務、資源伺服器、RPC 服務或鏈暫時提供不完整或互相沖突的證據。

此時付款可能已經成功,但 Agent 沒有收到資源回應。

恢復步驟

  1. 儲存 SettlementUnknownError 中的 intentIdauthorizationId
  2. 停止該業務購買的自動付款重試,不要輪換冪等鍵。
  3. 使用 agent.getPayment(intentId)management.payments.get(intentId) 查詢原 Intent。
  4. 訂閱簽名的 agent_payment.settlement.*agent_payment.resource.* Webhook,並按事件 ID 去重。
  5. 在原 Intent 得到明確結果前,讓業務任務保持待處理或對帳狀態。
  6. 狀態超過營運時限仍然未知時,應升級人工調查,不能把告警轉成自動重付。

Agent SDK 會透過錯誤物件提供關聯標識:

import { SettlementUnknownError } from '@stableops/agent-payments-sdk'

try {
  await agent.x402Fetch(resourceUrl, {
    idempotencyKey: 'research-task-284:market-report:v1',
  })
} catch (error) {
  if (error instanceof SettlementUnknownError) {
    await saveForReconciliation({
      intentId: error.intentId,
      authorizationId: error.authorizationId,
    })

    const payment = await agent.getPayment(error.intentId)
    console.error({
      intentId: payment.intentId,
      paymentStatus: payment.status,
      resourceStatus: payment.resourceStatus,
    })
  }

  throw error
}

查詢記錄是安全的。換一個冪等鍵呼叫 x402Fetch 發起新購買則不安全。

狀態如何得到最終結果

最終證據支付結果應用應該怎麼做
授權隨機數已經使用,匹配轉帳得到確認settled只記錄一次付款;另外檢查資源狀態,再判斷業務任務是否完成
對帳證明結算已經回滾reverted記錄付款失敗;任何新購買都必須經過明確的營運或業務決定
執行授權和付款授權均已過期,隨機數未使用,充分掃描後沒有匹配轉帳expired可以釋放已經提交的預算;後續購買必須作為新的明確嘗試
鏈或服務商證據仍不可用settlement_unknown繼續對帳,並保持預算已提交狀態

StableOps 不會僅因牆上時鐘超時就釋放已經提交的預算。系統必須先確認授權已經過期且未使用,也不存在待確認的匹配轉帳。這條保守規則可以避免第一筆付款仍可能結算時,同一筆資金又被計為可用。

支付結果與資源結果彼此獨立

即使支付結算已經明確,資源結果仍可能是 unknownfailed

  • settledresponse_received 表示付款和付費 HTTP 交換都有可靠證據。
  • settledunknown 表示資金已經轉移,但 Agent 可能沒有收到資源。
  • StableOps 確認鏈上狀態為 settled 前,資源回應也可能已經返回。

資源交付問題應透過賣方的重放、支援或業務補償流程解決。絕不能把資源缺失解釋為付款沒有發生。

相關內容

這篇文件怎麼樣?

最後更新

本頁內容