有个做家政小程序的客户上周找过来,说用户注册收不到验证码,一天丢了二十多个单子。查下来不是代码问题,是他们把测试签名用到了正式环境,签名没报备,通道直接把短信拦了。这类事故在验证码这个环节特别常见,因为它是用户第一次接触你的产品,一旦失败,人直接就走了。

费用到底怎么算

国内验证码短信现在主流价格是 0.032 到 0.05 元一条,走的是三大运营商的正规通道。价格差异主要来自量级和通道类型:月发量一万条以下的,基本按 0.04 到 0.05 走;十万条以上能谈到 0.035 左右;百万级才有 0.03 以下的空间。有些平台标价 0.01 元,那是营销短信通道或者二次转售的通道,验证码这种对到达时间敏感的业务不建议用。

除了短信费,对接的时候还有两笔容易忽略的钱:一是签名,企业签名通常要营业执照加授权书报备,有的平台收 100 到 300 元一次;二是模板,验证码模板一般是免费的,但涉及变量字段(比如「您的验证码是{code},5分钟内有效」)需要单独报备,报备周期 2 小时到 1 个工作日。

接口对接的实际工作量

对接本身不复杂,主流平台提供的都是 HTTP POST 接口,传手机号、模板 ID、签名、验证码内容,返回一个 JSON。后端半天到一天能写完,再花半天做前端倒计时和防重复点击。

真正需要设计的部分在业务侧,有四件事最好在动手前定下来:

  • 验证码有效期,行业惯例是 5 分钟,超过就失效,别做 30 分钟。
  • 同一手机号 60 秒内只能发一次,一天上限 10 条,超过要拉黑,不然会被薅。
  • 验证码存 Redis 不存数据库,带过期时间,验证成功后立即删除,防止重放。
  • 加图形验证码或行为验证做前置,挡住脚本刷接口。没有这层,一天可能被刷掉几千块钱短信费。

为什么总是收不到

按我们这几年处理的工单统计,收不到验证码的原因大概这么分布:签名或模板未报备占四成,通道拦截(手机号在黑名单、虚拟号段、携号转网号码)占两成多,运营商侧延迟占一成半,用户手机装了拦截软件占一成,剩下的是代码本身的问题,比如号码格式不对、接口超时没有重试。

排查顺序建议这样走:先看接口返回码,平台一般会明确告诉你「签名未报备」还是「模板不存在」;返回成功但用户没收到,就看平台后台的发送记录和回执状态,是「已送达」还是「发送失败」;都是已送达还没收到,让用户检查手机拦截记录和短信归类,很多安卓机把验证码归到「通知类」里去了。

通道要不要留备用

要。单一通道出事就是全站注册瘫痪。常见做法是接两家平台,主通道失败自动切备用,代码里加一个降级逻辑,接口超时或返回失败码就换一家重发。成本上多不了多少,但能避免大促当天因为一条通道拥堵丢掉整晚的流量。

还有一点很多人不注意:验证码之外的关键通知,比如订单支付成功、预约确认,也走同一套体系。这类消息建议用模板短信加公众号模板消息双发,短信到不了还有微信兜底。

博纳网络在深圳做网站和软件定制 13 年,短信验证码、支付、地图这类第三方接口的对接是每个项目都会碰到的基础工作,踩过的坑基本都整理成了内部规范。需要评估接口方案或者现有系统稳定性,电话 0755-82538016 / 13828753662(微信同号)。