短信模板管理

管理接口

  • 申请短信模板: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: 111111111111111111access-key-secret: 2222222222222222222222222sign-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();}

aliyun短信及短信模板操作相关推荐

  1. ThinkPHP6集成腾讯云、短信宝短信发送的工具类

    composer安装 composer require mrwanghongda/sms-sdk 代码: use Mrwanghongda\SmsSdk\Sms\SmsFactory;/*** 短信宝 ...

  2. 阿里云短信服务——短信发送验证码

    引言 短信服务现在在很多地方都用的到,我们最多接触到的可能就是验证码的发送了:现在很多大厂都提供由短信服务对应的api,直接调用就可以轻松实现短信发送:下面我以阿里云为例,演示一下如何短信发送验证码: ...

  3. [风一样的创作]二次封装阿里云短信 验证码 发送短信 查询短信 编辑短信

    1.首先要注册阿里云,购买阿里云短信服务,拿到AccessKey ID和AccessKey Secret 链接: https://usercenter.console.aliyun.com/#/man ...

  4. 国际短信平台短信路由搭建后台软件定制-移讯云短信系统

    国际短信平台短信路由搭建后台软件定制-移讯云短信系统 什么是短信路由 短信路由是指当短信发送时,不通的关键字内容,不同的地区进行线路分流.实现压缩成本速度和质量保证. 新的客户端客户登录后发送短信时可 ...

  5. 短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】

    短信接口被恶意调用?企业短信防火墙+[中昱维信]短信验证码[Java] 一.企业短信防火墙的实现 1.1 简介 1.2 第一步:获取防火墙帐号密钥 1.3 第二步:下载防火墙服务器 1.4 第三步:业 ...

  6. 短信接口防刷防轰炸解决方案Java接入教程- 企业短信防火墙+ 【中昱维信】短信验证码

    企业短信防火墙[新昕科技]+短信验证码[中昱维信]Java应用实例 一.企业短信防火墙的实现 1.1 简介 1.2 第一步:获取防火墙帐号密钥 1.3 第二步:下载防火墙服务器 1.4 第三步:业务系 ...

  7. 联通一信通短信平台接口调用

    联通一信通短信平台接口调用 起承转 准备工作 主要调用功能 发送短信 接收回复短信 起承转 业务需要调用联通一信通短信接口. 准备工作 调用接口前需要一系列准备工作,步骤如下: 企业账户相关信息,你需 ...

  8. [开源工具]2022/2023 分享好用的免费的云短信/临时短信[Temp Message]

    [开源工具]2022/2023 分享好用的免费云短信/临时短信[Temp Message] 什么是免费云短信? 免费云短信的优点? 如何使用免费云短信? 国内免费: 国外免费: 为何我输入了虚拟号码却 ...

  9. NIUSHOP商城系统短信宝短信插件

    配置方式: 一:本插件针对NIUSHOP商城程序开发,插件内的所有文件除Smsbao.php文件外,均为对原文件的修改,如果你的系统经过二次开发,安装本插件之前,请仔细核对修改. 二:把下载好的NIU ...

最新文章

  1. 算符优先文法,中缀式求值,栈的典型应用
  2. 这些焊接缺陷,你遇到过多少?
  3. python编程从入门到精通 叶维忠 pdf-叶维忠《Python编程从入门到精通》PDF
  4. POJ3114强连通+spfa
  5. React Native 红屏之Could not connect to development server.
  6. .xhr长轮询_使用Spring 3.2的DeferredResult进行长轮询
  7. Java程序员的典型工作过程有哪些_Java程序员都要经历哪些阶段
  8. go中make、new和直接var的区别
  9. JavaScript继承详解(二)
  10. C语言__LINE__实现原理
  11. 比postman好用10倍的接口调试工具ApiPost
  12. DNS Flood Detector让DNS更安全
  13. VBS以强制启用宏的方式打开EXCEL文件,无视用户设置
  14. 支付行业常见信息安全合规认证小记
  15. Oracle 11g 安装与彻底卸载
  16. 小程序 | 优惠券样式
  17. 《网络攻防》第七周学习总结
  18. vue3中Provide/Inject的使用
  19. OWA动态密码短信认证方案,解决outlook邮件双因子认证问题
  20. 大学四年如何有效的使用『牛客』平台

热门文章

  1. 准确率,召回率,mAP,ROC,AUC,特异性,敏感性,假阴性,假阳性
  2. SAP 特别总账标识和备选统驭科目
  3. 原来在国内我上的不是大学
  4. python tensorflow学习笔记(五)矩阵乘法运算
  5. 阿里后端常用的 15 款开发工具,你不试试?
  6. PyQt5 信号(Signal)与槽(Slot)
  7. python9行代码_如何用9行Python代码编写一个简易神经网络
  8. ERP咨询顾问必备的七种公关能力
  9. java八大基本数据类型基本用法(含数据输入输出)
  10. uni.navigateBack直接返回到首页