1、创建短信微服务
1.1、创建新Maven项目
1.2、创建controller和service代码
1.3、配置application.yml
server:
port: 8004 # 服务端口
spring:
application:
name: service-msm # 服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos地址
profiles:
active: dev # 运行环境:dev、test、prod
jackson: # 定义返回json的全局时间格式
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # sql执行日志
mapper-locations: classpath:com/zmq/college/msm/mapper/xml/*.xml # 配置mapper xml文件的路径
1.4、配置服务启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //取消数据源自动配置(不需要连接数据库)
@ComponentScan("com.zmq.college")
public class ServiceMsmApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceMsmApplication.class, args);
}
}
1.5、pom.xml引入阿里云依赖
<!--fastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!--aliyun-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.1</version>
</dependency>
2、开通阿里云短信服务(2021年后,阿里云短信服务不支持个人开通了!!!)
2.1、登录阿里云服务,搜索“短信服务”进入,点击国内消息
2.1.1、点击 添加模板,进入到添加页面,输入模板信息
2.1.2、点击提交,等待审核
2.2、添加签名管理
点击添加签名,进入添加页面,填入相关信息。注意:签名要写的有实际意义。点击提交,等待审核,审核通过后可以使用
3、编写发送短信接口
3.1、编写controller,根据手机号发送短信
import com.zmq.college.common.result.R;
import com.zmq.college.common.util.RandomUtil;
import com.zmq.college.msm.service.MsmService;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/msm")
@CrossOrigin //解决跨域
public class MsmController {
@Resource
private MsmService msmService;
@Resource
StringRedisTemplate stringRedisTemplate;
@GetMapping(value = "/send/{phone}")
public R code(@PathVariable String phone) {
//1、先从redis获取验证码,如果获取到直接返回
String code = stringRedisTemplate.opsForValue().get(phone);
if (!StringUtils.isEmpty(code)) {
return R.ok();
}
//2、如果redis中没有,则生成新的随机值(验证码)
code = RandomUtil.getFourBitRandom();
//2.1、封装生成的验证码
Map<String, Object> param = new HashMap<>();
param.put("code", code);
//3、调用发送短信服务,发送短信
boolean isSend = msmService.send(phone, param);
//发送成功
if (isSend) {
//3.1、把生成的验证码放入redis,同时设置验证码的有效时间(5分钟)
stringRedisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
return R.ok().message("发送短信成功");
} else {
return R.error().message("发送短信失败");
}
}
}
3.2、编写service
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.zmq.college.msm.service.MsmService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Map;
@Service
public class MsmServiceImpl implements MsmService {
//发送短信
@Override
public boolean send(String phone, Map<String, Object> param) {
//判断手机号是否为空
if (StringUtils.isEmpty(phone)) return false;
//配置发送
DefaultProfile profile =
DefaultProfile.getProfile(
"default", //地域节点(北京、上海...),默认“default”
"LTAIq6nIPY09VROj", // id(阿里云短信id)
"FQ7UcixT9wEqMv9F35nORPqKr8XkTF" //秘钥(阿里云短信秘钥)
);
IAcsClient client = new DefaultAcsClient(profile);
//设置相关参数(固定写法)
CommonRequest request = new CommonRequest();
//request.setProtocol(ProtocolType.HTTPS);
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
//设置发送相关参数
request.putQueryParameter("PhoneNumbers", phone); //需要发送的手机号
request.putQueryParameter("SignName", "我的谷粒在线教育网站"); //阿里云短信签名管理下的签名名称
request.putQueryParameter("TemplateCode", "sms_180051135"); //阿里云短信模板管理下的模板code
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param)); //验证码(转换成json格式)
try {
//发送短信
CommonResponse response = client.getCommonResponse(request);
boolean result = response.getHttpResponse().isSuccess();
return result;
} catch (ClientException e) {
e.printStackTrace();
return false;
}
}
}