实现短信发送业务
准备工作
阿里云短信服务:AccessKey相关信息:短信模板/短信签名/AccessKeyId/AccessKeySecret
1、申请短信模板,获取code
2、申请短信签名
注:一般是签名先于模板申请,审批成功概率大
3、申请ak信息
阿里云地址:获取AccessKey - 新手上云指南 - 阿里云
配置文件(application.properties)
#SMS
aliyun.sms.accessKeyId=申请的accessKeyId
aliyun.sms.accessKeySecret=申请的accessKeySecret
aliyun.sms.endpoint=dysmsapi.aliyuncs.com//默认值,无需修改
aliyun.sms.verifySMS=短信模板code
aliyun.sms.noticeSMS=短信模板code
封装实体类
@Component
@PropertySource("classpath:application.properties") //默认路径下可不加
@Data
@Configuration
public class AliyunConfig {
// sms
@Value("${aliyun.sms.endpoint}")
private String endpointSMS;
@Value("${aliyun.sms.accessKeyId}")
private String accessKeyIdSMS;
@Value("${aliyun.sms.accessKeySecret}")
private String accessKeySecretSMS;
@Value("${aliyun.sms.verifySMS}")
private String verifySMS;
@Value("${aliyun.sms.noticeSMS}")
private String noticeSMS;
public AliyunConfig() {
}
public String getAccessKeyIdSMS() {
return accessKeyIdSMS;
}
public void setAccessKeyIdSMS(String accessKeyIdSMS) {
this.accessKeyIdSMS = accessKeyIdSMS;
}
public String getAccessKeySecretSMS() {
return accessKeySecretSMS;
}
public void setAccessKeySecretSMS(String accessKeySecretSMS) {
this.accessKeySecretSMS = accessKeySecretSMS;
}
public String getEndpointSMS() {
return endpointSMS;
}
public void setEndpointSMS(String endpointSMS) {
this.endpointSMS = endpointSMS;
}
public String getVerifySMS() {
return verifySMS;
}
public void setVerifySMS(String verifySMS) {
this.verifySMS = verifySMS;
}
public String getNoticeSMS() {
return noticeSMS;
}
public void setNoticeSMS(String noticeSMS) {
this.noticeSMS = noticeSMS;
}
}
封装实体类
public class sendSMSUtil {
//生成六位数随机验证码
public String getRandom(){
String randNum = new Random().nextInt(1000000)+"";
System.out.println("生成"+randNum);
if(randNum.length()!=6){ //如果生成的不是6位数随机数则返回该方法继续生成
return getRandom();
}else{
return randNum;
}
}
//创建客户端,将ak相关信息传入值config中
public static Client createClient(AliyunConfig aliyunConfig) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(aliyunConfig.getAccessKeyIdSMS())
// 您的AccessKey Secret
.setAccessKeySecret(aliyunConfig.getAccessKeySecretSMS());
// 访问的域名
config.endpoint = aliyunConfig.getEndpointSMS();
return new Client(config);
}
//验证码发送方法
public Result verifySMS(String uphone, AliyunConfig aliyunConfig) throws Exception {
Result result = new Result();
JSONObject json = new JSONObject();
//设置处理时间为1秒,单位为毫秒
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//创建发送客户端
Client client = createClient(aliyunConfig);
//生成六位随机验证码
String code = getRandom();
SendSmsRequest sendSmsRequest = new SendSmsRequest()
//设置手机号
.setPhoneNumbers(uphone)
//设置签名
.setSignName("你的签名")
//获取申请的验证码模板id
.setTemplateCode(aliyunConfig.getVerifySMS())
//传入验证码模板的code值
.setTemplateParam("{\"code\": \""+code+"\"}");
//获得发送的返回
SendSmsResponse response = client.sendSms(sendSmsRequest);
//输出查看返回状态
System.out.println(response.getBody().getCode());
//判断发送情况是否成功
if(response.getBody().getCode().equals("OK")){
json.put("verifyCode",code);
return Result.succ("发送成功",json);
}else if(response.getBody().getCode().equals("isv.BUSINESS_LIMIT_CONTROL")){
//短信发送出现频繁请求
return Result.fail("请勿频繁请求");
}else{
//其他情况,通过自定义异常抛出
throw new resultException(ResultEnum.MISTAKE_BY_SENDSMS);
}
}
调试时出现isp.RAM_PERMISSION_DENY报错
该错误意味着RAM权限不足,前往阿里云开启相关权限
前往并开启以下两个权限即可进行短信发送操作
阿里云短信api返回码
返回码地址:API错误码 - 短信服务 - 阿里云
依赖支持:
<!-- 阿里云短信依赖支持 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<!-- 阿里云依赖支持 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<!-- openapi依赖支持 版本20170525 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.0.19</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>darabonba-env</artifactId>
<version>0.1.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.11</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>darabonba-time</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>darabonba-string</artifactId>
<version>0.0.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea</artifactId>
<version>[1.0.3, 2.0.0)</version>
</dependency>
注:依赖版本要确保正确,依赖版本不对等可能出现如下错误