SpringBoot 集成阿里短信服务
项目背景
最近做了一个车辆实时调度系统,要通过短信告知派车人派车信息,项目是使用SpringBoot开发所以借此文章分享一下集成过程。
阿里云短信服务地址: https://dysms.console.aliyun.com/dysms.htm?spm=5176.2020520115.aliyun_sidebar.aliyun_sidebar_dysms.730579d6Df2AFX#/overview
阿里短信官方api(java版) https://help.aliyun.com/document_detail/55284.html?spm=a2c4g.11174283.4.4.ynz4a6
关于如何开通短信服务,如何申请短信模板比较简单这里就不做介绍了。
开发之前先要获取一下信息比如下图的accessKeyId,accessKeySecret,endpoint
添加Maven依赖
<dependency>
<groupId>com.aliyun.mns</groupId>
<artifactId>aliyun-sdk-mns</artifactId>
<version>1.1.8.4</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>liyun-java-sdk-core</artifactId>
<version>2.4.2</version>
</dependency>
yml 配置
短信内容对应的实体类
import lombok.Data;
/**
* 短信消息内容
*
* @author sjx
*/
@Data
public class AlIMsgModelVo {
Stringname;
Stringdetail;
Stringcar;
Stringdriver;
}
不知道 @Data 的请百度 lombok 的使用
新建测试类
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
@Data
public class AlYunMsgTest {
@Value("${alMsg.product}")
private String product;
@Value("${alMsg.domain}")
private String domain; //dyalMsgapi.aliyuncs.com
@Value("${alMsg.accessKeySecret}")
private String accessKeySecret;
@Value("${alMsg.accessKeyId}")
private String accessKeyId;
@Value("${alMsg.endpoint}")
private String endpoint; //短信API产品名称(短信产品名固定,无需修改)
@Test
public void sendMsg() {
System.out.println(endpoint);
AlIMsgModelVo alIMsgModelVo = new AlIMsgModelVo();
alIMsgModelVo.setName("张凯");
alIMsgModelVo.setCar("豫ND5475");
alIMsgModelVo.setDetail("已经派车成功");
alIMsgModelVo.setDriver("李帅");
sendMsgByAliYun("接收者的手机号",alIMsgModelVo,"你的模板id");
}
public void sendMsgByAliYun(String phone, AlIMsgModelVo alIMsg, String template) {
/**
* Step 1. 获取主题引用
*/
CloudAccount account = new CloudAccount(accessKeyId, accessKeySecret, endpoint);
MNSClient client = account.getMNSClient();
CloudTopic topic = client.getTopicRef("sms.topic-cn-beijing");
/**
* Step 2. 设置SMS消息体(必须)
*
* 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
*/
RawTopicMessage msg = new RawTopicMessage();
msg.setMessageBody("sms-message");
/**
* Step 3. 生成SMS消息属性
*/
MessageAttributes messageAttributes = new MessageAttributes();
BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
// 3.1 设置发送短信的签名(SMSSignName)
batchSmsAttributes.setFreeSignName("你的模板签名");
// 3.2 设置发送短信使用的模板(SMSTempateCode)
batchSmsAttributes.setTemplateCode(template);
// 3.3 设置发送短信所使用的模板中参数对应的值(在短信模板中定义的,没有可以不用设置)
BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
smsReceiverParams.setParam("name", alIMsg.getName());
smsReceiverParams.setParam("detail", alIMsg.getDetail());
smsReceiverParams.setParam("car", alIMsg.getCar());
smsReceiverParams.setParam("driver", alIMsg.getDriver());
// 3.4 增加接收短信的号码
batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
try {
/**
* Step 4. 发布SMS消息
*/
TopicMessage ret = topic.publishMessage(msg, messageAttributes);
System.out.println("MessageId: " + ret.getMessageId());
System.out.println("MessageMD5: " + ret.getMessageBodyMD5());
} catch (ServiceException se) {
System.out.println(se.getErrorCode() + se.getRequestId());
System.out.println(se.getMessage());
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
client.close();
}
}
结果