验证码短信接口是什么?原理、应用场景与 5 条注意事项一篇讲清
验证码短信接口是 B 端短信 API,向用户手机号下发验证码用于身份验证。本文讲清原理、6 大应用场景、5 条选型注意事项。
一句话定义
验证码短信接口是一种 B 端短信 API:你的业务系统调用短信接口,向用户手机号下发一串数字验证码,用户在客户端输入完成身份验证。它是注册、登录、支付等关键环节的二次密码,是几乎所有带账号体系的互联网产品的标配基础设施。
工作原理(4 步)
你的业务系统 ──HTTP POST──▶ 短信 API(服务商)
│ ├──▶ 三网通道(移动 / 联通 / 电信) │ 用户手机 ◀──短信到达──【您的验证码是 123456,5 分钟内有效】
phone(手机号)+ code(短信内容)+ title(签名)验证码短信 vs 通知短信 vs 营销短信
短信按用途分三大类,验证码短信是其中对送达率 + 时效性要求最高的一种:
| 类型 | 用途 | 时效要求 | 模板报备 |
|---|
| 验证码短信 | 注册、登录、支付确认 | 秒级(用户正在等待) | ✅ 必报备 |
|---|---|---|---|
| 通知短信 | 订单状态、物流提醒 | 分钟级 | ✅ 必报备 |
| 营销短信 | 活动推广、会员触达 | 小时级 | ✅ 必报备 |
三类短信走的都是同一个短信接口,主要区别在报备的模板与触发逻辑;本接口按 code 传入的正文区分内容,没有模板 ID 参数。
6 大典型应用场景
短信签名 vs 短信模板
短信下发涉及两个必报备项:
报备是在后台把签名与模板先审过,不是在请求里引用模板 ID——本接口的请求体里没有 template_id 字段。调用时把渲染完成的完整短信正文放进 code(签名也按 code 的原文算),title 放模板固定内容(可为空):
mall_id=100001
phone=13800138000 title=诺正通 code=【诺正通】您的验证码是 123456,5 分钟内有效,请勿泄露。 sign=md5(mall_id + phone + code + appkey) ← title 不参与签名
所以"模板变量替换"发生在你自己的服务端:先在本地把变量渲染成最终文案,再把整段文本交给 code。这也意味着改一个字都要重算签名——签名与正文是强耦合的。
5 条选型 / 接入注意事项
1. 验证码必须设有效期(推荐 5 分钟)
验证码如果不设有效期,被截获后可被无限次使用。推荐做法:
2. 注意短信下发频率限制
通道对验证码类短信有同号限频:超过阈值时接口直接返回 1008 验证码类短信发送频率过快(不计费,不是故障)。阈值由通道按签名与模板的策略配置,代码里不要写死固定条数——不同签名的配额可能不同,写死只会让某天突然开始失败。业务侧要自己先限:
三层各挡一类误触/脚本/批量攻击,只做前端倒计时等于没做;触发限频过于频繁也可能影响签名可用性。
3. 验证码位数与随机性
4. 状态回调 / 送达回执
短信下发后不一定是即送达的——可能因运营商通道拥堵、手机关机等延迟。建议接入状态回调接口:服务商主动推送已送达 / 失败结果,业务系统据此更新发送状态(避免用户已收到但业务侧仍显示发送中)。
5. 模板与签名变更要走审核流程
短信签名 / 模板修改后必须重新报备审核(时长以通道确认为准,不要在排期里写死固定小时数)。建议:
一个常被忽略的能力:可带链接
部分短信 API 支持在短信内容中携带短链(如 https://t.cn/xxx),用于:
短链把"点进去才知道去哪"变成可点击入口,但点击率不要拍脑袋估:通道只回送达回执、不给点击数据,点击统计要在短链跳转层或落地页埋点,评估营销短信要看发送 → 送达 → 点击 → 落地页四层漏斗(做法见短链服务怎么设计)。
注意:短信带链接需要在模板报备时明确说明,且链接域名需提前备案。不能在短信正文中临时拼装未报备的链接(会被运营商拦截)。
接口调用示例
POST /sms.php HTTP/1.1
Host: api.nztapi.com Content-Type: application/x-www-form-urlencoded
mall_id=MALL001&phone=13800138000&title=诺正通&code=【诺正通】您的验证码是 123456,5 分钟内有效。&sign=a1b2c3d4e5f6...
短信接口签名不含 tm:md5(mall_id + phone + code + appkey);返回为扁平结构{"code":1000,"message":"发送成功"},错误码为独立一套(1002 签名错误、1009 短信内容缺少签名信息等)。
参数说明:
- phone —— 接收方手机号
- code —— 完整短信内容(含签名 + 模板 + 变量替换结果)
- title —— 短信签名
10 个返回码速查(短信接口独立码表)
短信接口 /sms.php 的返回码与核验类接口(身份证 / 手机号 / 银行卡)不是一套:这里是无 data/status 包装的数字码,同一个数字在两套码表里含义不同——核验类 1002 是「库中无此号」,短信类 1002 是「签名错误」;核验类 1003 是「第三方服务异常」,短信类 1003 是「可发送条数为 0」。按核验类的经验去读短信返回码,会把额度问题当成参数问题排查。
| code | 含义 | 处理建议 |
|---|
| 1000 | 发送成功(计费) | 等待送达回执 |
|---|---|---|
| 1001 | 发送短信失败 | 不计费,通道侧失败,可稍后重发 |
| 1002 | 签名错误 | 按 md5(mall_id + phone + code + appkey) 重算;短信签名不含 tm,照抄核验类拼接必错 |
| 1003 | 可发送短信条数为 0 | 额度问题不是参数问题,充值或联系商务 |
| 1004 | 短信内容为空 | code 不能为空,内容全放进 title 也不行 |
| 1005 | 内容存在敏感词 | 复查文案,验证码类/营销类走模板报备 |
| 1006 | 错误的手机号 | 前置格式校验 |
| 1007 | 号码在黑名单中 | 用户退订过,停发并记录 |
| 1008 | 验证码类短信发送频率过快 | 同号限频,见上方第 2 条注意事项 |
| 1009 | 内容缺少签名信息 | 正文结构必须是 【签名】+ 内容 |
只有 1000 计费,其余全部不计费。完整的两套码表对照与接入细节见消息通知接口接入指南。
关于诺正通
诺正通提供短信验证码 API,三网合一通道(移动 / 联通 / 电信 / 广电),支持验证码短信、通知短信、营销短信全场景。支持短信内携带短链,可显著提升营销短信的点击转化率。20 条免费试用,按量计费,具体价格请联系商务。