开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):整合阿里云短信进行短信发送(1)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11444
整合阿里云短信进行短信发送(1)
内容介绍
一.在 service_msm 的 pom 中引入依赖
二.编写 controller,根据手机号发送短信
三.编写 service
阿里云发短信需要收费,收费标准是每条验证码0.045元,所以在测试的时候要提前充钱。
下面在项目中写代码,将阿里云的短信用代码的形式进行发送。
一.在 service_msm 的 pom 中引入依赖
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
</dependencies>
这个依赖中有两个依赖
一个是 fastjson,是 json 的转换工具
一个是 Java-sdk-core,是核心依赖
如果之前没有,需要联网下载。如果失败,直接在仓库中复制过去就可以了。
二.编写 controller,根据手机号发送短信
在 msmcontroller 中编写代码
@Autowired
private MsmService msmService;
//发送短信的方法
@GetMapping("send/{phone}“)
public R sendMsm(@PathVariable String phone){
//生成随机值,传递给阿里云进行发送
String code=RandomUtil.getFourBitRandom();
Map<String,Object>param=new HashMap<>()
param.put(“code“,code)
;//传 map 是为了后面方便,直接传 code 也是一样的
//调用 service 发送短信的方法
Boolean isSend=msmService.send(param,phone);
//根据这条把验证码发送到手机号中
if(isSend) {
}else{
return R. error().message(”短信发送失败”)
}
要注意的是:
接收到的验证码要么是四位,要么是六位,要么是八位。随机生成的四位六位或者是八位的这个值并不是由阿里云生成的,而是由我们的程序生成的。我们的程序把随机生成的这个值传给阿里云,由它来发送。阿里云只是起到一个传递的作用。
在源码中写了一个工具类 RandomUtil.java,把它复制到新建的包utils中。
工具类中写了一个方法:
public static String getFourBitRandomo {
return fourdf. format( random nextInt( bound: 10000));
public static String getSixBitRandomo {
return sixdf. format( random nextInt( bound: 1000000));
直接运用工具类生成随机值即可。
生成的随机值传给阿里云的短信服务
主要做的就是通过工具类生成四位的验证码,得到手机号,把验证码手机号传到阿里云中。
三.编写 service
进入 msmService.java,service 的 interface。再进入 msmServiceImpl.java,在实现类中写下最终的发送短信的方法,这个方法中涉及到的参数是固定的。
@Service
public class MsmServiceImpl implements MsmService {
//发送短信的方法
@Override
public boolean send(Map<String, Object> param, String phone) {
return false;
之前写过类似的代码:
DefaultProfile profile =
DefaultProfile.getProfile("default",“LTAIq6nIPY09VROj","FQ7UcixT9wEqMv9F35nORPqKr8XkTF");IAcsClientclient=newDefaultAcsClient(profile);
………
DefaultProfile profile 是默认的配置文件中的内容;
“LTAIq6nIPY09VROj","FQ7UcixT9wEqMv9F35nORPqKr8XkTF"是之前的 id 和秘钥;
default 是地域节点,默认是这样的,或者改成 cn 上海北京都可以;
对 IAcsClient client 这个对象进行new的操作;
下面的一些代码就是传参数,最终进行发送。
将以上固定的代码复制到 service 中:
@Service
public class MsmServiceImpl implements MsmService {
//发送短信的方法
@Override
public boolean send(Map<String, Object> param, String phone) {
if(StringUtlls.isEmpty(Phone)) return false;
//首先判断手机号是否为空,如果为空就没必要发送,直接return false,如果不等于空,再进行以下步骤。
DefaultProfile profile =
DefaultProfile.getProfile(regionId:"default"accesskeyId:" LTAI4FvvVEWiTJ3GNJJqJnk7"secret:"9st82dv7EvFk9mTjY01XXbM632fRbG");
IAcsCllent client=new DefaultAcsClient(profile);
//设置相关固定的参数
CommonRequest request =new CommonRequest();
//request.setProtocol(ProtocolType.HTTPS); request.setMethod(MethodType.POST);
//提交方式
request.setDomain("dysmsapi.aliyuncs.com");
//发送中要请求阿里云的位置
request.setVersion("2017-05-25");
//版本号
request.setAction("SendSms");
//请求里面的方法
//设置发送相关的参数
request.putQueryParameter(name:”PhoneNumbers”,phone);
//手机号
request.putQueryParameter(name:”SignName”,value:
“我的谷粒在线教育网站”);//申请阿里云 签名名称
request.putQueryParameter(name:”Templatecode”,value:“SMS_180051135”);
//申请阿里云 模板 code
request.putQueryParameter(name:”TemplateParam”,JSONObject.toJSONString(param))
//验证码数据,转换 json 数据传递
try {
//最终发送
CommonResponse response=client.get CommonResponse (request);
boolean success = response.getHttpResponse().isSuccess();
return success;
}catch(Exception e) {
}
return false;
注:
参数也是固定的,不能更改,直接复制即可。
刚才传 map 的好处是可以把 map 直接变成 json 格式。用 fastJson 中的转换工具可以做到。