阿里云短信服务
官网:阿里云短信服务文档使用指引
https://help.aliyun.com/document_detail/59210.html
1.第一步在阿里云注册
2.第二步登录并做实名认证
注:实名认证是为了获取阿里云的服务权限

4.第四步设置短信签名
5.第五步设置短信模板
6.第六步获取AK和SK
注:AK和SK,是指 AccessKey ID和AccessKey Secret
新增用户成功后,显示页面效果
再次刷新,用户页面的效果
注意:AK/SK都看不到了,点进账号可以看到AK,但是SK不会显示,所以在创建用户后一定要记住SK
特别注意:一定要记住AK/SK,发送短信的代码中需要使用
7.第七步下载SDK和DEMO
8.项目中引入短信服务(项目1)
1.导包
<!--阿里云短信服务依赖包-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.1.0</version>
</dependency>
2.创建常量类
package com.sms.common;
/**
* @Author: zzy
* @Desc: 短信发送常量类
* @Date: 2022-05-22 14:34:59
*/
public class SmsConstant {
/**
* 阿里云-短信服务签名
*/
public static final String SIGNATURE_NAME = "阿里云短信模板";
/**
* 阿里云-短信服务用户登录验证码模板CODE
*/
public static final String VERIFYCODE_TEMPLATE_CODE = "SMS_177539469";
/**
* 客户登录验证码-session中业务key
*/
public static final String USER_VERIFY_CODE = "user_verify_code_";
}
3.导入信息服务工具类
package com.sms.util;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
/**
* 短信发送工具类
*/
public class SMSUtils {
/**
* 发送短信
* @param signName 签名
* @param templateCode 模板
* @param phoneNumbers 手机号
* @param param 参数
*/
public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5t9HVTr1zoHYsKr1a62G", "lfnSHujuWeftFD85R5ZmoQjPe8wy9n");
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setSysRegionId("cn-hangzhou");
//短信发送的手机号 多个手机号中间使用【,】逗号分隔
request.setPhoneNumbers(phoneNumbers);
//签名的名称
request.setSignName(signName);
//模板code
request.setTemplateCode(templateCode);
//短信验证码 注意:【code】是和模板内容中的变量名称是一致的
request.setTemplateParam("{\"code\":\""+param+"\"}");
try {
SendSmsResponse response = client.getAcsResponse(request);
System.out.println("短信发送成功");
}catch (ClientException e) {
e.printStackTrace();
}
}
}
package com.itheima.service.impl;
import com.itheima.common.SmsConstant;
import com.itheima.mapper.UserMapper;
import com.itheima.service.UserService;
import com.itheima.util.SMSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Random;
@Service
public class UserServiceImpl implements UserService {
@Override
public Integer sendMsg(String phone) {
int verificationCode = new Random().nextInt(9000)+1000;
System.out.println("手机验证码是"+verificationCode);
SMSUtils.sendMessage(SmsConstant.SIGNATURE_NAME,SmsConstant.VERIFYCODE_TEMPLATE_CODE,phone,verificationCode+"");
return verificationCode;
}
}
9.第八步查看API文档
注:根据API文档,完成消息的发送
第一步:创建项目
第二步:导入项目所需依赖包
在项目的pom.xml中,修改SpringBoot版本为【2.1.14.RELEASE】,原【2.5.1.RELEASE】版本过高
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.heima</groupId>
<artifactId>heima_sms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>heima_sms</name>
<description>基于SpringBoot 短信发送</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--阿里云Java SDK核心库-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<!--SpringBoot Web项目起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--封装短信工具类会使用到如下依赖包,如果只是测试短信,使用上面两个依赖包即可-->
<!--阿里 FastJSON,json格式转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
<!--Lombok依赖包,简化POJO书写,提供日志注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
第三步:拷贝"使用示例"代码
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/*
pom.xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>请参见最新版本号</version>
</dependency>
*/
public class SendSms {
public static void main(String[] args) {
/*
* ap-northeast-1代表RegionID
* 表明使用那个服务区域服务器发生短信,建议根据项目所在服务器选择
* 具体情况可以参考下面的【阿里云服务器地域介绍】
*/
DefaultProfile profile = DefaultProfile.getProfile("ap-northeast-1", "<accessKeyId>", "<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
//注意:使用该域名会报com.aliyuncs.exceptions.ServerException: ServiceUnavailable错误
request.setSysDomain("dysmsapi.ap-southeast-1.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("PhoneNumbers", "1503871****");
request.putQueryParameter("SignName", "阿里大于测试专用");
request.putQueryParameter("TemplateCode", "SMS_209335004");
request.putQueryParameter("TemplateParam", "{\"code\":\"1111\"}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
第四步:替换示例代码中关键信息
package com.sms.heima_sms;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/**
* @Auth: zhuan
* @Desc: 阿里云短信发送测试
*/
public class AliyunSendSms {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tMrs89r3VVjNeMrWfFz", "HWL7HRx4fHaDNvIHElWqg8jpy6jkbO");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("PhoneNumbers", "187********");
request.putQueryParameter("SignName", "用户注册模版");
request.putQueryParameter("TemplateCode", "SMS_177539469");
request.putQueryParameter("TemplateParam", "{\"code\":\"6666\"}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
第五步:完成发送短信测试
阿里云服务器地域介绍
中国地域
地域名称 | 所在城市 | Region ID | 可用区数量 |
---|---|---|---|
华北 1 | 青岛 | cn-qingdao | 2 |
华北 2 | 北京 | cn-beijing | 8 |
华北 3 | 张家口 | cn-zhangjiakou | 3 |
华北 5 | 呼和浩特 | cn-huhehaote | 2 |
华北 6 | 乌兰察布 | cn-wulanchabu | 2 |
华东 1 | 杭州 | cn-hangzhou | 8 |
华东 2 | 上海 | cn-shanghai | 7 |
华南 1 | 深圳 | cn-shenzhen | 5 |
华南 2 | 河源 | cn-heyuan | 2 |
西南 1 | 成都 | cn-chengdu | 2 |
中国香港 | 香港 | cn-hongkong | 2 |
其他国家
地域名称 | 所在城市 | Region ID | 可用区数量 |
---|---|---|---|
亚太东南 1 | 新加坡 | ap-southeast-1 | 3 |
亚太东南 2 | 悉尼 | ap-southeast-2 | 2 |
亚太东南 3 | 吉隆坡 | ap-southeast-3 | 2 |
亚太东南 5 | 雅加达 | ap-southeast-5 | 2 |
亚太南 1 | 孟买 | ap-south-1 | 2 |
亚太东北 1 | 东京 | ap-northeast-1 | 2 |
美国西部 1 | 硅谷 | us-west-1 | 2 |
美国东部 1 | 弗吉尼亚 | us-east-1 | 2 |
欧洲中部 1 | 法兰克福 | eu-central-1 | 2 |
英国(伦敦) | 伦敦 | eu-west-1 | 2 |
中东东部 1 | 迪拜 | me-east-1 | 1 |
封装工具类
1.定义短信发送工具类
2.改造测试代码
package com.sms.sms_sms.util;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* @Auth: zhuan
* @Desc: 阿里云短信发送工具类
*/
@Slf4j
public class AliyunSmsUtil {
//短信发送成功状态码
private static final String OK = "OK";
//-------------------------阿里云短信发送相关参数设置,保持不变即可------------------
private static final String REGIONID = "cn-hangzhou";
private static final String DOMAIN = "dysmsapi.aliyuncs.com";
private static final String VERSION = "2017-05-25";
private static final String ACTION = "SendSms";
//
private static final String accessKeyId = "LTAI5tMrs89r3VVjNeMrWfFz";
private static final String secret = "HWL7HRx4fHaDNvIHElWqg8jpy6jkbO";
/**
* 功能描述: 阿里云短信发送接口,支持通知、验证码、激活码类短信
* @param map
* map中所需参数,参数名称固定,如下(注意:参数首字母都是小写的):
* phoneNumbers : 手机号码,支持多个中间以“,”英文逗号分隔 (必填)
* signName :签名(必填)
* templateCode :模板code(必填)
* templateParam :模板参数(不必填,如果是通知类短信,该参数可以不设置)
* @return : java.lang.Boolean
* true-短信发送成功;false-短信发送失败
*/
public static Boolean sendSms(Map<String,String> map){
Boolean flag = false;
DefaultProfile profile = DefaultProfile.getProfile(REGIONID, accessKeyId, secret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
//发送短信域名,不要改变
request.setSysDomain(DOMAIN);
request.setSysVersion(VERSION);
request.setSysAction(ACTION);
request.putQueryParameter("PhoneNumbers", map.get("phoneNumbers"));
request.putQueryParameter("SignName", map.get("signName"));
request.putQueryParameter("TemplateCode", map.get("templateCode"));
//通知类短信,模板不需要参数。判断传递的模板参数是否为空,如果为空可能是通知类短信,则不需要添加模板参数条件
if(map.get("templateParam") != null){
request.putQueryParameter("TemplateParam", map.get("templateParam"));
}
try {
//发送短信
CommonResponse response = client.getCommonResponse(request);
//发送短信结果转为Map类型
Map<String,String> responseMap = JSON.parseObject(response.getData(), Map.class);
//判断短信发送是否成功
if(OK.equals(responseMap.get("Code"))){
flag = true;
}
log.debug("send fail[code={}, message={}]", responseMap.get("Code"), responseMap.get("Message"));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return flag;
}
}```
### 3.测试工具类
```java
package com.heima.heima_sms;
import com.heima.heima_sms.util.AliyunSmsUtil;
import java.util.HashMap;
import java.util.Map;
/**
* @Auth: zhuan
* @Desc: 工具类短信发送测试
*/
public class AliyunSendSmsTest {
public static void main(String[] args) {
//第一步:封装工具类所需参数
Map<String,String> map = new HashMap<>();
map.put("phoneNumbers","187********");
map.put("signName","用户注册模版");
map.put("templateCode","SMS_177539469");
map.put("templateParam","{\"code\":\"6666\"}");
//第二步:调用工具类完成短信发送
Boolean success = AliyunSmsUtil.sendSms(map);
//第三步:验证工具类短信发送是否成功
if(success){
System.out.println("短信发送成功");
}else{
System.out.println("短信发送失败");
}
}
}
/**
* 特别注意:上述代码中
* templateCode--->SMS_177539469
* templateParam--->{\"code\":\"6666\"}中code名称和模板中的参数名称是一致的
* 总结:指定的【模板(SMS_177539469)】中需要的【参数名称(code)】是固定的,有对应关系,不能随便写
*/
封装短信组件
注:封装SpringBoot起步依赖
一、创建阿里云短信服务工程
1)创建springboot工程
在pom.xml中导入短信服务所需依赖包,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
</parent>
<groupId>com.heima</groupId>
<artifactId>heima-sms-aliyun</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>heima-sms-aliyun</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--阿里云Java SDK核心库-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<!--Lombok依赖包,简化POJO书写,提供日志注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
<scope>provided</scope>
</dependency>
<!--阿里 FastJSON,json格式转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2)创建阿里云短信发送配置加载类
package com.sms.sms.aliyun;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @Auth: zhuan
* @Desc: 阿里云短信发送配置加载类
*/
@Data
@ConfigurationProperties(prefix = "aliyun.sms")
public class AliyunSmsProperties {
/**
* Endpoint
*/
private String endpoint = "cn-hangzhou";
/**
* accessKeyId
*/
private String accessKeyId;
/**
* accessKeySecret
*/
private String accessKeySecret;
/**
* 短信签名
*/
private String signName;
}
3)创建阿里云短信发送处理器
package com.sms.sms.aliyun;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* @Auth: zhuan
* @Desc: 阿里云短信发送-处理器
*/
@Slf4j
public class AliyunSmsHandler {
private IAcsClient client;
//短信发送成功状态码
private static final String OK = "OK";
//-------------------------阿里云短信发送相关参数设置,保持不变即可------------------
private static final String DOMAIN = "dysmsapi.aliyuncs.com";
private static final String VERSION = "2017-05-25";
private static final String ACTION = "SendSms";
/**
* 功能描述:
*
* @param properties
* @return : 构造方法,初始化构造短信发送对象-IAcsClient
*/
public AliyunSmsHandler(AliyunSmsProperties properties) {
String endPoint = properties.getEndpoint();
String accessKeyId = properties.getAccessKeyId();
String accessKeySecret = properties.getAccessKeySecret();
DefaultProfile profile = DefaultProfile.getProfile(endPoint, accessKeyId, accessKeySecret);
client = new DefaultAcsClient(profile);
}
/**
* 功能描述: 阿里云短信发送接口,支持通知、验证码、激活码类短信
*
* @param map map中所需参数,参数名称固定,如下(注意:参数首字母都是小写的):
* phoneNumbers : 手机号码,支持多个中间以“,”英文逗号分隔 (必填)
* signName :签名(必填)
* templateCode :模板code(必填)
* templateParam :模板参数(不必填,如果是通知类短信,该参数可以不设置)
* @return : java.lang.Boolean
* true-短信发送成功;false-短信发送失败
*/
public Boolean sendSms(Map<String, String> map) {
Boolean flag = false;
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
//发送短信域名,不要改变
request.setSysDomain(DOMAIN);
request.setSysVersion(VERSION);
request.setSysAction(ACTION);
request.putQueryParameter("PhoneNumbers", map.get("phoneNumbers"));
request.putQueryParameter("SignName", map.get("signName"));
request.putQueryParameter("TemplateCode", map.get("templateCode"));
//通知类短信,模板不需要参数。判断传递的模板参数是否为空,如果为空可能是通知类短信,则不需要添加模板参数条件
if (map.get("templateParam") != null) {
request.putQueryParameter("TemplateParam", map.get("templateParam"));
}
try {
//发送短信
CommonResponse response = client.getCommonResponse(request);
//发送短信结果转为Map类型
Map<String, String> responseMap = JSON.parseObject(response.getData(), Map.class);
//判断短信发送是否成功
if (OK.equals(responseMap.get("Code"))) {
flag = true;
}
log.debug("send fail[code={}, message={}]", responseMap.get("Code"), responseMap.get("Message"));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return flag;
}
}
注意:下述【heima-sms-aliyun-starter】和【heima-sms-aliyun-starter-autoconfigure】两个项目名称取反了,代码不用动,把所有涉及到名称的地方替换一下即可。
二、创建阿里云短信服务起步依赖工程
1)创建springboot工程
在pom.xml中添加依赖包管理
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
</parent>
<groupId>com.heima</groupId>
<artifactId>heima-sms-aliyun-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>heima-sms-aliyun-starter</name>
<description>黑马-阿里云短信服务组件-starter</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--阿里云短信服务工程坐标-->
<dependency>
<groupId>com.heima</groupId>
<artifactId>heima-sms-aliyun</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
2)编写【阿里云短信服务】自动配置类
在com.heima.sms.aliyun包下创建自动配置类AliyunSmsAutoConfiguration
package com.sms.sms.aliyun;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Auth: zhuan
* @Desc: 阿里云短信服务-自动配置类
*/
@Configuration
@ConditionalOnClass({AliyunSmsHandler.class})
@EnableConfigurationProperties({AliyunSmsProperties.class})
public class AliyunSmsAutoConfiguration {
/**
* 功能描述: 初始化构建【AliyunSmsHandler】阿里云短信发送处理器对象
* @param properties
* @return : com.heima.sms.aliyun.AliyunSmsHandler
*/
@Bean
@ConditionalOnMissingBean(AliyunSmsHandler.class)
public AliyunSmsHandler aliyunSendHandler(AliyunSmsProperties properties) {
AliyunSmsHandler aliyunSmsHandler = new AliyunSmsHandler(properties);
return aliyunSmsHandler;
}
}
3)开启【阿里云短信服务】自动配置类
在resources目录下创建META-INF/spring.factories,并填写如下内容
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.heima.sms.aliyun.AliyunSmsAutoConfiguration
三、测试【阿里云短信服务组件】
1)创建heima-sms测试工程
在pom.xml中导入【阿里云短信服务组件】
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.heima</groupId>
<artifactId>heima_sms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>heima_sms</name>
<description>基于SpringBoot-阿里云短信服务-短信发送</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--阿里云短信服务组件-->
<dependency>
<groupId>com.heima</groupId>
<artifactId>heima-sms-aliyun-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--SpringBoot Web项目起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2)配置【阿里短信服务组件】AK/SK
在application.yml中配置如下内容
aliyun:
sms:
#下面替换成自己的ak、sk即可
accessKeyId: LTAI5tMrs89r3VVjNeMrWfFz
accessKeySecret: HWL7HRx4fHaDNvIHElWqg8jpy6jkbO
3)编写控制层代码
package com.sms.sms_sms.controller;
import com.heima.sms.aliyun.AliyunSmsHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("/sms")
public class SmsController {
@Autowired
private AliyunSmsHandler aliyunSmsHandler;
@PostMapping("sendVerifyCode")
public String sendVerifyCode(@RequestBody Map map){
String return_msg = "失败";
Boolean flag = aliyunSmsHandler.sendSms(map);
if(flag){
return_msg = "成功";
}
return "短信发送测试:"+return_msg;
}
}
4)使用Postman工具完成测试
请求地址:http://localhost:8080/sms/sendVerifyCode
请求方式:POST
参数格式:JSON
请求参数:
{
"phoneNumbers":"18753163301",
"signName":"黑马品优购用户注册模版",
"templateCode":"SMS_177539469",
"templateParam":"{\"code\":\"6666\"}"
}