- 阿里云开通短信服务
主要是申请签名以及短信模板
2.项目添加依赖
<!-- 阿里云短信依赖 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.7</version>
</dependency>
3.配置文件设置,将相关信息写入配置文件
aliyun:
sms:
sms-access-key-id: xxx
sms-access-key-secret: xxx
sms-endpoint: dysmsapi.aliyuncs.com
sms-template-code: xxx
sms-sign-name: xxx
4.AliyunSmsService短信发送服务
import cn.hutool.json.JSONUtil;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* 阿里云短信配置
*/
@Slf4j
@Service
public class AliyunSmsService {
@Value("${aliyun.sms.sms-access-key-id}")
private String smsAccessKeyId;
@Value("${aliyun.sms.sms-access-key-secret}")
private String smsAccessKeySecret;
@Value("${aliyun.sms.sms-endpoint}")
private String smsEndpoint;
@Value("${aliyun.sms.sms-sign-name}")
private String smsSignName;
@Value("${aliyun.sms.sms-template-code}")
private String smsTemplateCode;
/**
* 使用 AK&ASK 初始化账号 Client
*
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception 短信推送异常
*/
public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint)
throws Exception {
Config config =
new Config()
// 必填,您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 必填,您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = endpoint;
return new com.aliyun.dysmsapi20170525.Client(config);
}
/**
* 发送短信验证码
*
* @param phone 电话号码
* @throws Exception 短信推送异常
*/
public boolean sendCode(String phone, String code) throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS
Client client = createClient(this.smsAccessKeyId, this.smsAccessKeySecret, this.smsEndpoint);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setSignName(this.smsSignName)
.setTemplateCode(this.smsTemplateCode)
.setPhoneNumbers(phone)
.setTemplateParam("{\"code\":\"" + code + "\"}");
try {
log.info("发送短信入参: " + JSONUtil.toJsonStr(sendSmsRequest));
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
log.info("发送短信结果: " + JSONUtil.toJsonStr(sendSmsResponse));
if (Objects.nonNull(sendSmsResponse) && sendSmsResponse.getBody().code.equals("OK")) {
return Boolean.TRUE;
}
} catch (TeaException error) {
// 如有需要,请打印 error
log.error("短信推送异常结果: " + error.message);
return Boolean.FALSE;
} catch (Exception e) {
TeaException error = new TeaException(e.getMessage(), e);
// 如有需要,请打印 error
com.aliyun.teautil.Common.assertAsString(error.message);
log.error("短信推送异常结果: " + error.message);
return Boolean.FALSE;
}
return Boolean.FALSE;
}
}
5.SmsController发送短信接口
import cn.hutool.core.util.RandomUtil;
import com.example.jeecg.message.service.AliyunSmsService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/sms")
@RequiredArgsConstructor
public class SmsController {
@Resource
private AliyunSmsService smsService;
/**
* 短信推送接口
*/
@GetMapping("/send")
public Boolean send(@RequestParam String phone) throws Exception {
//随机6位数字
return smsService.sendCode(phone, RandomUtil.randomNumbers(6));
}
}