进阶 错误处理重试API自动接码稳定性

🔁接码失败重试与错误处理:让自动接码更稳

自动接码难免遇到没到码、超时、限流等情况。本教程讲解如何为 SimSmsBox API 接入设计重试、超时与错误处理:轮询节奏、未到码自动取消换号、限流退避与幂等重试,把成功率做稳。

✍️ SimSmsBox 📅 2026年7月9日

自动接码跑通很容易,要跑得稳却需要一套错误处理策略。本教程在自动取号与轮询的基础上,讲清怎么处理“没到码、超时、限流、重复下单”这四类常见情况。

接码失败重试与错误处理流程

前提:已读过5 分钟快速接入,能完成取号→收码→取消的最小流程。

一、先分清两类“失败”

  • 业务失败:请求成功,但结果不理想(如超时未到码、号被拒)。应该换号重试,而不是重复请求同一个号。
  • 传输/服务失败:网络抖动、HTTP 429/5xx。应该退避后重试同一个请求。

两类处理方式完全不同,切勿一律“无脑重试”。

二、轮询取码:设好节奏与超时

取号后不要马上高频轮询。建议固定间隔 + 总超时:

interval = 3s        # 每 3 秒查一次
max_wait = 120s      # 最多等 2 分钟
while elapsed < max_wait:
    order = GET /api/sms/orders/{id}
    if order.status == "received": return order.latestCode
    if order.status in ("canceled", "expired"): break
    sleep(interval)
# 超时未到码 -> 取消并换号

要点:2–3 分钟仍无码就判定失败,换号比干等高效得多。

三、未到码:自动取消换号

靠谱平台未到码不扣费,所以超时后直接取消、重新取号:

curl -X POST https://api.simsmsbox.com/api/sms/orders/19/cancel \
  -H "X-API-Key: psk_xxxxxxxx"

取消成功后,重新走一遍取号流程。建议给单个任务设一个 换号上限(如最多 3 次),避免无限刷号浪费时间。

四、限流与 5xx:指数退避重试

遇到 429 Too Many Requests5xx,对同一请求做指数退避:

delays = [1s, 2s, 4s, 8s]   # 最多重试 4 次
for d in delays:
    resp = request()
    if resp.ok: break
    if resp.status in (429, 500, 502, 503, 504):
        sleep(d + random_jitter())   # 加随机抖动,避免同时重试
    else:
        break                        # 4xx 业务错误不重试

注意:4xx(除 429)多为参数/鉴权错误,重试无意义,应直接报错修正。

五、幂等:避免重复下单

下单(取号)接口重试时,如果上一次其实已成功但响应丢了,盲目重试会重复扣费。处理方式:

  • 给每次下单带上自己的业务流水号,服务端/你本地做去重;
  • 重试前先查一次“最近订单”,确认上一笔是否已生成;
  • 只对**查询类(GET)**接口放心重试,**写入类(POST)**要配去重。

六、一个完整的循环骨架

for attempt in 1..MAX_NUMBER_SWITCH:      # 换号上限
    order = purchase()                     # 带幂等键 + 退避重试
    code  = poll(order.id, interval=3s, max_wait=120s)
    if code: return code                   # 成功
    cancel(order.id)                        # 未到码:取消换号
return FAIL                                 # 达到换号上限,上报告警

小结

稳定的自动接码 = 区分两类失败 + 合理轮询节奏 + 未到码换号 + 指数退避 + 幂等去重。把这几件事写进你的接入代码,配合真实 SIM 号源,就能把批量接码的成功率和成本同时控住。下一步可看自定义取码 URL 与模板化返回

← 返回教程列表