StableOps
概念

Idempotency

用 Idempotency-Key 让创建类请求安全可重试。

StableOps 在创建类请求上使用显式的 Idempotency-Key 请求头。对支付单而言, merchantOrderId 仍然必填,但它属于业务引用,不是重放键。

创建支付单

const input = {
  merchantOrderId: 'order_123',
  amount: '10.00',
  settlementAsset: 'USDC',
  acceptedAssets: [{ chain: 'base', asset: 'USDC' }],
}

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 去重,保证重复投递安全。

本页内容