博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 实现阿里云短信
阅读量:6535 次
发布时间:2019-06-24

本文共 3195 字,大约阅读时间需要 10 分钟。

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82788132

Java 实现阿里云短信

阿里云提供一套短信发送的服务可通过 Java 进行对接

更多精彩

  • 更多技术博客,请移步

官网

准备步骤

  1. 创建
  2. 根据 完成实名认证,以确保可以使用阿里云相应服务
  3. 在密钥管理页面获取阿里云访问密钥,AccessKeyId 和 AccessKeySecret
  4. 想要成功发送一条短信需要获取 和

在项目 pom 中引入对接所需要的 jar 包

com.aliyun
aliyun-java-sdk-core
3.2.2
com.aliyun
aliyun-java-sdk-dysmsapi
1.0.0

获取对接需要的数据

  1. 将 AccessKeyId 、AccessKeySecret 、SignName 、TemplateCode 进行相应存储

新建 MessageServiceImpl 类用于和阿里云短信接口对接

@Servicepublic class MessageServiceImpl extends AbstractBaseService {
...}

在上述类中生成一个静态块用于在初始化对接信息

  1. Constants.ALI_ACCESS_KEY_IDConstants.ALI_ACCESS_SECRET 是密钥,成对生成和使用
  2. 其他参数信息按照阿里云开发手册说明,均不需要改变
// 用于从阿里云获取数据的权限客户端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 方法

  1. 发送短信之前通常需要验证短信是否已发送,防止重复发送
  2. 为了验证短信是否发送可将通过短信发送的验证码存放于 Redis 中
  3. Constants.ALI_MESSAGE_SIGN_NAME 是从阿里云获取的短信签名
  4. 为提高公用性,发送短信的方法支持从外部调用时传入具体模版编号
  5. 短信接口调用时如果出现异常反馈,请参照
@Autowiredprivate 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);}
你可能感兴趣的文章
主库 归档 删除策略
查看>>
linux服务器多网卡bond
查看>>
Chrome 更新策略大变:优先安装 64 位版本
查看>>
《Linux从入门到精通(第2版)》——导读
查看>>
路过下载攻击利用旧版 Android 漏洞安装勒索软件
查看>>
ThinkSNS 六大子版本体验及源码下载
查看>>
《算法基础》——1.5实际因素
查看>>
《Java数字图像处理:编程技巧与应用实践》——第3章 基本Swing UI组件与图像显示 3.1 JPanel组件与BufferedImage对象的显示...
查看>>
为什么有人讨厌 Google 的新 Logo?
查看>>
2022 年 AI 会发展成什么样子,IBM 做出了 5 大预测
查看>>
腾讯2017暑期实习编程题3
查看>>
整理收藏一份PHP高级工程师的笔试题
查看>>
Intellij IDEA 构建Spring Web项目 — 用户登录功能
查看>>
[AHOI2013]作业
查看>>
git push被忽略的文件 处理
查看>>
C#中用ILMerge将所有引用的DLL打成一个DLL文件
查看>>
PHP生成HTML静态页面
查看>>
服务器启动django
查看>>
Makefile 中:= ?= += =的区别【转】
查看>>
使用makecontext实现用户线程【转】
查看>>