短信发送接口 – SubMail
2023-04-18 14:39:23 时间
public class SubMailSmsSender {
private static Logger logger = LoggerFactory.getLogger(SubMailSmsSender.class);
private String submailSendUrl;
private String submailAppid;
private String submailAppkey;
public SubMailSmsSender(String submailSendUrl, String submailAppid, String submailAppkey) {
this.submailSendUrl = submailSendUrl;
this.submailAppid = submailAppid;
this.submailAppkey = submailAppkey;
}
ObjectMapper objectMapper = new ObjectMapper();
/**
* SUBMAIL 的短信一对多(即1条API请求发送多个号码,并可以灵活控制每个联系人的文本变量)和群发 API 。调用方需要确保 templateId 正确, smsList 中至少有一条
*
* @param templateId 短信模板
* @param multi 批量发送列表json字符串
* @return 返回发送成功的接收方手机号列表
*/
public List<String> multixsend(String templateId, String multi) {
String info = null;
boolean success = false;
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("appid", submailAppid));
params.add(new BasicNameValuePair("project", templateId));
params.add(new BasicNameValuePair("multi", multi));
params.add(new BasicNameValuePair("signature", submailAppkey));
try {
List<String> successPhoneList = new ArrayList<>();
HttpResponse post = HttpClientHelper.INSTANCE.post(submailSendUrl, params, "utf-8", null, null);
info = EntityUtils.toString(post.getEntity(), "utf-8");
if (logger.isDebugEnabled()) {
logger.debug("SUBMAIL 返回:" + info);
}
JsonNode jsonNode = objectMapper.readTree(info);
Iterator<JsonNode> iterator = jsonNode.iterator();
while (iterator.hasNext()) {
JsonNode next = iterator.next();
String status = next.get("status").asText();
String to = next.get("to").asText();
if ("success".equals(status)) {
successPhoneList.add(to);
if (logger.isInfoEnabled()) {
logger.info("成功发送短信给[" + to + "]");
}
} else {
String logContent = "发送短信给[" + to + "]失败";
if (logger.isInfoEnabled()) {
logger.error(logContent);
}
}
}
return successPhoneList;
} catch (IOException e) {
logger.error("请求 SubMail 服务器发送短信产生IO 错误", e);
return Collections.emptyList();
}
}
/**
* SUBMAIL 的短信一对多(即1条API请求发送多个号码,并可以灵活控制每个联系人的文本变量)和群发 API 。调用方需要确保 templateId 正确, smsList 中至少有一条
*
* @param templateId 短信模板
* @param smsList 批量发送列表
* @return 返回发送成功的接收方手机号列表
*/
public List<String> multixsend(String templateId, List<SubMailSms> smsList) {
if (smsList == null || smsList.isEmpty()) {
return Collections.emptyList();
}
String multi = null;
try {
multi = objectMapper.writeValueAsString(smsList);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return this.multixsend(templateId, multi);
}
/**
* 短信发送信息
*/
static class SubMailSms {
private String to;
private Map<String, String> vars;
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public Map<String, String> getVars() {
return vars;
}
public void setVars(Map<String, String> vars) {
this.vars = vars;
}
}
}
相关文章
- SpringBoot集成ffmpeg实现视频转码播放
- Spring Boot2配置Swagger2生成API接口文档
- Java---Stream进阶
- 【金九银十必问面试题】站在架构师角度分析问题,如何解决TCC中的悬挂问题
- Spring(三)-AOP
- Mybatis 懒加载使用及源码分析
- Mybatis 插件使用及源码分析
- api进阶Day2(低级流)文件流的输出流、读取流。向文件中写入文本数据、读取文件中的字符串、用lambda表达式创建文件过滤器。
- api进阶Day1文件的创建、删除、访问、设置过滤器并查询。目录的删除、创建。
- 面试官:MyBatis 插件有什么用途?说说底层原理?我竟然不会。。
- api接口基础Day1
- 后端编写Swagger接口管理文档
- day03_2_流程控制
- .NET Github Actions 入门
- Spring Boot Event 观察者模式,轻松带你实现业务解耦!
- 常用类-jdk8之前的日期和API
- PoweJob高级特性-MapReduce完整示例
- 高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
- 一网打尽异步神器CompletableFuture
- Flink-使用流批一体API统计单词数量