B008-springcloud alibaba 短信服务 sms

目录

      • 短信服务介绍
      • 短信服务使用
        • 准备工作
          • 阿里云官网实名认证
          • 开通短信服务
          • 申请认证秘钥
          • 申请短信签名
          • 申请短信模板
        • 短信服务API介绍
          • 短信发送(SendSms)
          • 短信查询(QuerySendDetails)
          • 功能测试
      • 下单之后发送短信

短信服务介绍

短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。

产品优势:覆盖全面、高并发处理、消息堆积处理、开发管理简单、智能监控调度
产品功能:短信通知、短信验证码、推广短信、异步通知、数据统计
应用场景:短信验证码、系统信息推送、推广短信等
在这里插入图片描述
在这里插入图片描述

短信服务使用

接下来,我们使用短信验证码功能来演示短信服务的使用。流程如下:
在这里插入图片描述

准备工作
阿里云官网实名认证

https://www.aliyun.com

开通短信服务

搜索 短信服务,开通

申请认证秘钥

右上方头像 - AccessKey 管理 - 创建 AccessKey

申请短信签名

国内消息 - 签名管理 - 添加签名 - 一般写自己公司名

申请短信模板

国内消息 - 模版管理 - 添加模版

短信服务API介绍
短信发送(SendSms)

调用SendSms发送短信。

请求参数
在这里插入图片描述
返回数据
在这里插入图片描述

短信查询(QuerySendDetails)

调用QuerySendDetails接口查看短信发送记录和发送状态。

请求参数
在这里插入图片描述
返回数据
在这里插入图片描述

功能测试

第1步: 引入阿里云服务依赖

<!--短信发送-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alicloud-sms</artifactId>
</dependency>

第2步: 使用阿里云提供的Demo测试短信发送

下单之后发送短信

1 在shop-user 模块中加入sms依赖

<!--短信发送-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alicloud-sms</artifactId>
</dependency>

2 将阿里短信给出的demo封装成工具类

@Slf4j
public class SmsUtil {//替换成自己申请的accessKeyIdprivate static String accessKeyId = "LTAIMLlf8NKYXn1M";//替换成自己申请的accessKeySecretprivate static String accessKeySecret = "hqyW0zTNzeSIFnZhMEkOaZXVVcr3Gj";static final String product = "Dysmsapi";static final String domain = "dysmsapi.aliyuncs.com";/*** 发送短信** @param phoneNumbers 要发送短信到哪个手机号* @param signName     短信签名[必须使用前面申请的]* @param templateCode 短信短信模板ID[必须使用前面申请的]* @param param        模板中${code}位置传递的内容*/public static void sendSms(String phoneNumbers, String signName, String templateCode, String param) {try {System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setPhoneNumbers(phoneNumbers);request.setSignName(signName);request.setTemplateCode(templateCode);request.setTemplateParam(param);request.setOutId("yourOutId");SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);if (!"OK".equals(sendSmsResponse.getCode())) {log.info("发送短信失败,{}", sendSmsResponse);throw new RuntimeException(sendSmsResponse.getMessage());}} catch (Exception e) {log.info("发送短信失败,{}", e);throw new RuntimeException("发送短信失败");}}
}

3 修改短信发送的服务

//发送短信的服务
@Slf4j
@Service("shopSmsService")
@RocketMQMessageListener(consumerGroup = "shop-user",topic = "order-topic",consumeMode = ConsumeMode.CONCURRENTLY,//消费模式,指定是否顺序消费 CONCURRENTLY(同步,默认) ORDERLY(顺序)messageModel = MessageModel.CLUSTERING//消息模式 BROADCASTING(广播)  CLUSTERING(集群,默认)
)
public class SmsService implements RocketMQListener<Order> {@Autowiredprivate UserDao userDao;@Overridepublic void onMessage(Order message) {
//        log.info("收到一个订单信息{},接下来发送短信", JSON.toJSONString(message));log.info("接收到了一个订单信息{},接下来就可以发送短信通知了", message);//根据uid 获取手机号User user = userDao.findById(message.getUid()).get();//生成验证码 1-9 6StringBuilder builder = new StringBuilder();for (int i = 0; i < 6; i++) {builder.append(new Random().nextInt(9) + 1);}String smsCode = builder.toString();Param param = new Param(smsCode);try {//发送短信 {"code":"123456"}SmsUtil.sendSms(user.getTelephone(), "黑马旅游网", "SMS_170836451", JSON.toJSONString(param));log.info("短信发送成功");} catch (Exception e) {e.printStackTrace();}}@Data@AllArgsConstructor@NoArgsConstructorclass Param {private String code;}
}

浏览器访问测试:http://localhost:8091/order/product6/3

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

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

相关文章

Linux logrotate教程以及如何使用logrotate分割nginx访问日志

目录 **简介****配置****分割 Nginx access log 示例****总结** 简介 Logrotate 是一个用于管理 Linux 系统日志文件的工具。它可以自动执行以下操作&#xff1a; 将旧的日志文件压缩或删除创建新的日志文件将日志文件发送到指定的邮箱或其他目标 配置 既然 logrotate 主要…

【每日一题】好子数组的最大分数

Tag 【单调栈】【暴力枚举】【数组】【2024-03-19】 题目来源 1793. 好子数组的最大分数 解题思路 本题和 84. 柱状图中最大的矩形 一样&#xff0c;计算的都是最大矩形的面积。只不过多了一个约束&#xff1a;矩形必须包含下标 k。 以下的方法一和方法二是 84. 柱状图中最…

PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包

近年来&#xff0c;电商行业的迅猛发展&#xff0c;越来越多的商户开始寻求搭建自己的在线商城。然而&#xff0c;传统的商城系统往往功能单一&#xff0c;无法满足商户个性化、多样化的需求。同时&#xff0c;搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…

基于GEC6818的QT开发之——通过不同按键控制DHT11模块的数据采集与动态显示

基于GEC6818的QT开发之——通过不同按键控制DHT11模块的数据采集与动态显示 使用环境: ubantu16 QT5.7 开发板GEC6818 实现要求&#xff1a; 利用A53按键1、按键2与温湿度传感器完成QT界面动态显示温湿度记录&#xff0c;并指定温湿度记录超过指定范围&#xff0c;进行报警&…

十五、ReentrantLock

synchronized本身是可重入锁 下述示例代码&#xff1a; 当i 2的时候会执行m2的synchronized锁 import java.util.concurrent.TimeUnit;public class T01_ReentrantLock1 {synchronized void m1() {for(int i0; i<10; i) {try {TimeUnit.SECONDS.sleep(1);} catch (Interr…

多模态:Vary-toy

文章目录 前言一、模型结构二、数据工程总结 前言 Vary的提出让大模型在OCR相关任务的能力有了很大突破&#xff0c;通过提出额外的视觉词汇表模块来弥补单一CLIP编码能力的不足&#xff0c;详情可参考我之前的文章——多模态&#xff1a;Vary。 最近Vary的团队开发了一个更小…

UE要收费?难道ue的使用成本要增加吗?

去年&#xff0c;Epic Games在裁员16%后&#xff0c;放出要对非游戏制作等行业使用UE进行收费的消息。3月12日&#xff0c;Epic Games正式宣布了对UE、实时可视化工具Twinmotio和摄影测量应用RealityCapture的新定价。 Epic Games将从下个月开始推出新的Unreal订阅模式&#x…

Vue.js中使用Web Workers来创建一个秒表

在Vue.js中使用Web Workers来创建一个秒表应用可以提高性能&#xff0c;因为Web Workers可以在后台线程中运行&#xff0c;不阻塞主线程。下面是一个简单的Vue.js秒表应用的示例&#xff0c;该应用使用Web Worker来执行计时功能。 首先&#xff0c;我们创建一个Web Worker文件…

python循环结构

循环结构 1.1遍历循环结构for 1.1.1遍历循环for (1)遍历循环for的语句结构: for 循环遍历 in 遍历对象&#xff1a; 语句块 程序执行&#xff1a; &#xff08;2&#xff09;示例&#xff1a; #遍历字符串 for i in hello:print(i) #range()函数&#xff0c;python中的内…

蓝桥杯-Sticks-DFS搜索

题目 样例输出是 6 5 题目中给错了&#xff0c;不知道什么时候会改。 思路 --剪枝&#xff0c;否则时间复杂度和空间复杂度过大&#xff0c;会超时。 --注意有多组测试样例时&#xff0c;需要将bool数组重新赋值为false。 --函数类型不是void&#xff0c;return语句不能省…

【FPGA】摄像头模块OV5640

本篇文章包含的内容 一、OV5640简介1.1 基本概述1.2 工作时序1.2.1 DVP Timing&#xff08;数据传输时序&#xff09;1.2.2 帧曝光工作模式 1.3 OV5640 闪光灯工作模式1.3.1 Xenon Flash&#xff08;氙灯闪烁&#xff09;模式1.3.2 LED 1&2 模式1.3.3 LED 3模式1.3.4 手动开…

Re62:读论文 GPT-2 Language Models are Unsupervised Multitask Learners

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Language Models are Unsupervised Multitask Learners 论文下载地址&#xff1a;https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learner…

接口测试开始前做什么?这10步缺一不可!

在进行接口测试之前&#xff0c;测试工程师需要进行一系列的准备工作&#xff0c;以确保测试的顺利进行。以下是接口测试开始之前的准备工作&#xff0c;并附有示例说明&#xff1a; 1. 了解项目和接口文档&#xff1a; 在开始测试之前&#xff0c;测试工程师需要仔细阅读项目…

Android 系统源码快速入门

Android源码快速入门 今天分享的内容是Android源码快速入门&#xff0c;主要分为以下几个步骤&#xff1a; * 硬件要求 * 虚拟机安装 * 开发环境搭建 * 下载编译源码 * 从一个简单的实际开发需求体验 Framework 开发硬件要求 用于 Android Framework 开发的电脑需要较强的 C…

sqlserver列出表的所有字段名

1、纵向列出所有字段 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME tablename;2、横向列车所有字段&#xff0c;以‘&#xff0c;’分隔 SELECT STUFF((SELECT , column_nameFROM information_schema.columnsWHERE table_name tablenameFOR XM…

使用 Python 编写网络爬虫:从入门到实战

网络爬虫是一种自动化获取网页信息的程序&#xff0c;通常用于数据采集、信息监控等领域。Python 是一种广泛应用于网络爬虫开发的编程语言&#xff0c;具有丰富的库和框架来简化爬虫的编写和执行过程。本文将介绍如何使用 Python 编写网络爬虫&#xff0c;包括基本原理、常用库…

实地研究降本增效的杀伤力,LSTM算法实现全国失业率分析预测

前言 ​ 降本增效降本增笑&#xff1f;增不增效暂且不清楚&#xff0c;但是这段时间大厂的产品频繁出现服务器宕机和产品BUG确实是十分增笑。目前来看降本增效这一理念还会不断渗透到各行各业&#xff0c;不单单只是互联网这块了&#xff0c;那么对于目前就业最为严峻的一段时…

zynq7000 neon 裸机编译

最近想用zynq7000跑下neon&#xff0c;所以就开始折腾。 因为ne10不能用在裸机上&#xff0c;所以盯上了cmsis_dsp。因为这个库可以在cortex-a和cortex-m上面跑&#xff0c;而zynq7000用的是cortex-a9。应该是可以跑的。在这里特别感谢大佬的文章&#xff0c;少走不少弯路。 …

Cinema 4D 2024 for mac/Win:开启三维动画与建模新纪元

在数字化时代&#xff0c;三维动画与建模已成为影视、游戏、广告等多个领域不可或缺的创作工具。而Cinema 4D&#xff0c;作为这一领域的佼佼者&#xff0c;始终以其卓越的性能和创新的功能引领着行业的发展。如今&#xff0c;Cinema 4D 2024的发布&#xff0c;更是为我们带来了…

键盘映射工具KeyTweak的使用,把F9和F10改为 Home、End

如果你的笔记本没有Home、End键 对于写文字和写代码影响还是比较大的 下面使用键盘映射工具KeyTweak 把F9和F10分别改为 Home、End 然后点击ok 电脑重启后 就生效了 很好用 完美解决 小尺寸笔记本 的按键少的烦恼 可以自己再琢磨琢磨 去映射 符合自己需求的按键 软件下载链接&…