阿里云短信开箱即用
2020-02-10 16:07:03来源:博客园 阅读 ()
阿里云短信开箱即用
简介
使用
SpringBoot
自动装配简化对接阿里云短信过程。
小工具一枚,欢迎使用和Star支持,如使用过程中碰到问题,可以提出Issue,我会尽力完善该Starter。
版本基础
aliyun-java-sdk-core:4.1.0
如何使用
Maven
<dependency>
<groupId>io.github.gcdd1993</groupId>
<artifactId>ali-sms-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
Gradle
compile 'io.github.gcdd1993:ali-sms-spring-boot-starter:1.0.0.RELEASE'
??注意:需要引入Jcenter
仓库
参数配置
以application.yml
举例
ali:
sms:
domain: "dysmsapi.aliyuncs.com" ## 默认dysmsapi.aliyuncs.com
version: "2017-05-25" ## 默认2017-05-25
action: "SendSms" ## 默认SendSms
access-key:
id: "${阿里云短信AccessKeyId}"
secret: "${阿里云短信AccessKeySecret}"
region-id: "${阿里云短信地域}"
sign-name: "${阿里云短信签名}" ## 如果不填,必须在发送方法中指定
基本使用
同步发送短信
为了方便使用,接口上进行了方法的重载,提供5种不同的参数列表供选择,你可以自行选择使用
/**
* 同步发送短信
* <p>
* 参数1:使用的短信模板ID
* 参数2:接收者的手机号,如"17602526129,17602923211"
* 参数3:Map,key对应模板中的参数名,value对应值(这里是使用Jackson来序列化)
* </p>
*/
@Test
public void sendSync() {
SmsResponse smsResponse = sendService.sendSync(TEMPLATE_ID, PHONE_NUMBER, MAP);
Assert.assertTrue(smsResponse.isSuccess());
}
/**
* 同步发送短信
* <p>
* 参数1:使用的短信模板ID
* 参数2:接收者的手机号,如"17602526129,17602923211"
* 参数3:要发送的短信写入值,你可以自己进行json的拼装。注意要进行json的转义,例如:"{\"code\":\"112233\"}"
* </p>
*/
@Test
public void sendSync1() {
SmsResponse smsResponse = sendService.sendSync(TEMPLATE_ID, PHONE_NUMBER, "{\"code\":\"112233\"}");
Assert.assertTrue(smsResponse.isSuccess());
}
/**
* 同步发送短信
* <p>
* 参数1:短信签名,适用于同一模板需要有不同短信签名的
* 参数2:使用的短信模板ID
* 参数3:接收者的手机号,如"17602526129,17602923211"
* 参数4:Map,key对应模板中的参数名,value对应值(这里是使用Jackson来序列化)
* </p>
*/
@Test
public void sendSync2() {
SmsResponse smsResponse = sendService.sendSync(SIGN_NAME, TEMPLATE_ID, PHONE_NUMBER, MAP);
Assert.assertTrue(smsResponse.isSuccess());
}
/**
* 同步发送短信
* <p>
* 参数1:短信签名,适用于同一模板需要有不同短信签名的
* 参数2:使用的短信模板ID
* 参数3:接收者的手机号,如"17602526129,17602923211"
* 参数4:要发送的短信写入值,你可以自己进行json的拼装。注意要进行json的转义,例如:"{\"code\":\"112233\"}"
* </p>
*/
@Test
public void sendSync3() {
SmsResponse smsResponse = sendService.sendSync(SIGN_NAME, TEMPLATE_ID, PHONE_NUMBER, "{\"code\":\"112233\"}");
Assert.assertTrue(smsResponse.isSuccess());
}
最后一个提供了一个参数对象来定义短信发送请求,如果不嫌麻烦,可以使用这个。
/**
* 阿里云短信请求体
*
* @author gaochen
* @date 2019/6/6
*/
@Data
public class SmsRequest {
/**
* 接收短信的手机号码。以英文逗号(,)分隔。
*/
private String phoneNumbers;
/**
* 短信签名名称。请在控制台签名管理页面签名名称一列查看。
*/
private String signName;
/**
* 短信模板ID,前缀为SMS_
*/
private Integer templateId;
/**
* 阿里云短信内容,key:短信模板中的字段名,value:短信模板字段对应值
* 使用此字段需要{@link com.fasterxml.jackson.databind.ObjectMapper}
*/
private Map<String, String> params;
/**
* json str of {@link #getParams()}
* 使用此字段请设置params为Null
*/
private String paramStr;
}
使用:
@Test
public void sendSync4() {
SmsRequest smsRequest = new SmsRequest();
smsRequest.setPhoneNumbers(PHONE_NUMBER);
smsRequest.setTemplateId(TEMPLATE_ID);
smsRequest.setParams(MAP);
SmsResponse smsResponse = sendService.sendSync(smsRequest);
Assert.assertTrue(smsResponse.isSuccess());
}
异步发送短信
考虑到发短信的需求,一般来说都需要异步加持,对以上5种方法分别提供了异步接口
sendAsync
,使用方法基本一致,唯一不同的是,你可以异步处理短信发送返回值。
CompletableFuture<SmsResponse> smsResponse = sendService.sendAsync(TEMPLATE_ID, PHONE_NUMBER, MAP);
smsResponse.thenAcceptAsync(sr -> {
if (sr.isSuccess()) {
System.out.println("发短信成功");
} else {
System.out.println("发送到消息队列,准备重试此次短信");
}
});
高级使用
除了使用以上方法发送短信外,你还可以使用官方的IAcsClient
来发送短信,如
package io.github.gcdd1993.demo;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.request;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.gcdd1993.alisms.domain.SmsRequest;
import io.github.gcdd1993.alisms.domain.SmsResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* TODO
*
* @author gaochen
* @date 2019/6/8
*/
@Service
public class SendService {
@Autowired
private IAcsClient acsClient;
public SmsResponse sendSync() {
try {
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", "region");
request.putQueryParameter("PhoneNumbers", "1771636783");
request.putQueryParameter("SignName", "SignName");
request.putQueryParameter("TemplateCode", "SMS_12345678");
request.putQueryParameter("TemplateParam", "{\"code\":\"112233\"}");
CommonResponse commonResponse = acsClient.getCommonResponse(request);
return SmsResponse.SmsResponseBuilder.build(commonResponse);
} catch (ClientException e) {
log.error("send msg error.", e);
return SmsResponse.SmsResponseBuilder.buildFail(e.getMessage());
} catch (JsonProcessingException e) {
log.error("write json failed.", e);
return SmsResponse.SmsResponseBuilder.buildFail("短信参数在json序列化时出错");
}
}
}
Licenses
The Apache License, Version 2.0
Issues
Issues Welcome
支持
- Click Github to star, Thanks!
更多参考
阿里云短信服务API参考
原文链接:https://www.cnblogs.com/gcdd/p/12292388.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:SpringBoot简要介绍
下一篇:发布开源项目到Jcenter
- 阿里巴巴26个屌炸天的开源项目,你知道几个? 2020-06-09
- 为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中? 2020-06-09
- 来看看阿里架构师Java 代码打日志姿势!你也是这样写的吗 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- 去阿里面试,面试官:简历上说你精通Java,面试你就这? 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash