阿里云短信验证笔记

1.了解阿里云的权限操作

进入AccessKey管理

选择子用户

创建用户组和用户

先创建用户组,建好再进行权限分配

添加短信管理权限

创建用户

创建好后的id和密码在此处下载可以得到

2.开通阿里云短信服务

进行申请,配置短信模板

阿里云短信API文档

短信服务API概览及参考_短信服务(SMS)-阿里云帮助中心

3.测试编码

3.1创建springboot项目导入依赖

        <!--阿里云sdk--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

dome测试代码

package com.yang.sms_dome;import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.util.HashMap;@SpringBootTest
class SmsDomeApplicationTests {@Testvoid contextLoads() {// 连接阿里云DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","自己的keyid", "自己的密钥");IAcsClient client = new DefaultAcsClient(profile);// 构建请求CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);// 这些内容不要动,是人家阿里巴巴弄出来的,咱不用管request.setDomain("dysmsapi.aliyuncs.com");//不要动request.setVersion("2017-05-25");//不要动// 自己的内容,此处 SendSms 为发送验证码request.setAction("SendSms");//自定义的参数(手机号,验证码,签名,模板! )//这是我的内容,请结合你的情况修改为你的东西!!!request.putQueryParameter("PhoneNumbers", "手机号");request.putQueryParameter("SignName", "阿里云短信测试");//阿里云专用短信测试签名request.putQueryParameter("TemplateCode", "SMS_154950909");//阿里云专用短信测试模板//构建短信验证码HashMap<String,Object> map=new HashMap<>();map.put("code",1877);request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));try {CommonResponse response = client.getCommonResponse(request);// 在控制台上打印出返回信息System.out.println(response.getData());} catch (ClientException e) {e.printStackTrace();}}}

controller类

package com.yang.sms_dome.controller;import com.aliyuncs.utils.StringUtils;
import com.yang.sms_dome.service.SendSmsService;
import io.netty.util.internal.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.TimeUnit;@RestController
@CrossOrigin    //跨域
public class SendSmsController {@Autowiredprivate SendSmsService sendSmsService;@Autowiredprivate RedisTemplate<String,String> redisTemplate;@GetMapping("/send/{phone}")public String code(@PathVariable("phone") String phone){String code = redisTemplate.opsForValue().get(phone);if (StringUtils.isNotEmpty(code)){return phone+code+"已存在,未过期";}//生成验证码并且存储到redis中code = generateVerificationCode(4);HashMap<String, Object> map = new HashMap<>();map.put("code",code);boolean flag = sendSmsService.sendSms(phone, "SMS_154950909", map);if (flag){redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return phone+":"+code+"发送成功!";}return "发送失败";}public static String generateVerificationCode(int length) {Random random = new Random();StringBuilder sb = new StringBuilder();for (int i = 0; i < length; i++) {int digit = random.nextInt(10); // 生成 0 到 9 之间的随机数字sb.append(digit);}return sb.toString();}
}

service层

package com.yang.sms_dome.service;import java.util.Map;public interface SendSmsService {boolean sendSms(String phoneNum, String templateCode, Map<String,Object> code);
}

serviceImpl层

package com.yang.sms_dome.serviceImpl;import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.yang.sms_dome.service.SendSmsService;
import org.springframework.stereotype.Service;import java.util.Map;
@Service
public class SendSmsServiceImpl implements SendSmsService {@Overridepublic boolean sendSms(String phoneNum, String templateCode, Map<String, Object> code) {// 连接阿里云DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","自己的keyid", "自己的密钥");IAcsClient client = new DefaultAcsClient(profile);// 构建请求CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);// 这些内容不要动,是人家阿里巴巴弄出来的,咱不用管request.setDomain("dysmsapi.aliyuncs.com");//不要动request.setVersion("2017-05-25");//不要动// 自己的内容,此处 SendSms 为发送验证码request.setAction("SendSms");//自定义的参数(手机号,验证码,签名,模板! )//这是我的内容,请结合你的情况修改为你的东西!!!request.putQueryParameter("PhoneNumbers", phoneNum);request.putQueryParameter("SignName", "阿里云短信测试");//阿里云专用短信测试签名request.putQueryParameter("TemplateCode", templateCode);//阿里云专用短信测试模板request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));try {CommonResponse response = client.getCommonResponse(request);// 在控制台上打印出返回信息System.out.println(response.getData());return response.getHttpResponse().isSuccess();} catch (ClientException e) {e.printStackTrace();}return false;}
}

yaml配置文件

server:port: 8080spring:redis:host: 127.0.0.1port: 6379

参考视频:【狂神说】通俗易懂的阿里云短信业务实战教程_哔哩哔哩_bilibili

代码仓库(私有):https://gitee.com/yzh-ch/sms_test

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

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

相关文章

逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例

补充知识&#xff1a;进行AES解密需要知道四个关键字&#xff0c;即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的&#xff0c;m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文&#xff1a; 一般思…

【算法大家庭】分治算法

目录 &#x1f953;1.简单介绍 &#x1f9c8;2.汉诺塔问题 1.简单介绍 分治算法是解决问题的一种思想&#xff0c;它将一个大问题分解成若干个小问题&#xff0c;然后分别解决这些小问题&#xff0c;最后将小问题的解合并起来得到原问题的解。 分解&#xff1a;将原问题分解…

Mazing官方 2.17.17版新i功能介绍

iMazing官方 2.17.17版是一款管理苹果设备的软件&#xff0c;是一款帮助用户管理 IOS 手机的PC端应用程序&#xff0c;能力远超 iTunes 提供的终极 iOS 设备管理器。在iMazing官方版上与苹果设备连接后&#xff0c;可以轻松传输文件&#xff0c;浏览保存信息等&#xff0c;功能…

SD-WAN对云服务的影响

近年来&#xff0c;随着企业对云服务的依赖不断增加&#xff0c;SD-WAN技术成为提升连接性能的热门选择。SD-WAN通过简化云集成和连接&#xff0c;以及提升应用程序性能&#xff0c;为企业带来显著的业务优势。这种云连接的改进使企业能够更轻松地接触全球劳动力和潜在客户。 首…

语文专刊《中学语文》是什么级别的刊物?

语文专刊《中学语文》是什么级别的刊物&#xff1f; 《中学语文》创刊于1958年&#xff0c;由国家新闻出版总署批准&#xff0c;经湖北省教育厅主管的省级学术期刊。 《中学语文》是由湖北大学文学院主办、国内外公开发行的学术期刊&#xff0c;主要面向中学语文教师和语文教…

盘点:好用的伪原创文章生成器软件

伪原创文章生成器软件在内容创作域领应用的非常广泛&#xff0c;它不仅可以为创作人员解决文章或文案创作困难的问题&#xff0c;同时还可以作为提升创作效率的完美工作&#xff0c;然而随着互联网技术的发展&#xff0c;互联网上的伪原创文章生成器软件多到让人应接不暇&#…

echarts鼠标事件

鼠标事件支持方法 ECharts 支持常规的鼠标事件类型&#xff0c;包括 ‘click’、 ‘dblclick’、 ‘mousedown’、 ‘mousemove’、 ‘mouseup’、 ‘mouseover’、 ‘mouseout’、 ‘globalout’、 ‘contextmenu’ 事件 简单实例 // 基于准备好的dom&#xff0c;初始化EChar…

加州大学圣地亚哥分校伯克利分校联合英伟达最新开源!COLMAP-Free 3D Gaussian Splatting

作者&#xff1a;石昊 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 从图像序列中进行相机姿态估计和新视角合成的问题。…

论文笔记:A survey on zero knowledge range proofs and applications

https://link.springer.com/article/10.1007/s42452-019-0989-z 描述了构建零知识区间证明&#xff08;ZKRP&#xff09;的不同策略&#xff0c;例如2001年Boudot提出的方案&#xff1b;2008年Camenisch等人提出的方案&#xff1b;以及2017年提出的Bulletproofs。 Introducti…

Win11系统实现adb命令向安卓子系统安装APP

Win11系统实现通过adb命令向安卓子系统安装已下载好的apk包。 要实现以上目标&#xff0c;我们需要用到一个Android SDK 的组件Android SDK Platform-Tools &#xff01;这个组件呢其实是被包含在 Android Studio中的&#xff0c;如果你对安卓开发有所了解对此应该不会陌生&…

【Unity】如何在Unity 中创建带有缩放效果的滚动视图(具有吸附效果的实现与优化)?

效果预览&#xff1a; 目录 效果预览&#xff1a; 一、引言&#xff1a; 二、问题描述 三、解决方案&#xff1a; 三、优化&#xff1a; 四、结论 一、引言&#xff1a; 在Unity开发中&#xff0c;经常需要实现滚动视图&#xff08;ScrollView&#xff09;中的内容吸附到…

算法C++

枚举 1.化段为点 前缀和 eg:给一个数列&#xff0c;算x到y个数的和 #include <iostream> #include <vector> using namespace std;int main() {int n;cin>>n;vector<int> a(n);vector<int> sum(n1,0);for(int i0;i<n;i){scanf…

047-WEB攻防-PHP应用文件上传函数缺陷条件竞争二次渲染黑白名单JS绕过

047-WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过 #知识点&#xff1a; 1、PHP-原生态-文件上传-检测后缀&黑白名单 2、PHP-原生态-文件上传-检测信息&类型内容 3、PHP-原生态-文件上传-函数缺陷&逻辑缺陷 4、PH…

Window系统部署Z-blog并结合内网穿透实现远程访问本地博客站点

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Spring Task的应用

介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a; 定时任务框架 作用&#xff1a; 定时自动执行某段Java代码 应用场景&#xff1a; 引用卡每月还款提醒、银行贷款每月还款提醒、火车票售票系统处理未支…

文献速递:深度学习--应用深度学习到DaTscan SPECT图像以改善帕金森病运动结果预测

文献速递&#xff1a;深度学习–应用深度学习到DaTscan SPECT图像以改善帕金森病运动结果预测 Title 题目 Improved motor outcome prediction in Parkinson’s disease applying deep learning to DaTscan SPECT images 应用深度学习到DaTscan SPECT图像以改善帕金森病运动…

unity学习(42)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——服务器收包2

1.解决上一次留下的问题&#xff1a; log和reg的时候也有session&#xff0c;输出看一下这两个session是同一个不&#xff1a; 实测结果reg log accOnline中的session都是同一个对象&#xff0c;但是getAccid时候的session就是另一个了。 测试结果&#xff0c;说明在LogicHan…

Linux信号【保存-处理】

目录 前言&#xff1a; 1、再次认识信号 1.1、概念 1.2、感性理解 1.3、在内核中的表示 1.4、sigset_t 信号集 2、信号集操作函数 2.1、增删改查 2.2、sigprocmask 2.3、sigpending 3.信号的处理机制 3.1处理情况 3.2合适时机 4用户态与内核态 4.1、概念 4.2、…

【Java程序设计】【C00322】基于Springboot的高校竞赛管理系统(有论文)

基于Springboot的高校竞赛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的高校竞赛管理系统&#xff0c;本系统有管理员、老师、专家以及用户四种角色&#xff1b; 管理员&#xff1a;首页、个人中心、管…

幻兽帕鲁(1.5.0)可视化管理工具(0.5.7 docker版)安装教程

文章目录 局域网帕鲁服务器部署教程帕鲁服务可视化工具安装配置服务器地址&#xff08;可跳过&#xff09;使用工具管理面板 1.5.0服务端RCON错误1.5.0服务端无法启动RCON端口 解决方法第一步&#xff1a;PalWorldSettings.ini配置第二步&#xff1a;修改PalServer.sh配置 局域…