📌 问题描述
用户网络波动导致重复点击”立即支付”,如何设计接口幂等方案,保证不会重复扣款或生成重复订单?
✅ 回答要点
我会使用”幂等令牌”方案:idempotent-幂等
-
用户进入支付页时,后端生成一个全局唯一ID(如UUID或雪花算法ID)作为
idempotent_key,返回给前端并存入Redis(设置过期时间5分钟)。 -
支付请求携带该key,后端先查Redis,如果key存在则执行扣款并删除key;如果key不存在或已被消费,则直接返回”请勿重复支付”。
-
数据库层同时给订单号唯一约束,双重保障。
此外,还可使用乐观锁update ... where order_status=待支付,只有状态正确才更新。