# 1) 发码(真实下发短信)
curl -X POST http://smsapi.wubadz.top/smsapi/v1/send \
-H 'Content-Type: application/json' \
-d '{"token":"sk_你的Token","phone":"13800138000"}'
# 2) 用户填码后校验 → 通过返回固定成功值
curl -X POST http://smsapi.wubadz.top/smsapi/v1/verify \
-H 'Content-Type: application/json' \
-d '{"token":"sk_你的Token","phone":"13800138000","code":"123456"}'
# {"code":0,"msg":"OK","data":{"result":"SUCCESS"}}
所有接口为 HTTP + JSON,基址 http://smsapi.wubadz.top,前缀统一为 /smsapi/v1/。已开启 CORS,浏览器前端可直接调用,无需后端转发。
| 项目 | 说明 |
|---|---|
| 请求方式 | POST + Content-Type: application/json(查询类支持 GET) |
| 统一返回 | {"code":0,"msg":"OK","data":{…}},code=0 为成功 |
| 鉴权字段 | token(放 JSON body 或 query 参数) |
| 字符编码 | UTF-8 |
每个接入方注册后获得唯一 sk_… 开头的 API Token,所有对外接口都需携带。建议由你自己的服务端转发调用,避免在前端源码里公开分发。
{"token":"sk_xxxxxxxxxxxxxxxxxxxxxxxx"}
把用户手机号提交给接口,平台实时下发短信。注册、登录、绑定、找回/修改密码等场景复用同一接口,scene 只是你自己用来区分的标识,不影响发码行为。
POST /smsapi/v1/send
{
"token": "sk_你的Token",
"phone": "13800138000", // 必填,11 位大陆手机号
"scene": "register", // 可选,自定义场景标识(register/login/bind/reset/forgot…),仅用于你自己的记录区分
"session": "6f1c…" // 可选,见下方「会话」说明
}
200 → {"code":0,"msg":"验证码已发送","data":{"session":"6f1c…","phone":"138****8000"}}
不传 session 时,平台自动按「Token + 手机号」建会话,单机接入完全透明。若同一手机号多端并发(例如注册与登录同时发起),建议先调 /smsapi/v1/session 拿 session,后续两步都带上,避免串会话。
POST /smsapi/v1/session
{"token":"sk_你的Token","phone":"13800138000"}
200 → {"code":0,"data":{"session":"6f1c…","expires_in":1800}}
用户填入收到的验证码后调用。校验通过返回你账号配置的固定成功值(默认 SUCCESS),你只需判断这个字段。
POST /smsapi/v1/verify
{"token":"sk_你的Token","phone":"13800138000","code":"123456"}
// 也可用 "session" 代替 "phone"
200 → {"code":0,"msg":"OK","data":{"result":"SUCCESS","session":"6f1c…","phone":"138****8000"}}
400 → {"code":1006,"msg":"验证码错误或已失效"}
| 字段 | 说明 |
|---|---|
data.result | 固定成功值,等于你账号的配置值(默认 SUCCESS)即校验通过 |
data.session | 本次校验的会话标识,可用于后续结果查询 |
data.phone | 打码手机号(中间四位隐藏) |
result 的取值由你在会员中心的配置决定,不是固定字符串 —— 以你账号页面显示的为准。校验通过后,平台后台仍会异步完成一次账号侧处理(约 60–90 秒)。该接口用于查询最终状态,你的登录/注册判定不需要等它。
GET /smsapi/v1/result?token=sk_你的Token&phone=13800138000
200 → {"code":0,"data":{"session":"…","state":"success","uid":"…","token_ready":true}}
| state | 含义 |
|---|---|
| created / sent / verifying | 流程进行中(未发码 / 已发码 / 校验中) |
| review | 校验已通过(此时你就该放行用户了),后台处理中 |
| success | 最终处理完成 |
| failed / expired | 失败或超时(见 error 字段) |
GET /smsapi/v1/records?token=sk_你的Token&limit=50
200 → {"code":0,"data":{
"summary":{"total":12,"success":9,"failed":1,"review":2,"sent":0,"created":0,"expired":0},
"records":[{"session":"…","state":"success","phone":"138****8000","created":"2026-10-01 23:20:00"}]}}
同样可在会员中心查看:/console
| HTTP | code | 含义 | 建议处理 |
|---|---|---|---|
| 401 | 1001 | token 缺失或无效 | 检查 Token 是否正确 |
| 403 | 1008 | token 已被禁用 | 联系平台方 |
| 400 | 1002 | 手机号格式不正确 | 需 11 位纯数字大陆号码 |
| 400 | 1006 | 验证码错误或已失效 | 提示用户重试或重新发码 |
| 404 | 1005 | 会话不存在或已过期 | 重新发码 |
| 409 | 1007 | 当前状态不允许提交验证码 | 检查调用顺序(先发码后校验) |
| 429 | 1004 | 发送过于频繁 | 按提示秒数退避重试 |
| 429 | 1009 | 已达当日发码上限 | 次日恢复或联系平台提额 |
| 502 | 1003 | 上游不可用 / 被限流 | 稍后重试,勿高频重打 |
发码 → 校验 → 通过则创建账号
发码 → 校验 → 通过则签发你自己站内的会话
对已登录用户的新号码发码 → 校验 → 通过则写绑定关系
用户忘记密码或要改密时,先验证手机号归属 → 通过才放行到设置新密码
const API = 'http://smsapi.wubadz.top';
const TOKEN = 'sk_你的Token';
async function sendCode(phone, scene) {
const r = await fetch(API + '/smsapi/v1/send', {method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify({token: TOKEN, phone, scene})}).then(r => r.json());
if (r.code) throw new Error(r.msg);
}
async function checkCode(phone, code) {
const r = await fetch(API + '/smsapi/v1/verify', {method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify({token: TOKEN, phone, code})}).then(r => r.json());
return r.code === 0 && r.data && r.data.result; // 返回固定成功值即通过
}
$ch = curl_init('http://smsapi.wubadz.top/smsapi/v1/verify');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['token' => $TOKEN, 'phone' => $phone, 'code' => $code]),
]);
$r = json_decode(curl_exec($ch), true);
if ($r['code'] === 0 && !empty($r['data']['result'])) { /* 校验通过 */ }
本平台的接入方账号同样使用手机号 + 短信验证码注册与登录,无需设置密码:
打开 /register 输入手机号 → 获取验证码 → 填入后即完成注册并获得 API Token
打开 /login 输入同一手机号 → 收码 → 登录进会员中心
手机号即账号;未注册的号走登录会提示先注册,已注册的号走注册会提示直接登录
| 项目 | 默认值 | 说明 |
|---|---|---|
| 同号冷却 | 60 秒 | 同一手机号发码间隔,防止轰炸与刷量 |
| 日发码上限 | 500 条/账号 | 可在会员中心查看;需要提额联系平台方 |
| 验证码有效期 | 5 分钟 | 超时需重新发码 |
| 会话有效期 | 30 分钟 | 建会话后需在此时间内完成校验 |
| 频率限制 | 动态 | 高频调用可能被限流(429/502),请退避重试 |
请先看 /smsapi/v1/verify 的同步返回(data.result);/result 反映的是异步的最终状态。
不会。平台按「Token + 手机号」隔离会话;多端并发建议显式使用 session。
当日额度用尽。会员中心可看今日用量,或联系平台方提升上限。
注册即可免费调用,先测通再谈用量。额度与频控以你账号页面显示为准。
短信内容由通道方统一下发,接入方不能自定义模板;平台负责把手机号提交给通道并回传校验结果。