Java 实现阿里云短信

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

Java 实现阿里云短信

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

更多精彩

官网

短信发送API(SendSms)—阿里云

准备步骤

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

在项目 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>

获取对接需要的数据

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

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

@Service
public 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. 短信接口调用时如果出现异常反馈,请参照 短信接口调用错误码
@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);
}
目录
相关文章
|
10月前
|
机器学习/深度学习 人工智能 NoSQL
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。
1808 3
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
|
10月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
510 0
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
1229 112
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
运维 监控 搜索推荐
阿里大鱼进行发短信业务---使用详细步骤-Java操作
这篇文章详细介绍了如何在Java中使用阿里大鱼服务来发送短信,包括开通短信服务、签名和模板管理,以及具体的Java开发步骤和代码示例。
1312 0
阿里大鱼进行发短信业务---使用详细步骤-Java操作
|
存储 SQL 分布式计算
Java连接阿里云MaxCompute例
要使用Java连接阿里云MaxCompute数据库,首先需在项目中添加MaxCompute JDBC驱动依赖,推荐通过Maven管理。避免在代码中直接写入AccessKey,应使用环境变量或配置文件安全存储。示例代码展示了如何注册驱动、建立连接及执行SQL查询。建议使用RAM用户提升安全性,并根据需要配置时区和公网访问权限。具体步骤和注意事项请参考阿里云官方文档。
1071 10
|
Java 开发工具
通过Java SDK调用阿里云模型服务
在阿里云平台上,可以通过创建应用并使用模型服务完成特定任务,如生成文章内容。本示例展示了一段简化的Java代码,演示了如何调用阿里云模型服务生成关于“春秋战国经济与文化”的简短文章。示例代码通过设置系统角色为历史学家,并提出文章生成需求,最终处理并输出生成的文章内容。在实际部署前,请确保正确配置环境变量中的密钥和ID,并根据需要调整SDK导入语句及类名。更多详情和示例,请参考相关链接。
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
171 0
|
存储 NoSQL Java
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
351 0
|
Java 对象存储
阿里云OSS上传下载文件java
阿里云OSS上传下载文件java
1055 0
|
Java 对象存储
java对接阿里云OSS上传
java对接阿里云OSS上传
977 2