【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)

简介: 阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。

一、阿里云短信服务介绍

短信服务(Short Message Service)是阿里云为广大企业用户或个人用户提供的通信服务。通过API/SDK、控制台调用短信发送能力,将指定信息发送至国内或境外手机号码。可以在不同场景发送不同类型的短信,例如验证码、通知短信、推广短信以及多媒体短信等。

在我们学习第三方服务调用的时候,最好是参考最新的官方文档进行学习使用,阿里云SMS短信服务官方帮助文档:https://help.aliyun.com/zh/sms/


二、服务开通准备工作

注册阿里云账户(注册完成后需要实名认证),注册完账号之后登录阿里云https://www.aliyun.com/

产品搜索短信服务,点击进入短信服务

如果是新用户(未开通过阿里云短信服务),可以免费使用:https://free.aliyun.com/product/cloudcommunication-free-trial

以前开通过短信服务的用户,如果只是个人测试使用,发送的短信不多,可以在个人账户中充1元,因为发送一条短信是¥0.045。

1、申请资质、签名和短信模板

短信服务控制台 中申请资质、测试签名、测试模板。

  1. 在资质管理中申请资质(个人或企业)

  1. 在签名管理中申请签名,适用场景根据自己的需求填写。

短信签名可申请次数请参见下表:

  1. 在模板管理中添加短信模板,根据自己的需求填写即可,这边使用了一个双变量模板。

注意:以上申请都需要审核时间,符合规范可以更快的通过。

2、创建并保存Accesskey

在阿里云网站上的个人中心配置Accesskey,查询AccessKeyld和AccesskeySecret。

点击继续使用AccessKey。

点击创建AccessKey。

注意:通过安全验证后可以看到生成的accessKeyld和accessKeySecret,大家下载csv文件或者复制下来,因为accessKeySecret只显示一次,点击确定后将不再显示!

3、配置访问凭证AK & SK(系统环境变量)

目前最新官方SDK要求将AccessKey ID和AccessKey Secret配置到系统环境变量,才能使用阿里云OSS服务。

去官网申请和配置好AK密钥对后,就可以使用下面的工具类发送阿里云短信啦~

  • 以Windows配置访问凭证为例(其他系统请参考官方文档)

管理员身份打开CMD命令行,执行如下命令,配置系统的环境变量。

set ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyId set ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret

注意:将上述的ACCESS_KEY_ID 与 ACCESS_KEY_SECRET 的值要替换成自己的。

执行如下命令,让更改生效。

setx ALIBABA_CLOUD_ACCESS_KEY_ID "%ALIBABA_CLOUD_ACCESS_KEY_ID%" setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "%ALIBABA_CLOUD_ACCESS_KEY_SECRET%"

执行如下命令,验证环境变量是否生效。

echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

注意:设置完环境变量需要重启IDEA,才能重新读取系统环境变量。


三、调用API发送短信验证码

1、导入Maven依赖坐标

<!-- 阿里云短信SMS --> <dependency>  <groupId>com.aliyun</groupId>  <artifactId>dysmsapi20170525</artifactId>  <version>3.0.0</version> </dependency>

2、阿里云短信验证码发送工具类

  • 阿里云短信验证码发送工具类SMSUtils(支持单双参数模板)
/**  * 阿里云短信验证码发送工具类  */ public class SMSUtils {  /**  * 发送短信(双参数模板)  * <phoneNumbers>: 接收短信的手机号码,多个用英文逗号隔开  * <signNameJson>: 短信签名名称,eg: "阿里云"  * <templateCode>: 短信模板CODE  * <templateParamJson>: 短信模板变量对应的实际值,eg:{"code":"1234"}  *  * @param signName 签名  * @param templateCode 模板  * @param phoneNumbers 手机号  * @param code 验证码  * @param time 验证码有效期(单位:秒)  */  public static void sendMessage(String signName, String templateCode, String phoneNumbers, String code, int time) {  // 初始化请求客户端  Client client = null;  try {  client = SMSUtils.createClient();  } catch (Exception e) {  throw new RuntimeException(e);  }  // 构造请求对象,请填入请求参数值  SendSmsRequest sendSmsRequest = new SendSmsRequest()  .setPhoneNumbers(phoneNumbers)  .setSignName(signName)  .setTemplateCode(templateCode)  .setTemplateParam("{\"code\":\"" + code + "\",\"time\":\"" + time + "\"}");  // 获取响应对象  SendSmsResponse sendSmsResponse = null;  try {  sendSmsResponse = client.sendSms(sendSmsRequest);  } catch (Exception e) {  throw new RuntimeException(e);  }  // 响应包含服务端响应的 body 和 headers  System.out.println(toJSONString(sendSmsResponse));  //System.out.println(sendSmsResponse.getBody());  }  private static Client createClient() throws Exception {  Config config = new Config()  // 配置 AccessKey ID,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。  .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))  // 配置 AccessKey Secret,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。  .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));  // 配置 Endpoint  config.endpoint = "dysmsapi.aliyuncs.com";  return new Client(config);  }  /**  * 发送短信(单参数模板)  * <phoneNumbers>: 接收短信的手机号码,多个用英文逗号隔开  * <signNameJson>: 短信签名名称,eg: "阿里云"  * <templateCode>: 短信模板CODE  * <templateParamJson>: 短信模板变量对应的实际值,eg:{"code":"1234"}  *  * @param signName 签名  * @param templateCode 模板  * @param phoneNumbers 手机号  * @param code 验证码  */  public static void sendMessage(String signName, String templateCode, String phoneNumbers, String code) {  // 初始化请求客户端  Client client = null;  try {  client = SMSUtils.createClient();  } catch (Exception e) {  throw new RuntimeException(e);  }  // 构造请求对象,请填入请求参数值  SendSmsRequest sendSmsRequest = new SendSmsRequest()  .setPhoneNumbers(phoneNumbers)  .setSignName(signName)  .setTemplateCode(templateCode)  .setTemplateParam("{\"code\":\"" + code + "\"}");  // 获取响应对象  SendSmsResponse sendSmsResponse = null;  try {  sendSmsResponse = client.sendSms(sendSmsRequest);  } catch (Exception e) {  throw new RuntimeException(e);  }  // 响应包含服务端响应的 body 和 headers  System.out.println(toJSONString(sendSmsResponse));  } }

3、调用工具类发送短信

  • 下面给出一个发送验证码的示例
@Slf4j @RestController @RequestMapping("/user") public class UserController {  /**  * 发送手机验证码并保存验证码到Session  */  @PostMapping("/code")  public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {  // 校验手机号格式是否有效  if (RegexUtils.isPhoneInvalid(phone)) {  // 格式不符合,返回错误信息  return Result.fail("手机号格式错误!");  }  // 格式有效,生成验证码  String code = RandomUtil.randomNumbers(6); // 随机6位数字  // 保存验证码到session  session.setAttribute(phone, code);  // 发送验证码,有效期LOGIN_CODE_TTL分钟  SMSUtils.sendMessage("签名signName", "SMS_474225xxx", phone, code, LOGIN_CODE_TTL);  // 模拟发送短信验证码  log.debug("向{}发送短信验证码成功,验证码:{}", phone, code);  // 返回ok  return Result.ok();  } }
  • 也可以直接在main()方法中调用SMSUtils.sendMessage()测试发送。
public static void main(String[] args) {  sendMessage("XXX网站签名", "SMS_474225xxx", "13900010001", "6666", 5); }

相关文章
|
24天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
3月前
|
弹性计算 运维 安全
云迁移最佳实践:HyperMotion助中小企业高效上云,阿里云工具集深度集成三方迁移工具
中小企业上云需求强烈,但面临缺乏了解、无合适方案及成本过高等挑战。为解决这些问题,推出“云迁移HyperMotion阿里云集成版”,提供三步上云、自助迁移、自动适配等能力,助力企业高效、低成本完成迁移。
116 0
|
10月前
|
小程序
如何提升审核通过率?|阿里云短信服务
提升短信审核率的 tips 都在这里了哦!
637 15
|
6月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
421 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
6月前
|
移动开发 Java 测试技术
HarmonyOS NEXT~鸿蒙系统与mPaaS三方框架集成指南
本文详细介绍了鸿蒙系统(HarmonyOS)与mPaaS框架的集成方法。鸿蒙系统作为华为开发的分布式操作系统,具备分布式架构、微内核设计等特性;mPaaS是蚂蚁金服推出的移动开发平台,提供金融级组件和全生命周期管理能力。文章从环境准备、核心功能集成(如初始化、用户认证、支付功能)、适配问题解决到调试测试及最佳实践,全方位指导开发者高效集成两者。通过遵循指南,可充分利用鸿蒙的特性和mPaaS的金融能力,构建高性能、高安全性的应用,同时避免常见兼容性问题,缩短开发周期。
344 0
|
7月前
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2.mxdraw3d.com:3000/mxcad/)供用户测试实时效果。
|
9月前
|
缓存 运维 监控
Anolis OS深度集成运维利器 阿里云操作系统控制台上线
阿里云在百万服务器运维领域的丰富经验打造。
Anolis OS深度集成运维利器 阿里云操作系统控制台上线
|
8月前
|
人工智能 安全 搜索推荐
阿里云采购季:短信服务低至 0.01 元/条!
阿里云“上云采购季”,短信服务低至 0.01 元/条
291 3
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
592 12
|
8月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
286 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
下一篇