短信模板管理
管理接口
- 申请短信模板:AddSmsTemplate
- 删除短信模板:DeleteSmsTemplate
- 修改未通过审核的短信模板:ModifySmsTemplate
- 查询短信模板的审核状态:QuerySmsTemplate
sdk引用
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
工程变量配置
yml:
aliyun:
sms:
access-key-id: 111111111111111111
access-key-secret: 2222222222222222222222222
sign-name: 云中科技
源码引用变量:
@Value("${aliyun.sms.access-key-id}")
private String accessKeyId;
@Value("${aliyun.sms.access-key-secret}")
private String accessKeySecret;
@Value("${aliyun.sms.sign-name}")
private String signName;
private String sysVersion = "2017-05-25";
private String sysDomain = "dysmsapi.aliyuncs.com";
申请短信模板
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain(sysDomain);
request.setSysVersion(sysVersion);
request.setSysAction("AddSmsTemplate");
request.putQueryParameter("TemplateType", String.valueOf(defaultTemplateType));
request.putQueryParameter("TemplateName", template.getTemplateName());
request.putQueryParameter("TemplateContent", template.getTemplateContent());
request.putQueryParameter("Remark", template.getRemark());
CommonResponse response;
try {
response = client.getCommonResponse(request);
} catch (Exception e) {
logger.error(e.getLocalizedMessage(), e);
throw new ApiException(e.getLocalizedMessage());
}
logger.info(response.getData());
CmsSmsResponse responseData = JSONUtil.toBean(response.getData(), CmsSmsResponse.class);
if ("OK".equals(responseData.getCode())) {
} else {
logger.error(response.getData());
}
返回结果:
@Getter
@Setter
public class CmsSmsResponse {
private String Code;
private String Message;
private String RequestId;
private String TemplateCode;
}
查询模板信息
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain(sysDomain);
request.setSysVersion(sysVersion);
request.setSysAction("QuerySmsTemplate");
request.putQueryParameter("TemplateCode", template.getTemplateCode());
CommonResponse response;
try {
response = client.getCommonResponse(request);
} catch (ClientException e) {
logger.error(e.getLocalizedMessage(), e);
throw new ApiException(e.getLocalizedMessage());
}
logger.info(response.getData());
CmsSmsQueryResponse responseData = JSONUtil.toBean(response.getData(), CmsSmsQueryResponse.class);
if ("OK".equals(responseData.getCode())) {
} else {
logger.error(response.getData());
}
返回结果:
@Getter
@Setter
public class CmsSmsResponse {
private String Code;
private String Message;
private String RequestId;
private String TemplateCode;
}
@Getter
@Setter
public class CmsSmsQueryResponse extends CmsSmsResponse {
private String TemplateContent;
private Integer TemplateStatus;
private Integer TemplateType;
private String TemplateName;
private String CreateDate;
private String Reason;
}
更新审核未通过的模板
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain(sysDomain);
request.setSysVersion(sysVersion);
request.setSysAction("ModifySmsTemplate");
request.putQueryParameter("TemplateType", "2");
request.putQueryParameter("TemplateName", template.getTemplateName());
request.putQueryParameter("TemplateCode", template.getTemplateCode());
request.putQueryParameter("TemplateContent", template.getTemplateContent());
request.putQueryParameter("Remark", template.getRemark());
CommonResponse response;
try {
response = client.getCommonResponse(request);
} catch (ClientException e) {
logger.error(e.getLocalizedMessage(), e);
throw new ApiException(e.getLocalizedMessage());
}
logger.info(response.getData());
CmsSmsResponse responseData = JSONUtil.toBean(response.getData(), CmsSmsResponse.class);
if ("OK".equals(responseData.getCode())) {
} else {
logger.error(response.getData());
}
结果:
@Getter
@Setter
public class CmsSmsResponse {
private String Code;
private String Message;
private String RequestId;
private String TemplateCode;
}
删除模板
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain(sysDomain);
request.setSysVersion(sysVersion);
request.setSysAction("DeleteSmsTemplate");
request.putQueryParameter("TemplateCode", template.getTemplateCode());
CommonResponse response;
try {
response = client.getCommonResponse(request);
} catch (ClientException e) {
logger.error(e.getLocalizedMessage(), e);
throw new ApiException(e.getLocalizedMessage());
}
logger.info(response.getData());
CmsSmsResponse responseData = JSONUtil.toBean(response.getData(), CmsSmsResponse.class);
if ("OK".equals(responseData.getCode())) {
} else {
logger.error(response.getData());
}
结果:
@Getter
@Setter
public class CmsSmsResponse {
private String Code;
private String Message;
private String RequestId;
private String TemplateCode;
}
发送短信
- 发送短信:SendSms
批量发送需要限制大小200
List<String> phones = ...
CmsSmsTemplate template = ...
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
int fromIndex = 0;
int toIndex = phones.size() > batchCount ? batchCount : phones.size();
while (fromIndex < phones.size()) {
List<String> subPhoneList = phones.subList(fromIndex, toIndex);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain(sysDomain);
request.setSysVersion(sysVersion);
request.setSysAction("SendBatchSms");
request.putQueryParameter("PhoneNumberJson", JSONUtil.toJsonStr(subPhoneList));
List<String> signNames = Lists.newArrayList();
for (int i = 0; i < subPhoneList.size(); i++) {
signNames.add(signName);
}
request.putQueryParameter("SignNameJson", JSONUtil.toJsonStr(signNames));
request.putQueryParameter("TemplateCode", template.getTemplateCode());
CommonResponse response;
try {
response = client.getCommonResponse(request);
} catch (ClientException e) {
logger.error("failed to send message form {} to {}", fromIndex, toIndex);
logger.error(e.getLocalizedMessage(), e);
continue;
}
logger.info(response.getData());
CmsSmsQueryResponse responseData = JSONUtil.toBean(response.getData(), CmsSmsQueryResponse.class);
if (!"OK".equals(responseData.getCode())) {
logger.error("failed to send message form {} to {}", fromIndex, toIndex);
logger.error(response.getData());
} else {
logger.info("success to send message form {} to {}", fromIndex, toIndex);
}
fromIndex += batchCount;
toIndex += batchCount;
toIndex = phones.size() > toIndex ? toIndex : phones.size();
}