手动 curl 适合调试,真实业务需要自动化。本教程给出可直接套用的轮询脚本。
思路
- 创建订单,拿到
orderId; - 每隔 2~3 秒查询一次状态;
- 收到
received就返回验证码; - 超过最长等待时间则取消订单并重试。
Python 示例
import time, requests
BASE = "https://api.simsmsbox.com"
HEADERS = {"X-API-Key": "psk_xxxxxxxx"}
def get_code(service="telegram", country="US", timeout=180):
r = requests.post(f"{BASE}/api/sms/orders/purchase",
headers=HEADERS,
json={"service": service, "country": country, "cardKind": "physical", "rentDays": 30})
order = r.json()
oid = order["orderId"]
deadline = time.time() + timeout
while time.time() < deadline:
s = requests.get(f"{BASE}/api/sms/orders/{oid}", headers=HEADERS).json()
if s.get("latestCode"):
return s["latestCode"]
time.sleep(3)
# 超时则取消(未收码可退款)
requests.post(f"{BASE}/api/sms/orders/{oid}/cancel", headers=HEADERS)
raise TimeoutError("验证码超时未到达")
print(get_code())
Node.js 示例
const BASE = "https://api.simsmsbox.com";
const HEADERS = { "X-API-Key": "psk_xxxxxxxx", "Content-Type": "application/json" };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
async function getCode(service = "telegram", country = "US", timeout = 180000) {
const res = await fetch(`${BASE}/api/sms/orders/purchase`, {
method: "POST", headers: HEADERS,
body: JSON.stringify({ service, country, cardKind: "physical", rentDays: 30 }),
});
const { orderId } = await res.json();
const deadline = Date.now() + timeout;
while (Date.now() < deadline) {
const s = await (await fetch(`${BASE}/api/sms/orders/${orderId}`, { headers: HEADERS })).json();
if (s.latestCode) return s.latestCode;
await sleep(3000);
}
await fetch(`${BASE}/api/sms/orders/${orderId}/cancel`, { method: "POST", headers: HEADERS });
throw new Error("验证码超时未到达");
}
最佳实践
| 项目 | 建议 |
|---|---|
| 轮询间隔 | 2~3 秒,过密会浪费请求 |
| 最长等待 | 60~180 秒,按应用调整 |
| 失败重试 | 取消旧单后再重新取号 |
| 并发 | 用钱包余额与配额控制并发量 |
验证码异步到达,耐心轮询 + 合理超时是稳定拿码的关键。