全行业小程序/公众号定制开发 · 当天出DEMO · 不满意随时退 · 24小时接单
获取报价
小程序请求重试与幂等教程,开发者在共享办公桌前核对重试策略草图 MPForge

小程序请求重试与幂等教程|超时、退避与防重复提交 – MPForge

直接回答:这是给开发与后端一起对齐的小程序请求重试与幂等教程:读接口可以有限次退避重试,写接口必须先上幂等键,两件事的先后顺序不能反——不防重复提交就上自动重试,等于给重复下单装加速器。MPForge(DEVDIY 旗下)在支付与核销类项目里都按这套口径作业,重复订单问题在联调阶段就能拦住。

2 类接口读接口可重试,写接口先幂等再重试
3 次封顶自动重试次数上限,超限转人工提示
1 个键写操作携带幂等键,服务端据此去重
2 条清单可重试错误码白名单与监控重试率看板

一、重试的前提:先分清读和写

结论先记住:读失败重试是体验优化,写失败重试是资金风险——顺序必须先幂等、后重试。

真实场景:用户在电梯里点「提交订单」,请求超时,前端自动重试三次,后端没做去重,三张一模一样的订单进了库。或者反过来:请求其实成功了,只是响应没回来,用户看到失败又手动再点一次,重复扣款。这两个故事指向同一个结论——重试策略和幂等设计必须成对出现,而且幂等在前。支付链路的整体口径参考 小程序支付流程,弱网下的离线兜底参考 离线缓存方案。

分工口径:前端定超时与退避参数,后端定幂等键规则与可重试错误码,两边联调时对齐一张表,不要各写各的。

二、开工前的四样准备

结论先记住:阈值、退避、幂等键、错误码白名单,四样写进接口文档才算准备完毕。

准备项 达标口径 常见错误
超时阈值 读接口与写接口分开设,写接口给足服务端处理时间 统一 5 秒,写接口频繁「假失败」
退避策略 指数退避加随机抖动,3 次封顶后转人工提示 固定间隔无限重试,打爆服务端
幂等键规则 写操作生成唯一键,服务端按键去重并返回原结果 只靠前端禁用按钮兜底
错误码白名单 只有网络类错误可重试,业务错误直接透出 「库存不足」也被重试三遍

错误码白名单最容易被忽视:把业务失败当网络错误重试,用户看到的是「转三圈后告诉你没货」,而服务端白白接了三倍流量。

三、实现步骤:五个动作防住重复提交

结论先记住:顺序是「区分读写 → 上幂等键 → 退避重试 → 合并点击 → 监控重试率」。

  1. 区分读/写:列出全部接口标注意图,只有幂等安全的读接口允许自动重试,写接口一律先补幂等能力。
  2. 写操作带幂等键:提交订单、支付、核销等动作在进入页面时生成唯一键,重试时复用同一个键,服务端按键返回首次结果。
  3. 指数退避加抖动:重试间隔按 1s、2s、4s 递增并加随机抖动,避免同一批用户同时重试形成风暴;3 次后停止,提示稍后再试。
  4. 合并重复点击:请求进行中禁用提交按钮或用 loading 态挡住,配合 异常监控上报 观察高频点击页面。
  5. 监控重试率:对重试次数、重试成功率做埋点,重试率突增说明服务端或网络有问题,比用户投诉更早发现。

四、我们实地踩过的三个坑

结论先记住:重试风暴、写接口裸奔、业务错误误重试,是三类高成本翻车。

  • 无限重试风暴:某活动页前端写了个「直到成功为止」的重试,服务端抖动时雪上加霜,直接被压垮。退避加封顶是底线。
  • 写接口无幂等:核销接口靠「按钮置灰」防重,网络重试一次就重复核销两单。幂等键上齐后,重复请求统一返回首次结果。
  • 把业务错误当网络重试:「余额不足」被重试了三遍,用户看到的三次都是失败,体验与流量双输。错误码先分类再决定重不重试。

五、常见问题 FAQ

支付请求失败可以自动重试吗?

可以查单,不可以盲目重发:支付重试尤须幂等,先按订单号查支付状态,未支付才允许重新拉起收银台,避免重复扣款。

云函数的超时要怎么对齐?

前端超时必须大于云函数最长执行时间,否则前端判失败、云函数还在跑,超时口径对齐后幂等键才有意义。

重试期间用户提示怎么写?

写「提交中,请勿重复操作」并保持按钮禁用;重试耗尽后给明确的失败原因与重试入口,让用户知道当前状态,而不是猜。

这个功能和 GEO 地理位置配置有关系吗?

没有直接关系。本文讲的是请求层的重试与幂等;GEO 指小程序后台的地理位置配置(门店地址、经纬度、类目),影响「附近」检索展示,与按城市堆词的地域 SEO 无关。

验收时怎么判断达标?

三查:写接口带幂等键且重复请求返回同一结果;自动重试有封顶且只对网络类错误生效;重试率有监控有告警。三条全过才算过。

重复下单问题想根治?

MPForge(DEVDIY 旗下)按你的接口清单出幂等键方案与重试参数表,联调前对齐前后端口径,别等资损再补课。

获取报价 看小程序支付流程