一、概述:
为什么现在的企业越来越多使用阿里云短信服务,究其原因是阿里云短信服务是一种可靠、高效、安全的短信发送服务,它具有以下优点:
-
高可靠性:阿里云短信服务采用全球领先的短信网关进行短信发送,确保了短信的高可靠性和稳定性。
-
高并发性:阿里云短信服务支持高并发的短信发送,可以满足大规模短信发送的需求。
-
安全性:阿里云短信服务采用了多种安全措施,包括加密传输、防攻击等,保障了短信发送的安全性和隐私性。
-
灵活性:阿里云短信服务提供了多种API接口和SDK,可以方便地集成到各种应用中,同时还支持自定义短信内容和模板。
-
成本效益:相比于传统的短信服务商,阿里云短信服务的成本更低,同时还提供了多种计费方式和优惠活动,可以帮助用户降低短信发送成本。
一、阿里云短信服务操作
1、上阿里云购买短信模板
2、创建用户
3、测试发送短信
二、使用SpringBoot搭建SMS服务
1、引入依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.10</version>
</dependency>
2、appplication.yml设置
spring:
cloud:
alicloud:
sms:
accessKeyId: aWjSapoPzD8UV6rzc
accessKeySecret: cA7F5hinHKCeXvADJx35O
signName: 我的短信
templateCode: SMS_11111
endpoint: dysmsapi.aliyuncs.com
3、创建SmsConfig,指定资源
@Configuration
public class SmsConfig {
@Bean
@ConfigurationProperties(prefix = "spring.cloud.alicloud.sms")
public SmsServiceImpl smsService() {
return new SmsServiceImpl();
}
}
4、短信发送具体实现
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.koo.modules.third.service.SmsService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
@Data
@Slf4j
public class SmsServiceImpl implements SmsService {
private String accessKeyId;
private String accessKeySecret;
private String signName;
private String templateCode;
private String endpoint;
@Override
public Boolean sendCode(String phone, String code) {
Client client = this.createClient(accessKeyId, accessKeySecret);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setSignName(signName)
.setTemplateCode(templateCode)
.setPhoneNumbers(phone)
// .setTemplateParam(code);
.setTemplateParam("{\"code\":\"" + code + "\"}");
RuntimeOptions runtime = new RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
System.out.println("短信内容================" + sendSmsResponse.getBody().getMessage());
System.out.println("短信内容================" + sendSmsResponse.getBody().getCode());
} catch (Exception error) {
// 如有需要,请打印 error
log.error("错误信息===" + error.getMessage());
}
return true;
}
public Client createClient(String accessKeyId, String accessKeySecret) {
try {
Config config = new Config()
// 必填,您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 必填,您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = endpoint;
return new Client(config);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
5、控制层接口
@Autowired
SmsServiceImpl smsService;
/**
* 发送短信验证码
* 提供其他模块调用
* @param phone 号码
* @param code 验证码
*/
@GetMapping("/sendcode")
public R sendCode(@RequestParam("phone") String phone, @RequestParam("code") String code) {
smsService.sendCode(phone, code);
return R.ok();
}