接码收不到验证码,绝大多数不是平台坏了,而是命中了几种常见情况:号段被目标平台风控、该服务当时没库存、你取码太早、或者目标压根不给虚拟号下发。按下面的顺序排查,几分钟就能定位。
先分清:是「没下发」还是「没取到」
这是两回事,处理方式完全不同。
- 没下发:运营商或目标平台根本没把短信发到这个号。
- 没取到:短信其实到了,但你轮询的姿势不对(取得太早、超时太短)。
先去平台后台看这条订单的状态,再决定下一步——别一上来就退单换号。
8 个常见原因和对应解法
| 原因 | 典型表现 | 解法 |
|---|---|---|
| 号段被风控 | 一直「等待中」,最后超时退款 | 换号重试;长期用优先选实卡号,见 实卡接码 vs 虚拟号 |
| 平台该服务没库存 | 取号就失败或秒退 | 换平台或换国家;选型先看库存稳定性,见 接码平台选型指南 |
| 取码太早 | 刚下单就一直空轮询 | 留 10~30 秒再开始轮询,见 自动轮询取码 |
| 目标限制虚拟号 | 提示「该号码无法接收短信」 | 改用实卡号,或换其它接收方式 |
| 触发目标二次风控 | 第一条能收,后续不再下发 | 降低同一号码的复用频率 |
| 号码归属国不符 | 注册地区不支持该国号段 | 选目标明确支持的国家号 |
| 短信延迟或被合并 | 几分钟后才到 | 适当延长等待,别急着判失败 |
| 轮询超时设得太短 | 还没下发就判了失败 | 调大超时时间,见下方示例 |
轮询别空烧额度
很多人「收不到」其实是轮询写得太糙:下单立刻狂查,没几秒就判失败退单。正确做法是先等一会儿,再按固定间隔查,给个总超时:
# 1) 下单取号(service 用市场返回的服务代码如 telegram,country 用国家码 US)
curl -X POST https://api.simsmsbox.com/api/sms/orders/purchase \
-H "X-API-Key: psk_xxx" \
-H "Content-Type: application/json" \
-d '{"service":"telegram","country":"US","cardKind":"physical","rentDays":30}'
# -> { "orderId": 19, "phone": "+1xxxxxxxxxx", ... }
# 2) 先等 15 秒,再每 5 秒查一次订单,最多查 2 分钟;{id} 用上一步的 orderId
sleep 15
for i in $(seq 1 24); do
resp=$(curl -s https://api.simsmsbox.com/api/sms/orders/19 -H "X-API-Key: psk_xxx")
echo "$resp" | grep -q '"latestCode":"' && { echo "$resp"; break; }
sleep 5
done
节奏和重试策略可以参考 自动轮询取码教程。
还是收不到?换号比硬等划算
如果一个号等满超时还没下发,多半是这个号本身被目标平台标记了,再等也是浪费。直接退单换号,比死磕一个号效率高得多。判断标准很简单:超时退款的号,别复用。
小结
先分清「没下发还是没取到」,再决定换号还是改轮询;要长期稳定,号的来源比单价更重要。延伸阅读:怎样降低接码失败率。