集成阿里云短信服务

目的是集成阿里云短信服务,完成验证码的发送和接收。

目  录

1、开通阿里云短信服务

2、申请签名

3、申请模板

4、获取AccessKey

5、代码实现

6、代码扩展

7、总结


1、开通阿里云短信服务

去阿里云官网开通

2、申请签名

进行整个步骤时,可以先阅读快速学习和测试教程

注意签名的填写不要太随意,不然不会通过

3、申请模板

4、获取AccessKey

        用于后续代码中的书写

5、代码实现

        引入相关依赖

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.3.3</version>
</dependency>
<!--实际上只有上面的依赖用于阿里云短信服务的依赖,下面fastjson为json转换工具-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version>
</dependency>

        逻辑实现

//发送短信的方法@Overridepublic boolean sendMsm(HashMap<String, Object> map, String phone) {if (StringUtils.isEmpty(phone))return false;//参数1:地域节点//参数2:AccessKey ID//参数3:AccessKey SecretDefaultProfile profile = DefaultProfile.getProfile("default", "写你自己的AccessKey ID", "写你自己的AccessKey Secret");DefaultAcsClient client = new DefaultAcsClient(profile);//设置相关固定参数CommonRequest request = new CommonRequest();//request.setProtocol(ProtocolType.HTTPS);request.setSysMethod(MethodType.POST); //提交方式,默认不能改request.setSysDomain("dysmsapi.aliyuncs.com");//请求阿里云哪里,默认不能改request.setSysVersion("2017-05-25");//版本号request.setSysAction("SendSms");//请求哪个方法//设置发送相关参数request.putQueryParameter("PhoneNumbers",phone);//设置要发送的【手机号】request.putQueryParameter("SignName","写你自己的申请阿里云短信服务的【签名名称】");//申请阿里云短信服务的【签名名称】request.putQueryParameter("TemplateCode","写你自己的申请阿里云短信服务的【模版中的 模版CODE】");//申请阿里云短信服务的【模版中的 模版CODE】//要求传递的code验证码为jason格式,可以使用JSONObject.toJSONString()将map转为json格式request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));//最终发送try {CommonResponse response = client.getCommonResponse(request);return response.getHttpResponse().isSuccess();} catch (ClientException e) {e.printStackTrace();return false;}}

以上就完成了短信的发送!

6、代码扩展

        为完善逻辑,引入redis作为验证码存储,保证验证码的有效性

//阿里云发送短信的方法@GetMapping("/send/{phone}")public R sendMsm(@PathVariable String phone){//从redis获取验证码,如果能获取,直接返回String code = redisTemplate.opsForValue().get(phone);if (!StringUtils.isEmpty(code)){return R.ok();}//获取不到就阿里云发送//生成随机值,并传递给阿里云短信,让他转发给手机code = RandomUtil.getSixBitRandom();HashMap<String, Object> map = new HashMap<>();map.put("code",code);//调用service中发送短信的方法boolean isSend = msmService.sendMsm(map, phone);if (isSend){//如果发送成功,把发送成功的code验证码保存到redis中,并设置有效时间,设置5分钟过期redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return R.ok();}else {return R.error().message("短信发送失败");}}

        RandomUtil工具类

public class RandomUtil {private static final Random random = new Random();private static final DecimalFormat fourdf = new DecimalFormat("0000");private static final DecimalFormat sixdf = new DecimalFormat("000000");//生成4位随机数public static String getFourBitRandom() {return fourdf.format(random.nextInt(10000));}//生成6位随机数public static String getSixBitRandom() {return sixdf.format(random.nextInt(1000000));}/*** 给定数组,抽取n个数据* @param list* @param n* @return*/public static ArrayList getRandom(List list, int n) {Random random = new Random();HashMap<Object, Object> hashMap = new HashMap<Object, Object>();// 生成随机数字并存入HashMapfor (int i = 0; i < list.size(); i++) {int number = random.nextInt(100) + 1;hashMap.put(number, i);}// 从HashMap导入数组Object[] robjs = hashMap.values().toArray();ArrayList r = new ArrayList();// 遍历数组并打印数据for (int i = 0; i < n; i++) {r.add(list.get((int) robjs[i]));System.out.print(list.get((int) robjs[i]) + "\t");}System.out.print("\n");return r;}
}

7、总结

        集成阿里云短信服务的过程还相对简单的,只是申请签名和申请模板相对麻烦点。希望你能快速实现。

学习之所以会想睡觉,是因为那是梦开始的地方。
ଘ(੭ˊᵕˋ)੭ (开心) ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)
                                                                                                        ------不写代码不会凸的小刘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451409.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XUbuntu22.04之如何创建、切换多个工作区(二百零九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

项目02《游戏-05-开发》Unity3D

基于 项目02《游戏-04-开发》Unity3D &#xff0c; 【任务】UI背包系统&#xff0c; 首先将Game窗口设置成1920 * 1080&#xff0c; 设置Canvas的缩放模式&#xff0c;&#xff1a;这样设置能让窗口在任意分辨率下都以一个正确的方式显示&#xff0c; 设置数值&…

Grafana实现在同一个面板中多个query应用不同的Data source

目的&#xff1a;实现在同一个面板中多个query应用不同的Data source如下图&#xff1a; 目前A、B都应用的是prometheus源&#xff0c;实现A、B两个query可以应用不同的Data source源 1.添加多个源&#xff1a; 2.点击需要应用多个源的面板&#xff0c;选择上面的设置按钮。 …

2024美赛C题完整解题教程及代码 网球运动的势头

2024 MCM Problem C: Momentum in Tennis &#xff08;网球运动的势头&#xff09; 注&#xff1a;在网球运动中&#xff0c;"势头"通常指的是比赛中因一系列事件&#xff08;如连续得分&#xff09;而形成的动力或趋势&#xff0c;这可能对比赛结果产生重要影响。球…

【Android】RxJava系列01-基本概述和基本用法

少年啊&#xff0c;要永远相信美好的事情即将发生 【Android】RxJava系列01-基本概述和基本用法 1.RxJava的概述2.RxJava的作用3.观察者和被观察者4.背压5.RxJava的基本用法步骤一&#xff0c;创建Observer&#xff08;观察者&#xff09;步骤二&#xff0c;创建Observable&…

【C++】类和对象之运算符重载(三)

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

【API接口】制造企业,电商API接口面临的一道难题——数据采集

数据采集一直是困扰着所有制造工厂的传统痛点&#xff0c;自动化设备品牌类型繁多&#xff0c;厂家和数据接口各异&#xff0c;国外厂家本地支持有限&#xff0c;不同采购年代。即便产量停机数据自动采集了&#xff0c;也不等于整个制造过程数据都获得了&#xff0c;只要还有其…

计算机网络_1.6.2 计算机网络体系结构分层的必要性

1.6.2 计算机网络体系结构分层的必要性 一、五层原理体系结构每层各自主要解决什么问题1、物理层2、数据链路层3、网络层4、运输层5、应用层 二、总结三、练习 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 本节主要介绍实现计算机网络需要解决哪些问题&#xff1f;以…

【XR806开发板试用】TCP通信测试 Ping 命令测试

1.工程准备 由于要使用wifi功能&#xff0c;直接从wlan_demo复制一份出来&#xff0c;然后修改。 源文件只留下 main.c 就可以了。 BUILD.gn文件 import("//device/xradio/xr806/liteos_m/config.gni")static_library("app_mying") {configs []sources…

LeetCode 热题 100 | 链表(中下)

目录 1 19. 删除链表的倒数第 N 个节点 2 24. 两两交换链表中的节点 3 25. K 个一组翻转链表 4 138. 随机链表的复制 菜鸟做题第三周&#xff0c;语言是 C 1 19. 删除链表的倒数第 N 个节点 到底是节点还是结点。。。 解题思路&#xff1a; 设置双指针 left 和 ri…

堪称灾难级攻击的 UDP FLOOD洪水攻击,应该如何防护?

DDOS又称为分布式拒绝服务&#xff0c;全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载&#xff0c;导致服务不可用&#xff0c;从而造成服务器拒绝正常流量服务。就如酒店里的房间是有固定的数量的&#xff0c;比如一个酒店有50个房间&#xff0c;当…

列式数据库、行式数据库简介

列式数据库、行式数据库简介 1、数据准备2、行式数据库3、列式数据库4、行式、列式存储对比 常见的行式数据库有Mysql&#xff0c;DB2&#xff0c;Oracle&#xff0c;Sql-server等&#xff1b;列数据库&#xff08;Column-Based&#xff09;数据存储方式按列存储&#xff0c;常…