做小程序的客户经常问一个问题:微信已经能一键获取手机号了,还有必要接短信验证码吗?我们的回答一般是看场景。只在微信里用、对账号安全要求不高的,微信自带的手机号能力够用;但只要你的账号体系要和网站、App、线下系统打通,或者用户换了微信号也要能找回账号,短信验证码基本绕不开。
下面按我们实际开发的顺序,把小程序接入短信验证码这件事拆开讲。
小程序里哪些地方会用到短信验证码
最常见的是这三处:
- 注册和登录,用手机号作为账号,验证码代替密码;
- 绑定手机号,用户先用微信登录,下单或领会员时再补一个手机号;
- 敏感操作确认,比如修改收货信息、提现、注销账号。
有的项目还会在换绑手机号时要求旧号码、新号码各验证一次。需求文档里把这些场景列全,后端接口才不会做到一半再返工。
小程序短信验证码怎么开通
开通其实不是在小程序后台点个按钮,而是要先有一个正规的短信通道。准备工作大致是这样:
- 在短信平台开好企业账号,完成实名和资质认证;
- 报备短信签名,一般用小程序名称、公司简称或品牌名,要和主体资质对得上;
- 提交验证码模板,内容写清用途和有效时间,比如“您的登录验证码为××,若非本人操作请忽略”;
- 拿到接口密钥,交给后端开发配置。
验证码属于通知类短信,和营销短信的通道、审核口径都不一样,开账号时就说清用途。签名和模板审核通过之前,接口是发不出去的,这一步建议和小程序开发同步启动,别等页面都做完了才去报备。
接入流程:前端和后端各管什么
前端只负责交互
小程序页面上做的事情很简单:输入手机号、点获取验证码、倒计时、输入验证码、提交。前端不生成验证码,也不直接调用短信平台的接口,只调用你自己服务器的接口。服务器域名要在小程序后台配置成合法域名,否则请求会被拦住。
后端负责发送和校验
密钥只能放在后端。 我们见过有开发图省事,把短信接口的密钥写进小程序代码里,等于把钥匙挂在门上,别人拆包就能拿去刷你的余额。
后端收到请求后,生成随机验证码,和手机号一起存进缓存并设有效期,再调用短信接口发出去。用户提交时,后端比对手机号和验证码,通过就删掉这条记录,防止同一个验证码被反复使用。校验成功后,把手机号和用户的微信身份标识关联起来,再签发登录态。
开发联调阶段,别拿真实接口一遍遍发给自己的手机。测试环境可以把短信验证码打印在日志里,或者用固定的测试码,正式环境再切回真实发送,记得上线前检查这个开关有没有关掉。
绑定手机号的特殊情况
用户已经用微信登录过,再绑手机号时,要先查这个号码有没有被别的账号绑过。已经绑过的,是提示“该号码已注册,是否合并”还是直接拒绝,要提前和业务方定好规则,不然上线后客服会接到一堆“我的积分不见了”的投诉。
防刷:最容易被跳过的一步
短信验证码接口一旦暴露,很快就会有人拿脚本来刷,轻则浪费短信条数,重则签名被大量用户投诉。防刷不需要很复杂,但下面几样最好都有:
| 措施 | 作用 |
|---|---|
| 同一手机号限制发送间隔和每日次数 | 防止对单个号码轰炸 |
| 同一设备、同一 IP 限制请求频率 | 防止脚本批量换号 |
| 连续获取时加图形或滑块校验 | 拦住大部分自动化请求 |
| 验证码输错多次即失效 | 防止暴力猜码 |
这些限制写在后端,前端的倒计时只是给用户看的,挡不住直接调接口的人。
体验上的几个小细节
验证码短信到得慢,用户第一反应是点重发,所以重发按钮的倒计时不要省。输入框可以设成数字键盘,少一步切换。验证码过期、输错、发送太频繁,提示文案要分开写,别统一显示“操作失败”,用户不知道该等还是该重输。
另外,验证码短信只发验证码,别顺手在里面加活动推广,混进营销内容反而容易影响审核和送达。
结论
小程序接入短信验证码,前提是有正规通道、报备好签名和模板;开发上前端只做交互,生成、发送和校验全部放在后端,密钥绝不进小程序代码;上线前把频率限制、图形校验、错误次数限制做好。蔚岚科技可以同时承接小程序开发和短信接口对接,签名报备也能一起协助,有需要可以打 18720919319 沟通。
常见问题
小程序能直接调用短信平台的接口吗?
不建议。密钥会暴露在小程序代码里,应该由你自己的服务器去调用短信接口,小程序只请求你的服务器。
有了微信一键获取手机号,还要做短信验证码吗?
看业务。账号要和网站、App 打通,或者用户可能换微信号,最好保留短信验证码作为登录和找回方式。
验证码有效期设多久合适?
一般设几分钟,太短用户来不及输,太长安全性下降。同时规定一个验证码只能用一次。
签名用小程序名称可以吗?
可以,但名称要和提交的主体资质对应得上,平台审核时会核对,资料不一致容易被驳回。
验证码发不出去,先查哪里?
先看后端接口的返回结果,常见原因是签名或模板未审核、账户余额不足、触发了频率限制、手机号格式有误,按返回信息逐项排查。