微信支付的回调频次有点东西 可以学学这套

做过微信支付的小伙伴都知道,支付成功后微信会给我们的服务器发个“回调通知”。但你有没有注意过,如果咱们服务器没答应或者处理慢了,这条通知微信会怎么反复发?

其实微信支付的回调机制挺有讲究,也很值得我们平时项目参考下,下面我就简单聊聊:

微信到底多久回调一次?

微信给你发支付结果,不是“一锤子买卖”,它给你设计了一套很“执着”的推送时间表。如果你没回或者没按它要求回(比如超时,内容不对),微信会这么来“追”你:

0秒 / 15秒 / 15秒 / 30秒 / 180秒 / 1800秒 / 1800秒 / 1800秒 / 1800秒 / 3600秒

说人话就是:

  • 马上发第一次,
  • 15秒后再发一次,
  • 又15秒后再来一次,
  • 然后隔30秒推,
  • 再隔3分钟(180秒)推,
  • 后面就开始有点“佛系”了,每隔半小时(1800秒)才发一次,一连发4次,
  • 最后一小时后再来最后一发。

一共10次。如果你一直不理(没回复或者回复格式不对),微信就不再管了。

微信为什么要这样设计?

其实微信这波骚操作,就是为了又快又省事。

  • 一开始赶紧多试几次,怕的就是网络抽风或者你服务器正好卡了一下。
  • 后面慢慢“摸鱼”点再试,既不浪费自己资源,也不老打你服务器,给大家都留个面子。
  • 最后实在不行,也不会死磕到底,最多就再打10次,算仁至义尽了。

简单说,这频次设计其实就是:“刚开始我上心一点,越到后面越随缘。”

我们开发项目也可以学学

其实这种“回调+多次重试+越来越慢”方式,挺适合各种消息通知、异步任务啥的:

  • 比如你给用户发短信、推送、邮件,或者系统里做什么异步处理,怕失败就可以用这种“先密后疏”的重试逻辑。
  • 防止偶尔的网络问题让任务失败,保证消息尽可能送达!
  • 可以省不少资源,不容易压力爆表。

举个例子,你写了个下单回调,或者发积分奖励的接口,也可以搞成这样:一开始1分钟重试,失败后5分钟再试,最后1小时提醒一遍,试个几次不行就放弃。

关键是要记得别死循环,否则一不小心“刷炸”自己服务器。

总结

微信的回调频次真不是随便定的,很有经验。我们平时做开发,也可以借鉴下,搞点靠谱又不扰民的重试机制。尤其涉及到消息通知、自动任务、外部推送啥的,都可以用上。

下次再遇到“要不要重试、多久重试一次”这种问题,就别再糊弄了,参考下微信的经验,一定没错!

同事问起, 也可以说: 微信都是这么干的