短信验证码接口 · 对接文档

为第三方网站与客户端提供手机号验证码能力,覆盖 注册验证、登录验证、手机号绑定验证。
快速开始鉴权发码校验 结果查询调用记录错误码 场景示例接入方账号规则与限额常见问题
一分钟跑通
# 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"}}
Token 在会员中心可见,注册成功后立即获得。

1. 快速开始

所有接口为 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

2. 鉴权

每个接入方注册后获得唯一 sk_… 开头的 API Token,所有对外接口都需携带。建议由你自己的服务端转发调用,避免在前端源码里公开分发。

{"token":"sk_xxxxxxxxxxxxxxxxxxxxxxxx"}

3. 发送验证码

把用户手机号提交给接口,平台实时下发短信。注册、登录、绑定、找回/修改密码等场景复用同一接口,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}}

4. 校验验证码

用户填入收到的验证码后调用。校验通过返回你账号配置的固定成功值(默认 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 的取值由你在会员中心的配置决定,不是固定字符串 —— 以你账号页面显示的为准。

5. 结果查询(可选)

校验通过后,平台后台仍会异步完成一次账号侧处理(约 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 字段)

6. 调用记录

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

7. 错误码

HTTPcode含义建议处理
4011001token 缺失或无效检查 Token 是否正确
4031008token 已被禁用联系平台方
4001002手机号格式不正确需 11 位纯数字大陆号码
4001006验证码错误或已失效提示用户重试或重新发码
4041005会话不存在或已过期重新发码
4091007当前状态不允许提交验证码检查调用顺序(先发码后校验)
4291004发送过于频繁按提示秒数退避重试
4291009已达当日发码上限次日恢复或联系平台提额
5021003上游不可用 / 被限流稍后重试,勿高频重打

8. 场景示例

注册验证

发码 → 校验 → 通过则创建账号

登录验证

发码 → 校验 → 通过则签发你自己站内的会话

手机号绑定

对已登录用户的新号码发码 → 校验 → 通过则写绑定关系

找回 / 修改密码

用户忘记密码或要改密时,先验证手机号归属 → 通过才放行到设置新密码

浏览器直调(已开 CORS)

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;   // 返回固定成功值即通过
}

服务端(PHP 示例)

$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'])) { /* 校验通过 */ }

9. 接入方账号:手机号注册 / 登录

本平台的接入方账号同样使用手机号 + 短信验证码注册与登录,无需设置密码:

注册

打开 /register 输入手机号 → 获取验证码 → 填入后即完成注册并获得 API Token

登录

打开 /login 输入同一手机号 → 收码 → 登录进会员中心

忘记/换号

手机号即账号;未注册的号走登录会提示先注册,已注册的号走注册会提示直接登录

接入方注册/登录所用的验证码走的就是本平台的短信通道(真实下发)。同一手机号 60 秒内只能获取一次验证码。

10. 规则与限额

项目默认值说明
同号冷却60 秒同一手机号发码间隔,防止轰炸与刷量
日发码上限500 条/账号可在会员中心查看;需要提额联系平台方
验证码有效期5 分钟超时需重新发码
会话有效期30 分钟建会话后需在此时间内完成校验
频率限制动态高频调用可能被限流(429/502),请退避重试
请勿把验证码接口用于营销群发或骚扰;平台方有权对违规账号停用 Token。

11. 常见问题

① 为什么校验成功却查不到 result?

请先看 /smsapi/v1/verify 的同步返回(data.result);/result 反映的是异步的最终状态。

② 同一个手机号会不会串?

不会。平台按「Token + 手机号」隔离会话;多端并发建议显式使用 session。

③ 返回 429 / 1009 怎么办?

当日额度用尽。会员中心可看今日用量,或联系平台方提升上限。

④ 接入方账号怎么注册?

手机号 + 短信验证码即可,不需要密码:注册 / 登录。

⑤ 接口收费吗?

注册即可免费调用,先测通再谈用量。额度与频控以你账号页面显示为准。

⑥ 能否自定义短信内容?

短信内容由通道方统一下发,接入方不能自定义模板;平台负责把手机号提交给通道并回传校验结果。