扩展------项目中集成阿里云短信服务

引言

        在当今数字化时代,短信服务在各种项目中扮演着重要角色,如用户注册验证、订单通知、营销推广等。阿里云短信服务凭借其稳定、高效和丰富的功能,成为众多开发者和企业的首选。本文将详细介绍如何在项目中集成阿里云短信服务,帮助开发者快速上手并实现相关功能。

阿里云短信服务简介

  1. 服务特点

    • 高送达率:依托阿里云强大的通信网络和优化算法,确保短信能够快速、准确地送达用户手机。

    • 高并发处理能力:能够支持大规模的短信发送请求,满足企业级应用的需求。

    • 丰富的功能:提供多种短信模板类型,支持变量替换,方便个性化定制短信内容。

    • 安全可靠:采用多重安全防护机制,保障用户数据和隐私安全。

  2. 应用场景

    • 用户注册与登录:发送验证码短信,实现用户身份验证。

    • 订单通知:及时通知用户订单状态更新,如发货、配送、完成等。

    • 营销推广:向用户发送促销活动、新品推荐等短信,提升用户活跃度和转化率。

    • 其他通知:如账户余额提醒、系统公告等。

集成步骤

1、注册阿里云账号,开通短信服务

2、创建AccessKey ID和AccessKey Secret

 

3、创建模板、签名(可直接使用测试模板)

4、在项目中引入依赖 

 <dependency>
     <groupId>com.aliyun</groupId>
     <artifactId>alibabacloud-dysmsapi20170525</artifactId>
     <version>3.0.1</version>
 </dependency>
 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.47</version>
 </dependency>

5、创建工具类

import com.alibaba.fastjson.JSONObject;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

@Component
public class ALIMessageUtil {

    public static final String ALIBABA_CLOUD_ACCESS_KEY_ID = "";
    public static final String ALIBABA_CLOUD_ACCESS_KEY_SECRET = "";
    public static final String ALIBABA_CLOUD_REGION_ID = "cn-qingdao";
    public static final String ALIBABA_CLOUD_ENDPOINT = "dysmsapi.aliyuncs.com";
    public static final String ALIBABA_CLOUD_SIGNNAME = "阿里云短信测试";
    public static final String ALIBABA_CLOUD_TEMPLATE_CODE = "SMS_154950909";

    public static boolean sendMessage(String phone, Map<String, Object> params) {
        // 阿里云账号凭证配置
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID)
                .accessKeySecret(ALIBABA_CLOUD_ACCESS_KEY_SECRET)
                .build());

        // 异步客户端
        AsyncClient client = AsyncClient.builder()
                .region(ALIBABA_CLOUD_REGION_ID)                               // Region ID
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride(ALIBABA_CLOUD_ENDPOINT)
                )
                .build();

        // 发送API参数配置
        SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
                .signName(ALIBABA_CLOUD_SIGNNAME)                   //签名
                .templateCode(ALIBABA_CLOUD_TEMPLATE_CODE)          //模板CODE
                .phoneNumbers(phone)                                //接收短信的手机号码
                .templateParam(JSONObject.toJSONString(params))     //短信内容
                .build();

        // 发送短信并且获得返回结果
        CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);

        try {
            SendSmsResponse resp = response.get();
            System.out.println(new Gson().toJson(resp.getBody()));
            return "OK".equals(resp.getBody().getCode());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭客户端
            client.close();
        }
        return false;
    }
}

6、项目中使用即可(发送验证码)

@GetMapping("/getCode")
    @Operation(summary = "获取验证码")
    public void getCode(@RequestParam String Phone) {
        //随机生成六位数字验证码
        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
        Map<String, Object> params = new HashMap<>();
        params.put("code", code);
        ALIMessageUtil.sendMessage(Phone, params);
        log.info(Phone+"-已发送短信:" + "验证码为: "+ code);
        //将验证码存在Redis中,并且5分钟内有效

    }

7、验证测试 

 

                                          

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XHR请求解密:抓取动态生成数据的方法

在如今动态页面大行其道的时代&#xff0c;传统的静态页面爬虫已无法满足数据采集需求。尤其是在目标网站通过XHR&#xff08;XMLHttpRequest&#xff09;动态加载数据的情况下&#xff0c;如何精准解密XHR请求、捕获动态生成的数据成为关键技术难题。本文将深入剖析XHR请求解密…

STM32-I2C通信协议

目录 一&#xff1a;什么是I2C通信协议 二&#xff1a;I2C通信 三&#xff1a;I2C时序图 四&#xff1a;面试常见问题 一&#xff1a;什么是I2C通信协议 I2C&#xff08;Inter-Integrated Circuit&#xff09;协议是一种串口通信协议&#xff0c;用于在集成电路之间传输数…

Jenkins在Windows上的使用(一):用户配置

&#xff08;一&#xff09;下载jenkins和jdk 下载地址 https://www.jenkins.io/download/ jdk下载地址 https://www.oracle.com/java/technologies/downloads/安装jenkins的时候会提示需要的jdk版本&#xff08;二&#xff09;windows下创建用户账户 1. 创建jenkins用户 …

MQTT协议下温度数据上报观测云最佳实践

MQTT 介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种轻量级的、基于发布/订阅模式的消息传输协议&#xff0c;专为低带宽、高延迟或不可靠的网络环境设计&#xff0c;广泛应用于物联网&#xff08;IoT&#xf…

立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具

Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹&#xff0c;甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…

一文对比RAGFLOW和Open WebUI【使用场景参考】

一、RAGFLOW与Open WebUI RAGFLOW是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程&#xff0c;结合大语言模型&#xff08;LLM&#xff09;针对用户各类不…

SpringBoot整合Caffeine本地缓存

本文章摘自 Java技术小馆https://www.yuque.com/jtostring/am5oq3/ac34uu2liy50t042?singleDoc#LyUGd 在现代的微服务架构中&#xff0c;缓存已经成为提升系统性能、降低数据库压力和提高响应速度的关键技术之一。对于Java开发者而言&#xff0c;Spring Boot作为一种开发框架…

腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台

今天&#xff0c;在腾讯的 Shiply 平台看 Flutter 动态化自研框架 Conch 时&#xff0c;在侧边栏看到了有「跨端开发框架」的介绍&#xff0c;点开发现有两个产品&#xff1a; Hippy&#xff1a;面向前端技术栈的跨端开发框架&#xff0c;Web原生开发体验&#xff0c;支持 Rea…

性能案例经验总结

数据库案例总结案例一:索引创建不合适导致性能问题背景接口getResourceByRoleID在单交易测试时,发现接口响应时间过长,DB 消耗资源比较严重。 关键字db2advis 、执行计划、runstat 、权限接口 问题分析首先是找出接口调用的SQL语句,有两个方法通过DB2top 命令 查找通过以下提…

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数&#xff1a; 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中…

分布式存储—— HBase数据模型 详解

目录 1.3 HBase数据模型 1.3.1 两类数据模型 1.3.2 数据模型的重要概念 1.3.3 数据模型的操作 1.3.4 数据模型的特殊属性 1.3.5 CAP原理与最终一致性 1.3.6 小结 本文章参考、总结于学校教材课本《HBase开发与应用》 1.3 HBase数据模型 在开始学习HBase之前非常…

WebSocket:实现实时通信的利器

在现代Web应用中&#xff0c;实时通信变得越来越重要。无论是聊天应用、在线游戏&#xff0c;还是实时数据推送&#xff0c;传统的HTTP请求-响应模式已经无法满足需求。WebSocket作为一种全双工通信协议&#xff0c;应运而生&#xff0c;成为实现实时通信的利器。本文将深入探讨…

Aruco 库详解:计算机视觉中的高效标记检测工具

1. 引言&#xff1a;Aruco 在计算机视觉中的重要性 在计算机视觉领域&#xff0c;标记&#xff08;Marker&#xff09;检测和识别是许多应用的基础&#xff0c;包括 机器人导航、增强现实&#xff08;AR&#xff09;、相机标定&#xff08;Calibration&#xff09;以及物体跟踪…

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…

react中的fiber和初次渲染

源码中定义了不同类型节点的枚举值 组件类型 文本节点HTML标签节点函数组件类组件等等 src/react/packages/react-reconciler/src/ReactWorkTags.js export const FunctionComponent 0; export const ClassComponent 1; export const IndeterminateComponent 2; // Befo…

AutoGen学习笔记系列(七)Tutorial - Managing State

这篇文章瞄准的是AutoGen框架官方教程中的 Tutorial 章节中的 Managing State 小节&#xff0c;主要介绍了如何对Team内的状态管理&#xff0c;特别是如何 保存 与 加载 状态&#xff0c;这对于Agent系统而言非常重要。 官网链接&#xff1a;https://microsoft.github.io/auto…

Compose Multiplatform+Kotlin Multiplatfrom 第四弹跨平台

文章目录 引言功能效果开发准备依赖使用gradle依赖库MVIFlow设计富文本显示 总结 引言 Compose Multiplatformkotlin Multiplatfrom 今天已经到compose v1.7.3&#xff0c;从界面UI框架上实战开发看&#xff0c;很多api都去掉实验性注解&#xff0c;表示稳定使用了&#xff01;…

[Java基础-线程篇]7_线程设计模式与总结

摘要&#xff1a;懒汉单例模式怎么变得线程安全&#xff1f;Master-Worker归并模式&#xff0c;工作窃取算法。Java线程相关源码使用了什么设计模式&#xff1f; 资料引用&#xff1a;《Java高并发核心编程卷2》 目录 线程安全的单例模式 Master-Worker模式 工作窃取算法 …

Kubermetes 部署mysql pod

步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml&#xff1a; apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…