幂等键:防止重复支付和幽灵订单的简单技巧

发布日期:2026-05-22 10:34:26   浏览量 :2
发布日期:2026-05-22 10:34:26  
2

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

幂等键:防止重复支付和幽灵订单的简单技巧

你一定见过这种情况。用户点击“提交订单”,网络出现波动,请求超时,结果用户被扣款两次。或者扣款成功了,但订单从未显示。这两种结果都不可接受,而且都是可以避免的——只需使用幂等键。

什么是幂等键?

幂等键是一个附加在请求上的唯一标识符,使服务器能够安全地仅处理该请求一次,无论客户端重试多少次。如果服务器再次收到相同的键,它将返回原始响应,而不是再次执行操作。

这个概念借用于数学:如果一个操作被执行多次产生的结果与执行一次相同,则该操作是幂等的DELETE /users/42 天然具有幂等性——删除一个已删除的用户不会改变任何状态。POST /orders 则不具备幂等性——发送两次会创建两个订单。

幂等键使得非幂等操作可以安全地进行重试。

实际工作原理

客户端在发送请求之前生成一个唯一键(通常是 UUID v4 版本)。它将该键作为请求头附加,通常为 Idempotency-Key。服务器将该键和响应存储在短期缓存中(常见有效期为 24 小时)。在重试时,服务器找到该键,跳过执行,并返回存储的响应。

以下是在 Python 中使用此模式的支付请求示例:

import uuid
import httpx

def charge_customer(customer_id: str, amount_cents: int) -> dict:
    idempotency_key = str(uuid.uuid4())  # 生成一次,存储以供重试使用

    headers = {
        "Authorization": "Bearer sk_live_...",
        "Idempotency-Key": idempotency_key,
        "Content-Type": "application/json",
    }

    payload = {
        "customer": customer_id,
        "amount": amount_cents,
        "currency": "usd",
    }

    response = httpx.post(
        "https://api.example.com/v1/charges",
        headers=headers,
        json=payload,
    )
    return response.json()

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部