前言
Java整合短信服务(阿里云)
0 前置准备
准备 1
直接登录阿里云
支付宝扫码登录后
搜索短信服务 并进行开通
点击国内消息
在签名管理和模板管理
配置签名和模板
准备 2
点击右上角的accesskey管理
创建一个
记录ID 和 SECRET 等会儿要用
1 导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
2 配置文件(存accessKey参数)
这里是properties类型
配置文件定义三个参数
// 地区 default 就可以
aliyun.sms.regionId=default
//accesskey的 ID 和 SECRET
aliyun.sms.accessKeyId=LTAI5tL6xxx
aliyun.sms.secret=KrxgDVnOPKxxxx
yaml
aliyun:
sms:
regionId: default
accessKeyId: LTAI5tLxxxx
secret: KrxgDVnOPKuvxxxxx
3 定义一个工具类(就是从配置文件拿accessKey参数)
@Component
public class ConstantPropertiesUtils implements InitializingBean {
@Value("${aliyun.sms.regionId}")
private String regionId;
@Value("${aliyun.sms.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.sms.secret}")
private String secret;
public static String REGION_Id;
public static String ACCESS_KEY_ID;
public static String SECRECT;
@Override
public void afterPropertiesSet() throws Exception {
REGION_Id=regionId;
ACCESS_KEY_ID=accessKeyId;
SECRECT=secret;
}
}
4 代码编写
注意
这两个参数是在阿里云短信控制台
获得的
//发送手机验证码
@GetMapping("send/{phone}")
public boolean sendCode(@PathVariable String phone) {
System.out.println("手机号码是"+phone);
//如果从redis获取不到,
// 生成验证码,
String code = "12345";
// //调用service方法,通过整合短信服务进行发送
// boolean isSend = msmService.send(phone,code);
//判断手机号是否为空
if(StringUtils.isEmpty(phone)) {
System.out.println("手机号空");
}
//整合阿里云短信服务
//设置相关参数
// 1 通过 profile(阿里云用户的信息) 创建 client
DefaultProfile profile = DefaultProfile.
getProfile(
//地域 一般default默认
ConstantPropertiesUtils.REGION_Id,
// 阿里云用户Key
ConstantPropertiesUtils.ACCESS_KEY_ID,
//阿里云用户secret
ConstantPropertiesUtils.SECRECT);
IAcsClient client = new DefaultAcsClient(profile);
//2 创建request封装参数
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("PhoneNumbers", phone);
//签名名称
request.putQueryParameter("SignName", "极冥笔记");
//模板code
request.putQueryParameter("TemplateCode", "SMS_268510266");
//验证码 使用json格式 {"code":"123456"}
Map<String,Object> param = new HashMap();
param.put("code",code);
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param));
//调用方法进行短信发送
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}