阿里云短信服务
# 阿里云开通短信服务
1、进入控制台,搜索短信服务,进入
2、开通短信服务,进入到短信服务的控制台中
3、进入国内消息界面
4、我们需要申请签名和模板
5、模板申请
6、签名管理,这个不太好通过
7、收费标准
验证码每条0.045
# 代码实现
1、依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.3.3</version>
</dependency>
2、编写Controller,根据需求发送短信
@RestController
@RequestMapping("/api/msm")
@CrossOrigin //跨域
public class MsmApiController {
@Autowired
private MsmService msmService;
@GetMapping(value = "/send/{phone}")
public R code(@PathVariable String phone) {
//这个code是生成的随机值,这个方法这里没有,自己写一个生成随机数的方法吧
String code = RandomUtil.getFourBitRandom();
Map<String,Object> param = new HashMap<>();
param.put("code", code);
//阿里云发短信需要:手机号,验证码
boolean isSend = msmService.send(phone, param);
if(isSend) {
return R.ok();
} else {
return R.error().message("发送短信失败");
}
}
}
@Service
public class MsmServiceImpl implements MsmService {
/**
* 发送短信
*/
public boolean send(String PhoneNumbers, Map<String,Object> param) {
//判断手机号是否为null
if(StringUtils.isEmpty(PhoneNumbers)) return false;
//这个ID和密钥我们之前申请OSS的时候用过
DefaultProfile profile =
DefaultProfile.getProfile("default", "阿里云的ID", "阿里云的密钥");
IAcsClient client = new DefaultAcsClient(profile);
/*
设置相关参数,这些不需要改变
*/
CommonRequest request = new CommonRequest();
//request.setProtocol(ProtocolType.HTTPS);
//提交方式,我们是post
request.setMethod(MethodType.POST);
//发送时我们请求阿里云中哪个地方的方法,这个不能改
request.setDomain("dysmsapi.aliyuncs.com");
//版本号
request.setVersion("2017-05-25");
//请求阿里云中的哪个方法,这个不能改
request.setAction("SendSms");
/*
设置值
*/
//名称PhoneNumbers是固定的,值是你要发送的手机号
request.putQueryParameter("PhoneNumbers", PhoneNumbers);
//SignName不能改,值是在阿里云中申请的签名名称,比如:我的谷粒在线教育网站
request.putQueryParameter("SignName", "我的谷粒在线教育网站");
//TemplateCode不能改,发送短信模板的模板CODE,也就是在阿里云模板管理中的模板CODE
request.putQueryParameter("TemplateCode", templateCode);
//TemplateParam不能改,值为验证码,值需要一个JSON的格式,我们可以使用fastjson将Map直接转为JSON格式,当然可以使用其他的,比如GSON,jackson等等
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param));
try {
//最终发送
CommonResponse response = client.getCommonResponse(request);
//发送成功/失败
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
上次更新: 2024/11/02, 21:46:46