短信验证码、订单通知、物流提醒,这些功能几乎每个业务系统迟早都会碰到。小团队自己搭短信通道,运营商对接和资质都很麻烦,多数情况下直接用云服务商的短信能力更省事。阿里云短信服务(SMS)的开放接口比较完整,本文按实际顺序走一遍阿里云短信开发的流程:先准备账号和资质,再处理签名与模板,最后落到代码、回执和风控上。

一、开发前的准备
很多人一上来就写代码,等到要上线才发现签名还没过审。账号和资质的事情看起来与开发无关,实际上最容易拖慢进度。
- 完成阿里云账号的实名认证,没有实名就无法正常使用短信服务。
- 在控制台开通短信服务,保存好 AccessKey ID 和 AccessKey Secret。密钥只在创建时完整展示,丢了就得重新生成。
- 给 AccessKey 配置最小权限,只授予短信相关的操作。别图省事直接用主账号密钥,一旦泄露,影响面会很大。
- 申请前想清楚每条短信的用途。验证码、业务通知、营销短信的审核标准不同,材料要分开准备。
签名和模板都需要审核,审核时会看业务场景,有时还会要求提供网站或应用的截图。验证码类模板一般比营销类容易通过,营销内容的审核会更细。审核耗时以控制台的实际提示为准,排期时多留点余量,别把审核压在上线前一天。
二、签名与模板怎么写
发送短信主要依赖两样东西。签名是短信开头方括号里的内容,比如【某某科技】;模板是固定文本,变化的部分用占位符表示,比如:您的验证码为${code},5分钟内有效。签名要和申请主体对得上,模板内容要和实际业务对得上,审核时通常就看这两点。
案例:电商订单通知的模板改写
假设某个小型电商团队要发送发货通知。最初的模板写得比较随意,带了不少促销词,结果被驳回。后来把内容改成:您的订单${orderNo}已发货,物流单号${expressNo},请注意查收。这次很快通过了。模板越贴近业务事实、营销味越淡,通过的可能性越大,验证码和通知类短信上尤其明显。
常见驳回原因
- 签名和申请主体不一致,比如公司名称和营业执照对不上。这类问题最容易被忽略,提交前核对一遍就能避开。
- 模板里有没说明的推广信息,或者带诱导性的字眼,比如“点击领取”一类的表述。
- 变量太多或位置不清楚,审核人员看不出短信到底是做什么用的。变量尽量少,每个变量在模板里的位置要一眼能看懂。
三、接入 SDK 并发送短信
阿里云提供了 Java、Python、Node.js、Go 等多种语言的官方 SDK。下面以 Java 为例,看一下最基础的发送流程。
先在 pom.xml 中引入依赖。坐标是 com.aliyun:dysmsapi20170525,底层通信使用 com.aliyun:tea-openapi。版本号请以官方文档的最新稳定版为准,不要直接照搬旧博客里的版本,接口变动后旧版本可能出问题。
核心代码的思路如下,AccessKey 通过环境变量或配置中心读取,切勿硬编码在代码里:
String accessKeyId = System.getenv(“ALIYUN_ACCESS_KEY_ID”);
String accessKeySecret = System.getenv(“ALIYUN_ACCESS_KEY_SECRET”);
// 创建客户端配置,接入点使用默认的 dysmsapi.aliyuncs.com
// 构造 SendSmsRequest,设置 phoneNumbers、signName、templateCode、templateParam
// 调用 sendSms 方法,并根据返回的 Code 判断是否发送成功
真正上项目时,建议把发送逻辑封装成独立的服务类,统一处理签名、模板、参数校验和异常捕获。业务代码只传手机号、模板编码和参数,不用关心底层细节。以后换模板或换渠道,改动范围也小。
案例:验证码服务的收敛
某社区应用最初在多个接口里直接调用短信 SDK,后来模板编码要更换,改了十几处代码,还漏了一处。之后团队把发送能力收敛到一个 SmsService 里,模板编码放进配置文件。再有模板调整,只需改配置,不用动业务代码。这种做法技术上并不复杂,好处是改动只发生在一个地方。
四、回执、异常与频控
接口返回成功,并不代表用户一定收到了短信。运营商、号码状态等因素都会影响实际送达,所以系统里要把这几层分开看。
- 根据返回码区分参数错误、余额不足、频率超限等情况,分别处理。参数错误要改代码,余额不足要报警,频率超限要给用户降级提示,三类不要混在一个 catch 里。
- 通过回执查询接口或回调机制拿到最终送达状态。验证码类短信如果长时间没有回执,前端应该给出重新获取的入口,而不是让用户干等。
- 对验证码请求做频率限制,例如同一手机号 60 秒内只允许发送一次。
- 失败请求可以重试,但次数要设上限。还要区分“确定没发出去”和“不确定有没有发出去”,后者盲目重试容易重复扣费。
安全方面也要重视。验证码接口如果没有限制,很容易被拿来做短信轰炸,既浪费费用,也会让真实用户收到一堆垃圾短信。比较稳妥的做法是在网关层或业务层同时加图形验证码、IP 限制和手机号维度的频控,几层叠起来,单一漏洞就不容易被利用。
五、成本与监控
短信按条计费,不同模板、不同地区的单价可能不一样,上线后要盯住几个数字:每日发送量、发送成功率、送达时长和费用走势。阿里云控制台自带基础报表,要做更细的分析,可以把数据接入自有监控系统。
一个常见的做法是设置日发送量的告警阈值。某天的量明显高于历史均值时,系统自动通知负责人,尽快排查是不是有人在刷接口,或者代码里出现了循环调用。费用问题往往是某个晚上突然爆掉的,平时很难察觉,所以阈值告警要提前设好。
六、上线前的几件小事
阿里云短信开发的步骤本身不算复杂,耽误时间的多半是资质审核、模板措辞和频率控制。签名和模板尽早提交,发送逻辑统一封装,限流和监控提前做好,短信功能基本就能稳定跑起来。刚接触的开发者,建议先在测试环境把完整链路跑通,包括回执、失败重试和频控,再切到正式环境。正式环境的第一批真实请求,最好安排人盯一段时间。