概念
冪等性
瞭解如何在 StableOps 建立付款單等介面中使用 Idempotency-Key,讓網路超時、用戶端重試和併發請求安全收斂到同一結果,避免重複建立資源或重複處理付款。學習如何選擇穩定的冪等鍵、處理參數衝突、快取回應,並在前端、後端與任務佇列之間保持一致的重試語義。
StableOps 在建立類請求上使用顯式的 Idempotency-Key 請求頭。對付款單而言,
merchantOrderId 仍然必填,但它屬於業務引用,不是重放鍵。
建立付款單
const input = {
merchantOrderId: 'order_123',
amount: '10.00',
acceptedAssets: [{ chain: 'base', asset: 'USDC' }],
expiresAt: new Date(Date.now() + 30 * 60 * 1000).toISOString(),
}
const order = await client.paymentOrders.create(input, {
idempotencyKey: 'order_123:create-payment-order',
})使用同樣的 Idempotency-Key 和同樣的請求體重試,會拿到原始回應。
同樣的 key 配上不同請求體則會返回衝突。
merchantOrderId
merchantOrderId 在組織 + 環境內全域性唯一,防止兩個不同的付款單聲稱指向同一個商戶側
訂單引用。帶上同樣的 merchantOrderId 但換了 idempotency key 建立第二筆訂單,API 會返回
409 merchant_order_id already used;不會重放第一次的回應。
使用規則
- 在發起第一次 API 呼叫前生成 key,並和本地訂單一起持久化。
- 網路重試與 worker 重啟都必須複用同一個 key。
- 不要用每次重試時新生成的時間戳或隨機值。
- key 的作用域要小,例如
order_123:create-payment-order。
Webhook
Webhook 投遞也會重試。在改寫自家帳本或履約狀態前,先按 X-Event-Id 去重,保證重複投遞安全。
這篇文件怎麼樣?
最後更新