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

news/2024/10/25 7:34:05/

一、阿里云短信服务介绍

短信服务(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(支持单双参数模板)
java">/*** 阿里云短信验证码发送工具类*/
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 和 headersSystem.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"));// 配置 Endpointconfig.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 和 headersSystem.out.println(toJSONString(sendSmsResponse));}
}

3、调用工具类发送短信

  • 下面给出一个发送验证码的示例
java">@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位数字// 保存验证码到sessionsession.setAttribute(phone, code);// 发送验证码,有效期LOGIN_CODE_TTL分钟SMSUtils.sendMessage("签名signName", "SMS_474225xxx", phone, code, LOGIN_CODE_TTL);// 模拟发送短信验证码log.debug("向{}发送短信验证码成功,验证码:{}", phone, code);// 返回okreturn Result.ok();}
}
  • 也可以直接在main()方法中调用SMSUtils.sendMessage()测试发送。
java">public static void main(String[] args) {sendMessage("XXX网站签名", "SMS_474225xxx", "13900010001", "6666", 5);
}



http://www.ppmy.cn/news/1541779.html

相关文章

Vue3——模板引用

绑定dom组件 defineExpose 可以用来暴露子组件的变量&#xff08;例如 ref 或 reactive&#xff09;和方法。这让父组件可以直接访问子组件的某些状态。 defineExpose 示例 以下是如何通过 defineExpose 暴露变量的示例&#xff1a; <template> <div> <bu…

基于深度学习的音乐生成与风格转换

基于深度学习的音乐生成与风格转换是近年来人工智能领域的一个热门研究方向&#xff0c;涉及利用深度学习技术生成音乐作品或将音乐从一种风格转换为另一种风格。这种技术可以自动化创作过程&#xff0c;同时保持音乐的艺术性和风格特征&#xff0c;广泛应用于娱乐、音乐制作、…

十七、行为型(命令模式)

命令模式&#xff08;Command Pattern&#xff09; 概念 命令模式是一种行为型设计模式&#xff0c;它将请求封装成一个对象&#xff0c;从而使您可以使用不同的请求对客户进行参数化&#xff0c;排队请求&#xff0c;以及支持可撤销操作。通过这种模式&#xff0c;调用操作的…

3.1.1 ReactOS系统中二叉树创建一个MEMORY_AREA节点

二叉树中创建一个MEMORY_AREA节点&#xff1a; 二叉树中创建一个MEMORY_AREA节点&#xff1a; MmCreateMemoryArea() 参数AddressSpace是MADDRESS SPACE结构指针&#xff0c;所指向的数据结构代表着一个进程的用 户空间。 参数BaseAddress是个指针&#xff0c;用来给定和返回内…

【Android】使用 Compose 自定义 View 实现从 0 ~ 1 仿 EChat 柱状图

目录 前言DrawScopeDrawScope Api 绘制柱状图绘制 X 轴绘制 Y 轴绘制柱状背景绘制柱状前景完整代码最终效果 存在的问题 前言 本文讲的是使用 compose 去自定义 View &#xff0c;如果您未曾通过继承 View 的方式去实现自定义 View&#xff0c;那么&#xff0c;我建议在观看本…

3D虚拟服装试穿技术:迈向元宇宙与AR电商的新时代

随着电子商务的不断进化,消费者对于在线购物体验的需求也在不断提升。在这样的背景下,3D虚拟服装试穿技术正逐渐成为连接现实世界与数字世界的桥梁,为用户带来前所未有的沉浸式购物体验。本文将介绍一种创新的3D虚拟服装试穿系统——GS-VTON,它旨在克服现有技术局限,并提供…

ECharts饼图-富文本标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

【Mac 上将 MOV 格式转换为 MP4 格式的简易指南】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…