因为这里是使用阿里云所以需要先在阿里云申请短信签名与模板,这两🙅步就不一一演示了直接开撸
首先导入依赖:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.1.0</version>
</dependency>
<!-- 阿里fastjson包JSON转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
yml中配置所需要的参数:
aliyun:
accessKeyID: #你的accessKeyID
accessKeySecret: #你的accessKeySecret
domain: dysmsapi.aliyuncs.com # 固定不变
regionId: cn-hangzhou #固定不变
templateCode: #你的模板code
signName: #你的签名
上代码:
@Value(value = "${aliyun.accessKeyID}")
private static String accessKeyID;
@Value(value = "${aliyun.accessKeySecret}")
private static String accessKeySecret;
@Value(value = "${aliyun.domain}")
private static String domain;
@Value(value = "${aliyun.regionId}")
private static String regionId;
@Value(value = "${aliyun.templateCode}")
private static String templateCode;
@Value(value = "${aliyun.signName}")
private static String signName;
public static boolean sendSms(String phoneNum, String message) {
// 指定地域名称 短信API的就是 cn-hangzhou 不能改变 后边填写您的 accessKey 和 accessKey Secret
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyID, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
// 创建通用的请求对象
CommonRequest request = new CommonRequest();
// 指定请求方式
request.setSysMethod(MethodType.POST);
// 短信api的请求地址 固定
request.setSysDomain(domain);
//签名算法版本 固定
request.setSysVersion("2017-05-25");
//请求 API 的名称
request.setSysAction("SendSms");
//指定地域名称
request.putQueryParameter("RegionId", regionId);
// 要给哪个手机号发送短信 指定手机号
request.putQueryParameter("PhoneNumbers", phoneNum);
// 您的申请签名
request.putQueryParameter("SignName", signName);
// 您申请的模板 code
request.putQueryParameter("TemplateCode", templateCode);
Map<String, Object> params = new HashMap<>();
//这里的key就是短信模板中的 ${xxxx}
params.put("code", message);
// 放入参数 需要把 map转换为json格式 使用fastJson进行转换
request.putQueryParameter("TemplateParam", JSON.toJSONString(params));
try {
CommonResponse response = client.getCommonResponse(request);
//logger.info(JSON.parseObject(response.getData(), Map.class).get("Message").toString());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
到这代码就结束了接着调用就好:
@GetMapper("/smsMsg")
public boolean smsMsg() {
log.info("正在给【"+phone+"】发送短信...");
boolean b = sendSms(199xxxx2138, "一条很贵的短信!");
log.info("发送结果:"+b);
return b;
}