概念
幂等性
了解如何在 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 去重,保证重复投递安全。
这篇文档怎么样?
最后更新