易支付安全、低费率、实时到账

易支付多次重复回调-易支付通知去重与处理机制

商户对接易支付后,频繁收到同一笔订单的重复回调 —— 重复发货、重复结算,不仅造成经济损失,还引发用户投诉!其实重复回调是支付行业的常规机制,核心是保障通知不丢失,关键在于做好去重处理。这篇从重复回调原因、去重实操到机制解析,帮你彻底解决问题。

一、为什么会出现多次重复回调?

・通知未确认:易支付发送回调后,若未收到 “success” 纯字符串响应(含空格、换行都算失败),会判定通知未送达,触发重试机制;・网络波动:回调请求过程中网络中断、超时,易支付未接收到响应,会按规则重复发送;・服务器异常:商户服务器接收通知后处理失败(如数据库异常),但未返回错误码,易支付误认为通知未处理;・重试规则:易支付默认 8 次重试,间隔从 1 分钟到 12 小时不等,确保极端情况下也能送达。


二、3 种核心去重方法:实操落地

1. 基于订单号去重(最常用)

・核心逻辑:订单号(out_trade_no)是唯一标识,处理回调时先查询本地订单状态;・操作步骤:

  1. 接收回调后,提取订单号;

  2. 查本地数据库,若订单已处理(如已发货、已结算),直接返回 “success”,不执行后续逻辑;

  3. 若订单未处理,先验证签名,通过后执行业务逻辑,完成后更新订单状态为 “已处理”。

2. 基于易支付交易号去重

・适用场景:若商户订单号可能重复(如未做唯一约束),用易支付返回的 trade_no(交易号)作为去重标识;・操作要点:将 trade_no 存入本地数据库,处理回调时先校验该交易号是否已存在,存在则直接忽略。

3. 基于时间戳 + 防重表去重

・进阶方案:创建专门的防重表,字段包含订单号、trade_no、回调时间戳;・操作逻辑:接收回调后,先向防重表插入记录(利用数据库唯一索引避免重复插入),插入成功则处理业务,失败则说明是重复回调,直接返回 “success”。

三、回调处理机制与避坑要点

处理环节关键操作常见错误
响应处理处理完成后立即返回 “success”,无多余字符返回 JSON 格式(如 {"code":200}),导致重试
业务逻辑先去重,再验证签名,最后处理业务先处理业务再去重,导致重复执行
异常处理业务处理失败时,仍返回 “success”,后续手动排查返回错误码,触发易支付重试

四、易支付回调处理完整流程

  1. 接收回调请求,提取订单号、trade_no、sign 等关键参数;

  2. 执行去重校验(订单号 /trade_no),重复则返回 “success”;

  3. 验证签名,失败则返回错误信息(不触发重试);

  4. 执行业务逻辑(发货、结算等);

  5. 更新订单状态为 “已处理”,向防重表插入记录;

  6. 返回 “success” 纯字符串,结束回调。

FAQ

问:易支付多次重复回调 - 易支付通知去重与处理机制中,去重后还收到重复回调怎么办?答:先检查是否正确返回 “success”,再核对去重逻辑是否有漏洞(如订单状态更新失败),最后查看易支付回调记录,确认是否为新的重试请求。

结尾

重复回调不是故障,而是保障通知可靠性的设计。核心解决思路是 “唯一标识去重 + 正确响应确认”,按教程落地去重逻辑后,就能彻底避免重复处理问题。若仍有频繁重复回调,可联系易支付技术支持,排查是否为回调配置或网络问题!

返回顶部