程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
幂等 相关技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
支付回调用 payment_id 去重,退款事件就永远进不来:event_id 与两把锁
代码
支付回调用 payment_id 去重,退款事件就永远进不来:event_id 与两把锁
2026-10-24 21:32:34
webhook 至少投递一次,但「事件去重」和「支付记录去重」是两把不同的锁:用 payment_id 当唯一键会把退 款事件永久吞掉。这篇按请求进入的顺序讲原始 body 验签、event_id 唯一约束、记录与发权益同一事务、outbox、乱序 occurred_at、最小单位整数金额、5 秒应答与「未知」状态。
支付对接
webhook
幂等
数据库事务
接口对接
订单状态机的状态语义与恢复路径:Closed 可恢复,Cancelled 只退款
编程
订单状态机的状态语义与恢复路径:Closed 可恢复,Cancelled 只退款
2026-10-23 00:03:59
把订单的「已关闭」和「已取消」合成一个终态,支付回调晚到就只能人工对账。这篇按 orderflow 的六状态枚举和 CanTransitionTo 迁移表,拆开两条恢复路径:Closed 先 QueryOrder 复核、校验金额,再走独立的 CASReopenPaid 逆向恢复并触发 OnReopened;Cancelled 保持不动,只以 (order_no, trade_no) 唯一键写退款 outbox。附 CAS 条件更新 SQL、OnPaid 失败停在 Paid 的 fallback 重扫,以及状态机适用边界。
订单状态机
状态机
支付回调
订单关单
CAS
幂等
Go
TCC 库存 Cancel:空回滚、悬挂、幂等怎么用一张 tcc_fence_log 收口
编程
TCC 库存 Cancel:空回滚、悬挂、幂等怎么用一张 tcc_fence_log 收口
2026-10-22 00:05:24
TCC 里库存服务的 Cancel 写成无条件 UPDATE 会把库存凭空加出来:Try 可能没到或回滚了,TC 照样发 Cancel。这篇讲清空回滚、悬挂、幂等三个问题如何用一张 tcc_fence_log 收口:主键 (xid,branch_id) 做幂等、Try 插入 tried 撞主键就拒绝、Cancel 先 SELECT FOR UPDATE 再按状态分支、条件 UPDATE 影响行数为 0 怎么处理,以及 fence 写入必须与库存变更同本地事务、useTCCFence 默认 false 这类实际踩点。
库存回滚
TCC
分布式事务
Seata
幂等
空回滚
悬挂
秒杀库存回滚别用 INCR:扣减流水、同槽 key 与乱序补偿
编程
秒杀库存回滚别用 INCR:扣减流水、同槽 key 与乱序补偿
2026-10-22 00:04:20
秒杀场景里取消订单后把库存还回 Redis,直接 INCRBY 会因重试重复加量且无法追溯。这篇只谈缓存层的回滚:用扣减流水 hash 做幂等、stock 与 history 必须同 hash tag 否则 EVAL 报 CROSSSLOT、回滚先落扣减后落的乱序怎么用顺序消息或对账兜底、「查不到流水就当成功」在 key 过期和淘汰时为何是错的,以及分段库存下回滚必须回到原 bucket 否则碎片化。
库存回滚
Redis
秒杀
Lua
Cluster
幂等
库存超卖
支付宝要 7 个字符 success,微信要空响应体:支付异步通知的应答语义与重试时间表
编程
支付宝要 7 个字符 success,微信要空响应体:支付异步通知的应答语义与重试时间表
2026-10-22 00:03:29
同一套 JSON 响应封装发给支付宝和微信,三家全判失败:支付宝要响应体只有 success 七个字符,微信 APIv3 要 200/204 空报文,V2 要 XML return_code=SUCCESS。整理三家应答语义、25h/8 次与 24h4m 的重试节奏,以及 ACK 之前必须先落库的原因与 Go/PHP handler 骨架。
异步通知
支付回调
notify_url
接口对接
Go
PHP
幂等
Stripe webhook 一直 400 signature verification failed:先查 raw body 有没有被 JSON 中间件吃掉
代码
Stripe webhook 一直 400 signature verification failed:先查 raw body 有没有被 JSON 中间件吃掉
2026-10-18 09:01:05
Stripe 回调返回 400、日志报 signature verification failed 时,按 raw body 被框架改写、whsec_ secret 用错、300 秒容差、代理重编码四条线索逐项排查,并给出事件幂等、顺序与重试窗口的处理方式。
Stripe
Webhook
支付接口
验签
幂等
订单关单后的资源释放:库存回滚、优惠券退回与额度解冻怎么做到不重不漏
编程
订单关单后的资源释放:库存回滚、优惠券退回与额度解冻怎么做到不重不漏
2026-10-18 00:04:35
订单关单只改 status 会留下退不干净的库存、券和冻结额度。这篇给可落地的做法:关单事务只抢状态并写 outbox 释放任务、库存用 available/locked 预占模型并给 locked 加下界条件、流水表唯一键做幂等、优惠券过期与叠加退券的取舍、冻结额度双向更新、以及「locked 汇总 = 待支付明细」的每日对账 SQL 和重试/人工补偿口径。
订单关单
库存回滚
幂等
优惠券
对账
订单状态机
支付接口幂等性:支付宝 out_trade_no、Stripe Idempotency-Key 与 PostgreSQL 去重表
代码
支付接口幂等性:支付宝 out_trade_no、Stripe Idempotency-Key 与 PostgreSQL 去重表
2026-10-03 21:31:38
支付接口重复扣款怎么防:讲清支付宝/微信 out_trade_no、Stripe Idempotency-Key、2C2P invoiceNo 的网关侧幂等,再落到服务端 PostgreSQL idempotency_keys 去重表 + ON CONFLICT DO NOTHING 当锁,以及 Webhook at-least-once 去重与失败时删/留 Key 的取舍。
支付
接口对接
幂等
PostgreSQL
Webhook
案例
USDT TRC20 自动收款:链上有转账、系统却没加钱,先查这四处
代码
USDT TRC20 自动收款:链上有转账、系统却没加钱,先查这四处
2026-10-03 09:00:54
对接 USDT TRC20 自动收款时,链上已到账但系统没加钱(漏单)、或系统加了钱链上其实失败(假充值)怎么查。给 TronGrid v1 查询命令、四道入账校验(官方合约地址、receipt.result、收款地址、TxID 幂等)、decimals=6 金额单位、固化区块滞后与限流处理,并对比轮询账户历史/订阅 Transfer 事件/自建扫块三种监听方案的取舍。
USDT
TRC20
TronGrid
支付回调
幂等
链上收款
分页
假充值
转账
Stripe Webhook 本地调试:验签失败多半是 body 被提前 parse 了
代码
Stripe Webhook 本地调试:验签失败多半是 body 被提前 parse 了
2026-09-26 21:31:42
Stripe Webhook 本地调试与验签排障:签名基于原始请求体计算,Express 全局 express.json() 或 Next.js 用 request.json() 都会让验签永远失败。附 Stripe-Signature 头解析、时间戳防重放、测试/正式模式隔离、约 3 天重试与幂等清单。
Stripe
Webhook
签名验证
接口对接
幂等
时序
从微信支付切到 Stripe:幂等键从订单号变成了 HTTP Header
代码
从微信支付切到 Stripe:幂等键从订单号变成了 HTTP Header
2026-09-24 09:01:12
对接海外支付时最容易漏的一步:微信/支付宝把幂等键藏在商户订单号里,Stripe 用 Idempotency-Key、PayPal 用 PayPal-Request-Id 放在 HTTP 头里。本文对照四家渠道的幂等键位置、有效窗口与并发行为,讲清重试为什么会产生重复扣款,并列出平移到海外时的高频踩坑。
支付
Stripe
PayPal
幂等
接口对接
支付状态与订单状态分离:三张表、三层幂等与最终一致性落地
综合
支付状态与订单状态分离:三张表、三层幂等与最终一致性落地
2026-09-19 21:32:46
支付系统为什么要把订单状态和支付状态分表:t_order_info、t_pay_record、t_pay_callback_log 三张表与唯一索引设计,三层幂等(DB 唯一索引 / Redis 锁 / 状态机前置校验)各拦截什么,以及状态机 + MQ + 定时查单的最终一致性闭环。
支付系统
MySQL
幂等
状态机
RocketMQ
实战
用户付一次钱,系统入账两次:Webhook 重复投递的幂等处理
编程
用户付一次钱,系统入账两次:Webhook 重复投递的幂等处理
2026-09-12 21:32:10
支付平台 webhook 是「至少一次」投递,重复必然发生。讲清三层去重(内存/唯一约束/幂等写入)、唯一键 NULL 陷阱、ON CONFLICT DO NOTHING、并发下别先查后插、乱序与状态机,附上线测试矩阵。
支付回调
幂等
Webhook
唯一约束
状态机
支付回调 / Webhook 验签器(Verifier)的正确实现:HMAC、时间窗、防重放与幂等
编程
支付回调 / Webhook 验签器(Verifier)的正确实现:HMAC、时间窗、防重放与幂等
2026-09-02 00:04:42
从「合法支付回调被复制重放、HMAC 验签照样通过导致重复入账」事故切入,讲清回调验签器要绑定原始 body/时间戳/事件ID/HMAC,先验签再解析、常量时间比较、时间窗与 Redis 去重、数据库唯一键做业务幂等,并覆盖微信支付 APIv3 的 SHA256withRSA 验签差异与探测流量。
Verifier
Webhook
支付回调
幂等
防重放
Go
支付回调设计:幂等、状态机与补偿兜底
编程
支付回调设计:幂等、状态机与补偿兜底
2026-08-30 21:06:03
支付回调是最容易翻车的接口。本文按安全校验、幂等防重、状态机防护、异步解耦、补偿兜底五层拆解设计,并给出验签、金额校验、终态不处理、先落库后业务等六条可落地铁律。
支付
回调
幂等
状态机
设计
接口响应的 Self-Verification:别把"第三方说成功"当成功
编程
接口响应的 Self-Verification:别把"第三方说成功"当成功
2026-08-30 15:18:32
做支付、短信、风控等外部接口对接时,第三方返回"成功"不代表业务真的成功。本文讲接口响应的自校验(Self-Verification)四层实践:验签、幂等、二次查询确认、定时对账兜底,并给出各自适用场景与坑。
Self-Verification
接口对接
支付
幂等
对账
物流
HTTP QUERY方法深度剖析:为什么GET和POST之间的鸿沟终于被填平了
编程
HTTP QUERY方法深度剖析:为什么GET和POST之间的鸿沟终于被填平了
2026-07-24 11:44:45
2026年6月IETF发布RFC 10008引入HTTP QUERY方法,填补GET无法携带Body和POST非幂等的语义鸿沟。本文从工程师视角深度拆解QUERY方法的诞生背景、核心语义、工程实现与最佳实践。
HTTP
QUERY
RFC
API设计
REST
幂等
云原生
Web标准
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调