使用阿里云发送短信

使用阿里云短信服务有两种方式
在这里插入图片描述
API 发送和 控制台发送,控制台发送到话有太多限制,这里我们使用API 通过 调用服务端代码进行发送。

整体结构如下:
在这里插入图片描述

导入依赖

<!--阿里云短信发送--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.2.6</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.0.0</version></dependency>

外放接口

    /*** 发送手机验证码*/@ApiOperation(value = "发送手机验证码", notes = "发送手机验证码")@PostMapping("/sendSMS")public ApiResult sendSMS(@RequestParam("phone") String phone) {//六位数随机数long rand = (long)(Math.random()*900000+100000);String mCode = String.valueOf(rand);boolean mS = SengSmsUtils.sendSMS(phone,mCode);//返回数据SmsReturnVO smsReturnVO = new SmsReturnVO();smsReturnVO.setSendSuccess(true);smsReturnVO.setMCode(MD5Utils.toMD5(mCode));if (!mS){smsReturnVO.setSendSuccess(false);}return ApiResult.ok(smsReturnVO);}

MD5加密

/*** Md5加密,加密规则与客户端一致*/
public class MD5Utils {public static String toMD5(String s){String mStr = "头部特殊字符" + s + "尾部特殊字符";try {mStr = DigestUtils.md5DigestAsHex(mStr.getBytes(StandardCharsets.UTF_8));} catch (Exception e) {e.printStackTrace();}return mStr;}}

发送工具类

/*** 发送短信通知* 多发*List<String> mobiles = new ArrayList<>();*mobiles.add("15*******13");*mobiles.add("13*******27");*mobiles.add("17*******56");*String s= getSplitString(mobiles);*/
public class SengSmsUtils {// 签名private static final String signName = "签名管理-签名名称";// 模板private static final String templateCode = "模板管理-模板CODE";// 阿里云短信配置信息private static final String accessKeyId = "AccessKey管理-创建AccessKey";private static final String accessKeySecret = "创建后会显示";private static final String REGION_ID = "cn-hangzhou"; //固定不用改private static final String PRODUCT = "Dysmsapi"; //固定不用改private static final String DOMAIN = "dysmsapi.aliyuncs.com"; //固定不用改public static boolean sendSMS(String mobile,String mCode) {try {IClientProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);DefaultProfile.addEndpoint(REGION_ID, REGION_ID, PRODUCT, DOMAIN);IAcsClient acsClient = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setMethod(MethodType.POST);// 手机号可以单个也可以多个(多个用逗号隔开,如:15*******13,13*******27,17*******56)request.setPhoneNumbers(mobile);request.setSignName(signName);request.setTemplateCode(templateCode);request.setTemplateParam("{\"code\":"+"'"+mCode+"'"+"}");SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);if ((sendSmsResponse.getCode() != null) && (sendSmsResponse.getCode().equals("OK"))) {return true;} else {return false;}} catch (ClientException e) {return false;}}/*** 获取逗号分隔的拼接字符串*/public static String getSplitString(List<String> str) {StringBuilder newS = new StringBuilder();if (str != null && str.size() > 0) {for (String s : str) {newS.append(s).append(",");}}if (newS.length() > 0){newS.deleteCharAt(newS.length() - 1);// 删除最后一个多余的逗号}return newS.toString();}
}

接口返回数据

/*** 发送验证码返回数据类*/
@Data
public class SmsReturnVO {//是否发送成功private Boolean sendSuccess;//发送成功携带验证码private String mCode;}
此时,调用接口后,会将加密后的验证码返回给接口调用端,接口调用端 在输入框数据验证码后进行MD5 加密,与服务端给的对比即可 (加密规则要与服务端对应)

补充,在发送工具类中的参数在阿里云中如何查看

签名管理-签名名称

在这里插入图片描述

模板管理-模板CODE

在这里插入图片描述

AccessKey管理-创建AccessKey

在这里插入图片描述
在这里插入图片描述

完结,撒花

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

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

相关文章

结合OpenAI、Google、Meta发布Sora、Gemini Pro 1.5、V-JEPA,分析三家AGI路线及当前情势

这里是陌小北&#xff0c;一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的&#xff0c;背诗的里面最会写段子的&#xff0c;写段子的里面代码写得最好的…厨子。 写在前面 昨天整理每周新闻&#xff0c;发现2024年2月15日是个大日子&#xff0c;三大科技…

【漏洞复现】H3C 路由器多系列信息泄露漏洞

Nx01 产品简介 H3C路由器是一款高性能的路由器产品&#xff0c;具有稳定的性能和丰富的功能。它采用了先进的路由技术和安全机制&#xff0c;可以满足不同用户的需求&#xff0c;广泛应用于企业、运营商和数据中心等领域。 Nx02 漏洞描述 H3C路由器多系列存在信息泄露漏洞&…

【C++航海王:追寻罗杰的编程之路】vector

目录 1 -> vector的介绍及使用 1.1 -> vector的介绍 1.2 -> vector的使用 1.2.1 -> vector的介绍 1.2.2 -> vector iterator的使用 1.2.3 -> vector空间增长问题 1.2.4 -> vector的增删查改 1.2.5 -> vector迭代器失效问题 2 -> vector的深…

大语言模型学习路线:从入门到实战

大语言模型学习路线&#xff1a;从入门到实战 在人工智能领域&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;正迅速成为一个热点话题。 本学习路线旨在为有基本Python编程和深度学习基础的学习者提供一个清晰、系统的大模型学习指南&#xff0c;…

企业总部与分部通过DSVPN实现互联

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

Stable Diffusion 绘画入门教程(webui)-提示词

通过上一篇文章大家应该已经掌握了sd的使用流程&#xff0c;本篇文章重点讲一下提示词应该如何写 AI绘画本身就是通过我们写一些提示词&#xff0c;然后生成对应的画面&#xff0c;所以提示词的重要性不言而喻。 要想生成更加符合自己脑海里画面的图片&#xff0c;就尽量按照…

泰山派摄像头使用-opencv流程

1. 泰山派添加camera 连接摄像头连接到usb接口,查看dev设备: # 在终端中输入如下命令&#xff0c;可以查看到camera设备资源&#xff1a; ls /dev/video* 检查板卡上的camera设备资源示例 也可以使用v4l2命令查看 v4l2-ctl --list-devices v4l2-ctl --list-devices是一个命令…

RabbitMQ死信队列、延迟队列原理实战

1.死信队列TTL 什么是TTL time to live&#xff1a;消息存活时间如果消息在存活时间内未被消费&#xff0c;则会被清除RabbitMQ支持两种TTL设置 单独消息进行配置TTL整个队列进行配置TTL&#xff08;使用居多&#xff09; 什么是RabbitMQ的死信队列 没有被及时消费的消息存放…

智慧公厕管理系统:让城市智慧驿站更加智慧舒适

智慧公厕管理系统是城市智慧驿站中不可或缺的一部分&#xff0c;它通过全方位的信息化解决方案&#xff0c;为公共厕所的使用、运营和管理提供了一种智能化的方式。作为城市智慧驿站的重要组成部分&#xff0c;智慧公厕管理系统发挥着重要的作用&#xff0c;为城市社会民生提供…

外汇天眼:遭遇交易问题?看这篇就够了!

对于投资者来说&#xff0c;资金安全是投资过程中的首要问题。然而在外汇交易中&#xff0c;即使是摒弃了黑平台&#xff0c;在正规的交易平台&#xff0c;投资者也可能会遭遇拖延出金或者因市场行情突发滑点爆仓等交易问题&#xff0c;这不仅会增加投资者的焦虑心情&#xff0…

Unity3D中刚体、碰撞组件、物理组件的区别详解

前言 Unity3D提供了丰富的功能和组件&#xff0c;其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用&#xff0c;能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。 对惹&#xff0c;这里有一个游戏开发…