做注册登录功能,验证码短信接口几乎是绕不开的一环。接口本身很简单,一个 HTTP 请求带上手机号和内容就能发出去。真正让开发同学头疼的,是上线以后的事:用户说收不到、短信费突然暴涨、被人拿接口刷了一晚上。

这篇按开发顺序讲一遍,从准备工作到防刷,尽量把容易踩的坑都提前点出来。

对接验证码短信接口前要准备什么

动手写代码之前,有三样东西要先在短信平台后台搞定:

  1. 企业认证:服务商要核验你的真实身份;
  2. 签名:也就是短信开头【】里的名字,一般用企业全称、简称或注册商标;
  3. 验证码模板:例如「您的验证码为××××,5分钟内有效,请勿泄露给他人。」,××××的位置用平台规定的变量占位符。

模板审核通过后,平台会给你接口地址、账号和密钥。密钥只能放在服务器端,千万别写进前端代码或 App 安装包里,被人抓包拿到就麻烦了。

开发流程

生成和存储验证码

验证码由你自己的服务端生成,一般是 4 到 6 位随机数字。生成后和手机号一起存起来,记下过期时间,常见做法是放在缓存里。别用自增数字或者时间戳,太容易被猜。

调用发送接口

服务端拿到手机号后调用验证码短信接口,传入手机号、模板编号和变量。接口返回的只是「提交成功」,不代表用户已经收到。返回结果里一般有一个消息编号,记下来,后面对回执用。

处理状态回执

运营商的回执会晚几秒到达,平台可以推送到你配置的回调地址,也可以由你主动查询。回执里能看到成功、失败以及失败原因。建议把回执和发送记录关联存储,用户来投诉收不到时,客服一查就知道卡在哪。

校验验证码

用户提交时,比对手机号、验证码和有效期,校验通过后立刻让这条验证码失效。同一条验证码允许输错几次也要限制,不然可以被暴力尝试。

防刷:上线前一定要做

这是验证码短信接口最容易出事的地方。发送接口暴露在注册、登录页面上,如果没有任何限制,有人写个脚本就能用你的接口给大量号码发短信,费用记在你头上,还可能因为骚扰投诉影响通道。

常用的几道防线:

  • 发送前先过人机验证,例如滑块或图形验证码;
  • 同一手机号设置发送间隔,比如一分钟内只能发一次,每天设上限;
  • 同一 IP、同一设备也要限频;
  • 监控每小时发送量,突然暴涨时自动告警,必要时临时关闭发送入口。

这几条不需要全部做到很复杂,但一条都不做是真的危险。

验证码通道要单独用

验证码对速度要求高,最好走专门的验证码通道,不和营销短信混在一起。混用的话,营销内容一旦被大量投诉,验证码也会受到牵连。蔚岚科技的短信群发平台对验证码、通知、营销分开管理,主备通道可以自动切换。

另外,验证码模板里别加任何推广内容,哪怕只是一句「欢迎关注我们的活动」,都可能让它被当成营销短信处理。

验证码短信接口的几个常见坑

重复点击。 用户等了几秒没收到就猛点「获取验证码」,前端要做倒计时,后端也要限频,不然同一个人一分钟收到好几条,用哪条都说不清。

多个验证码同时有效。 新的验证码发出后,旧的应该作废,否则用户输了上一条,系统提示错误,体验很差。

国际号码。 如果你的用户里有境外手机号,国内的验证码短信接口一般发不了,要单独开通国际短信,号码格式也要带国家代码。

上线后的监控

建议至少盯三项数据:发送成功率、用户从请求到提交验证码的时间、单位时间的发送量。成功率掉下来,先看回执里的失败原因集中在哪一类,是号码问题、内容问题还是某个运营商的问题,再去找服务商一起排查。

结论

对接验证码短信接口,代码量其实不大,功夫花在两头:前面把签名、模板、密钥管理准备好,后面把回执、防刷、监控做到位。尤其是防刷,最好在上线第一天就有,别等账单出来才补。

常见问题

验证码有效期设多久合适?

常见是 5 到 10 分钟。太短用户来不及输入,太长又增加被盗用的风险,按自己的业务场景定。

用户说收不到验证码,第一步查什么?

先查这条短信的回执状态。显示成功但用户没看到,多半是被手机拦截了;显示失败,就按失败原因处理。

能不能用一个模板同时发验证码和通知?

不建议。验证码和通知分开模板,各走各的通道,排查问题也更方便。

测试阶段会不会产生费用?

大多数平台按条计费,测试发出的短信也算。正规平台一般会给测试额度,具体以平台规则为准。

接口调用失败怎么处理?

先看返回的错误码,常见的有签名或模板不匹配、账户余额不足、参数格式错误。需要接口文档和测试账号的话,可以联系我们。