Java 实现阿里云短信
Java 实现阿里云短信
阿里云提供一套短信发送的服务可通过 Java 进行对接
更多精彩
- 更多技术博客,请移步 asing1elife’s blog
官网
准备步骤
- 创建 阿里云账号
- 根据 流程 完成实名认证,以确保可以使用阿里云相应服务
- 在密钥管理页面获取阿里云访问密钥,AccessKeyId 和 AccessKeySecret
- 想要成功发送一条短信需要获取 短信签名 和 短信模版
在项目 pom 中引入对接所需要的 jar 包
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.0.0</version> </dependency> </dependencies>
获取对接需要的数据
- 将 AccessKeyId 、AccessKeySecret 、SignName 、TemplateCode 进行相应存储
新建 MessageServiceImpl 类用于和阿里云短信接口对接
@Service public class MessageServiceImpl extends AbstractBaseService { ... }
在上述类中生成一个静态块用于在初始化对接信息
-
Constants.ALI_ACCESS_KEY_ID
和Constants.ALI_ACCESS_SECRET
是密钥,成对生成和使用 - 其他参数信息按照阿里云开发手册说明,均不需要改变
// 用于从阿里云获取数据的权限客户端 private static IAcsClient iAcsClient; static { // 超时时间 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); // 初始化配置 String regionId = "cn-hangzhou"; DefaultProfile profile = DefaultProfile.getProfile(regionId, Constants.ALI_ACCESS_KEY_ID, Constants.ALI_ACCESS_SECRET); try { String productId = "Dysmsapi"; String domain = "dysmsapi.aliyuncs.com"; DefaultProfile.addEndpoint(regionId, regionId, productId, domain); } catch (ClientException e) { throw new TSharkException("初始化短信接口配置失败!", e); } // 初始化权限客户端 iAcsClient = new DefaultAcsClient(profile); }
创建用于发送短信的 sendMessage 方法
- 发送短信之前通常需要验证短信是否已发送,防止重复发送
- 为了验证短信是否发送可将通过短信发送的验证码存放于 Redis 中
-
Constants.ALI_MESSAGE_SIGN_NAME
是从阿里云获取的短信签名 - 为提高公用性,发送短信的方法支持从外部调用时传入具体模版编号
- 短信接口调用时如果出现异常反馈,请参照 短信接口调用错误码
@Autowired private RedisHelper redisHelper; public Boolean sendMessage(String mobile, String template) { // 有效性验证 if (checkMobile(mobile)) { throw new TSharkException("验证码已发送,请稍后再试!"); } SendSmsRequest request = new SendSmsRequest(); SendSmsResponse response = null; // 生成随机数 String random = String.valueOf(new Random().nextInt(999999)); request.setMethod(MethodType.POST); request.setPhoneNumbers(mobile); request.setSignName(Constants.ALI_MESSAGE_SIGN_NAME); request.setTemplateCode(template); request.setTemplateParam("{\"name\":\"" + mobile + "\", \"code\":\"" + random + "\"}"); try { response = iAcsClient.getAcsResponse(request); } catch (ClientException e) { throw new TSharkException("接收短信回执失败!", e); } boolean result = response.getCode() != null && response.getCode().equals("OK"); if (result) { // 保存随机数 saveRandom(mobile, random); } return result; }
通过 Redis 验证短信是否发送
private Boolean checkMobile(String mobile) { String randomKey = "random:" + mobile; return redisHelper.get(randomKey) != null; }
短信发送成功后需要将手机号和验证码成对存储于 Redis 中,以供之后使用
private void saveRandom(String mobile, String random) { String randomKey = "random:" + mobile; if (checkMobile(mobile)) { return; } redisHelper.set(randomKey, random); // 5分钟失效 redisHelper.expire(randomKey, 5, TimeUnit.MINUTES); }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java 实现阿里云直播
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82788122 Java 实现阿里云直播 阿里云播放器直接在线点播视频以及直播技术,此处记录直播实现过程 更多精彩 更多技术博客,请移步 asing1elife’s blog 官网 阿里云直播-快速入门 准备步骤 创建 阿里云账号 根据 流程 完成实名认证,以确保可以使用阿里云相应服务 在密钥管理页面获取阿里云访问密钥,AccessKeyId 和 AccessKeySecret 开通阿里云直播服务 关键点 阿里云直播服务端提供了 一系列 API ,但如果只是单纯的直播[推流和拉流] ,实际不需要使用这些 API 推流准备 推流即直播人员进行视频播放的操作,这需要使用推流客户端 第三方推流工具 OBS 在推流工具中需要指定推流地址、流名称、鉴权密钥 如果上述信息阿里云验证合法,既可以开始直播,在阿里云后端可以看到正在直播的流信息 拉流准备 拉流即直播观众通过视频播放器在线获取直播信息,播放器使用 阿里云...
- 下一篇
Python基础——mysql数据库、SQLAlchemy
一、MySQL常用操作 1、创建库 create database test; 2、创建表 create table student(id int not null); 3、授权一个用户 grant all privileges on *.* to 'username'@'%' identified by 'passwd'; 其中%通配所有地址 4、查询 select * from tabel_name where 条件1 and 条件2; 5、增加数据 insert into table_name (id, name, age, sex, grander) values (1, 'jsh', 25, 'M', 99), (2, 'Tom', 45, 'F', 88); 6、删除数据 delete from table_name where 条件判断; drop table table_name; 删除表 7、改数据(更新数据) update table_name set id=10 where 条件判断; 8、联合查询 select a.id, b.name from A a joi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19