使用腾讯云短信服务实现Spring Boot短信发送

news2024/12/23 2:34:21

发送短信

  • 01 注册微信公众号
  • 02 注册腾讯云账号
  • 03 创建签名和模板
    • 第一步 创建签名
    • 第二部 创建模板
  • 04 发送短信

01 注册微信公众号

在百度中寻找微信公众平台,并在进入官网后注册。在账号注册过程中,需选择订阅号(个人)。注册成功后,请保存账号详情的截图,以备后续腾讯云短信签名申请之用。

02 注册腾讯云账号

你可以按照以下步骤登录并注册腾讯云,并进行个人实名认证:

  1. 打开腾讯云官网(腾讯云官网 ),点击右上角的“注册”按钮。

  2. 在注册页面中,填写邮箱、密码要什么就填什么

  3. 点击“注册”按钮后,进入填写个人信息的页面。

  4. 填写完毕后,会进入腾讯云的控制台页面。在这里可以购买云产品、管理云服务等。

  5. 为了完成个人实名认证流程,需要先进行手机验证。在控制台页面左侧的菜单中选择“账号中心”,然后点击“安全设置”-“手机验证”进行验证。

  6. 接下来,在账号中心页面的实名认证栏目中点击“去认证”按钮。

  7. 选择个人认证方式,并填写真实姓名、身份证号码等信息。上传身份证正反面照片,然后点击“提交”按钮。

  8. 完成实名认证后,等待审核通过即可。

以上就是登录腾讯云并完成个人实名认证流程的所有步骤。

当你通过审核后,请打开 腾讯云短信服务 ,在该页面上,你会看到免费试用的选项。请点击进入。

在这里插入图片描述

03 创建签名和模板

第一步 创建签名

按要求填写即可

  • 签名内容:你的微信公众号名字+公众号。例如:xxx公众号。
  • 经办人:你自己。
  • 申请说明:填写你的公众号全名。

在这里插入图片描述

第二部 创建模板

  • 模板名称:没有特别的要求,可以自由填写
  • 短信类型:普通短信
  • 短信内容:标准模板或者自己编写
  • 申请说明:短信模板的场景

例如,申请的短信模板为:

亲爱的{1}小朋友,祝你童节快乐!愿你们拥有纯真的笑容和快乐的时光。希望你在成长的路上,始终保持好奇心和勇气,用积极的态度面对一切挑战。祝你健康快乐,未来可期!

申请说明内容可以为:

这个短信模板用于向儿童节受众发送祝福信息,以表达节日的祝福和推崇儿童在成长中保持快乐、积极、勇敢等正向品质的意向。该短信模板为发送对象为儿童节受众而准备

在这里插入图片描述

04 发送短信

以下是使用Spring Boot和腾讯云短信服务SDK实现发送短信的详细步骤

这里是我所使用的正文模板

在这里插入图片描述

  1. 在项目的 maven pom.xml 文件中,添加以下依赖:
<!--        # 版本在maven生效需要时间,如获取不到对应的版本,可以调低版本号-->
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java-sms</artifactId>
    <version>3.1.767</version>
</dependency>
  1. 在 Spring Boot 的 application.properties 或 application.yaml 中,添加腾讯云的 API 密钥和短信模板信息:
tencent:
  sms:
     # 腾讯云账户 secrtId,secretKey
    secretId: A*IDR1Vmob9*TKvlNjqhIdjZ9U**Np1yf8LJ
    keysecret: lHXX*n23pLb**tACzWnpb7NN7c*qZ2GF
    # 短信应用ID:短信SdkAppId在 【短信控制台】添加应用后生成实际的SdkAppId  
    smsSdkAppId: 1400800002
    # 短信签名内容:
    signName: 编程日记公众号
    # 模板ID:必须是已经审核通过的模板ID
    templateId: 1817797

在这里插入图片描述

3.编写工具类

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20190711.SmsClient;
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.Random;

@Component
public class MsmConstantUtils implements InitializingBean {

    /** 腾讯云账户密钥对secretKey(在访问管理中配置) */
    @Value("${tencent.sms.secretId}")
    private String secretID ;
    /** 腾讯云账户密钥对secretKey(在访问管理中配置) */
    @Value("${tencent.sms.keysecret}")
    private String secretKey ;
    @Value("${tencent.sms.smsSdkAppId}")
    private String smsSdkAppID ;
    @Value("${tencent.sms.signName}")
    private String signName ;
    @Value("${tencent.sms.templateId}")
    private String templateID ;

    public static String SECRET_ID;
    public static String SECRET_KEY;
    public static String SMSSDKAPP_ID;
    public static String SIGN_NAME;
    public static String TEMPLATE_ID;


    @Override
    public void afterPropertiesSet() throws Exception {
        SECRET_ID = secretID;
        SECRET_KEY = secretKey;
        SMSSDKAPP_ID = smsSdkAppID;
        SIGN_NAME = signName;
        TEMPLATE_ID = templateID;
    }


    /**
     * 发送6位数字验证码到手机
     * @param sixBitRandom 验证码
     * @param phone 手机号
     * @return
     */
    public static boolean sendPhone(String sixBitRandom, String phone) {
        //判断手机号是否为空
        if (StringUtils.isEmpty(phone)) {
            return false;
        }
        try{
            // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
            // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
            Credential cred = new Credential(MsmConstantUtils.SECRET_ID, MsmConstantUtils.SECRET_KEY);
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的  第二个参数是地域信息
            SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();

            //设置发送相关的参数
            String[] phoneNumberSet1 = {"86"+phone};
            req.setPhoneNumberSet(phoneNumberSet1);//发送的手机号
            //设置固定的参数
            req.setSmsSdkAppid(MsmConstantUtils.SMSSDKAPP_ID);// 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId
            req.setSign(MsmConstantUtils.SIGN_NAME);//短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
            req.setTemplateID(MsmConstantUtils.TEMPLATE_ID);//模板 ID: 必须填写已审核通过的模板 ID
            //发送的验证码
            String[] templateParamSet1 = {sixBitRandom};//模板的参数 第一个是验证码,第二个是过期时间
            req.setTemplateParamSet(templateParamSet1);//发送验证码

            //发送短信
            // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
            SendSmsResponse resp = client.SendSms(req);
            System.out.println("resp"+resp);
            // 输出json格式的字符串回包
            System.out.println(SendSmsResponse.toJsonString(resp));
            return true;
        } catch (TencentCloudSDKException e) {
            e.printStackTrace();
            return false;
        }
    }


    /**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */
    public static String generateValidateCode(int length){
        Integer code =null;
        if(length == 4){
            code = new Random().nextInt(9999);//生成随机数,最大为9999
            if(code < 1000){
                code = code + 1000;//保证随机数为4位数字
            }
        }else if(length == 6){
            code = new Random().nextInt(999999);//生成随机数,最大为999999
            if(code < 100000){
                code = code + 100000;//保证随机数为6位数字
            }
        }else{
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code.toString();
    }


}
  1. 在发送短信的控制器类中,使用 MsmConstantUtils类的sendPhone方法发送短信:
@RestController
@RequestMapping("/tencent")
public class tencentSmsController {


    @GetMapping("/test")
    public String test(String phone){
        boolean b = MsmConstantUtils.sendPhone(MsmConstantUtils.generateValidateCode(6), phone);
        return b ? "success":"fail";
    }

}

以上就是使用 Spring Boot 和腾讯云短信服务 SDK发送短信的详细步骤,希望对你有帮助!

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

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

相关文章

我的浙大MEM提前批面试全流程重点信息梳理

浙江大学MEM已上岸&#xff0c;目前在读&#xff0c;给大家分享下我的备考经验&#xff0c;希望可以帮助到大家。 在确定自己的目标院校后收集相关信息是非常重要的&#xff0c;比如今年计划招多少学生&#xff0c;往年上岸都需要多少分&#xff0c;学费等情况&#xff0c;招考…

Kyligence x 集简云|无代码集成数百款应用,轻松打造数据产品

一站式指标平台 Kyligence Zen 现已支持对接集简云平台&#xff0c;企业无需繁琐的开发工作&#xff0c;即可无代码集成数百款应用&#xff0c;打破数据孤岛、统一数据口径&#xff0c;帮助企业实现数据的协作和分享&#xff0c;轻松进行数据分析、构建数据产品&#xff0c;助力…

腾讯董志强出席全国信安标委“标准周”:数字化转型需要高安全等级架构

2023年5月29日至6月1日&#xff0c;全国信息安全标准化技术委员会&#xff08;以下简称“信安标委”&#xff09;2023年第一次“标准周”活动在云南昆明举行。此次活动聚集了全国顶级的网络安全标准专家、学者和业界领袖&#xff0c;共同探讨网络安全标准领域的前沿议题和最佳实…

c语言函数返回值的几种方式,入参方式回传数据

背景 在正常使用过程中&#xff0c;突然发现有用二级指针传递地址&#xff0c;我想没必要用二级指针&#xff0c;实际目的是函数入参的参数&#xff0c;也是函数出参的参数 #mermaid-svg-ylOpK9fmaLgdD9YO {font-family:"trebuchet ms",verdana,arial,sans-serif;fo…

火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器

618临近&#xff0c;各大电商APP的预热活动已然拉开序幕。对企业而言&#xff0c;一场活动从策划到上线&#xff0c;中间经过效果验证&#xff0c;其业务成本很高。一个好的活动创意从策划、开发、到最终发布&#xff0c;至少会经历几周实践&#xff0c;如果中间还经历A/B实验的…

三肽-33/Preventhelia(Diaminopropionoyl Tripeptide-33)

紫外线是一种电磁波&#xff0c;波长小于可见光&#xff0c;大部分地球表面的紫外线来自太阳&#xff0c;紫外线是伤害性光线的一种&#xff0c;经由皮肤吸收&#xff0c;会破坏DNA&#xff0c;使细胞会死亡或凋零从而产生皱纹、晒伤、等一系列不良反应。 作用机理---- Preven…

深入理解设计原则之依赖反转原则(DIP)

系列文章目录 C高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C并发线程编程 DIP&#xff1a;依赖反转原则 系列文章目录1、依赖反转原则的定义和解读2、稳定的抽象层3、依赖倒置原则和控制反转、依赖注入的联系小结 1、依赖反转原则的定义和解读 SOIL…

Linux零拷贝

零拷贝&#xff08;Zero-copy&#xff09;是一种优化技术&#xff0c;用于减少数据在内核空间和用户空间之间的拷贝次数&#xff0c;提高数据传输的效率和性能。它通过最小化数据的复制操作&#xff0c;将数据直接从源位置传输到目标位置&#xff0c;而不需要额外的数据拷贝。 …

微信小程序 构建npm报错: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,

构建npm时报错 几个解决方案&#xff1a; 1、没有初始化项目 可以看这篇博客&#xff1a;微信小程序构建npm&#xff08;js和ts 2、ts版本下记得修改删除project.config.json中setting字段下的一些内容 需要加或修改 "packNpmManually": true, "packNpmRe…

短视频矩阵系统软件源码---技术部署创建

矩阵系统源码主要有三种框架&#xff1a;Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架&#xff0c;提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框架&#xff0c;用于将数据模型、Web应用程序的用户界面和控制器逻…

实战助力未来|“饶派杯”XCTF车联网安全挑战赛圆满收官!

2023年5月31日&#xff0c;“饶派杯”XCTF车联网安全挑战赛于江西省上饶市圆满落幕。本次大赛由江西省委网信办、江西省工信厅、上饶市人民政府主办&#xff0c;旨在深入贯彻落实国家网络强国和交通强国战略部署&#xff0c;推动智能网联汽车技术与产业发展、加快该领域人才培养…

【Linux】基于环形队列的生产者消费者模型

文章目录 基于环形队列的生产消费模型生产者和消费者的关注点申请和释放资源的问题规则 RingQueue.hpp单生产者单消费者的生产者消费者模型:信号量保护环形队列的原理多生产者多消费者模型计算任务处理RingQueue.hppTask.hppRingQueue.cc 基于环形队列的生产消费模型 环形队列…

安装pytourch gpu并测试

输入nvidia-smi命令查看cuda版本号, 系统的CUDA版本决定了系统最高可以支持什么版本的cudatoolkit&#xff0c;它是向下兼容的, 可以装低版本但是不能装高版本。 更新下conda&#xff0c;用管理员打开cmd conda update -n base -c defaults conda 安装CUDATookit 使用以下命令…

8 指数族分布【手写+Xmind笔记】

文章目录 8 指数族分布【手写Xmind笔记】8.1 Xmind笔记8.2 手写证明 8 指数族分布【手写Xmind笔记】 8.1 Xmind笔记 8.2 手写证明

第十二篇、基于Arduino uno,获取多个按键的输入信号(滤波消抖)——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;当按下按键的时候&#xff0c;按一次会打印一次按键被按下&#xff0c;并且打印是哪个按键被按下。如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;虽然每个型号的按键形态各异&a…

Linux---用户的权限

专栏&#xff1a;Linux 个人主页&#xff1a;HaiFan. 本章为大家带来用户的权限的讲解 用户的权限 Linux权限的概念权限的三类对象权限的三种类型权限设置chmod/chown/chgrp更改权限chmodchownchgrp umask目录的权限粘滞位 Linux权限的概念 Linux下有两种用户&#xff1a;超级…

安科瑞应急照明的环境适用性

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要&#xff1a;论述消防应急照明和疏散指示系统在实际工程应用过程中系统产品选型、设置及维护环节普遍存在的问题&#xff0c;并提出相应的解决对策。 关键词&#xff1a;应急照明疏散指示产品选型环境适用性灯具…

机器学习笔记 - 使用稳定扩散模型创建图像

一、简述 文本到图像生成是机器学习 (ML) 模型从文本描述生成图像的任务。目标是生成与描述非常匹配的图像,捕捉文本的细节和细微差别。这项任务具有挑战性,因为它要求模型理解文本的语义和语法,并生成逼真的图像。文本到图像生成在 AI 摄影、概念艺术、建筑建筑、时尚、视…

用JMeter自动化测试实现高效稳定的接口测试方案!

目录 前言&#xff1a; 1. 接口与接口测试 1.1 接口概述 1.2 接口测试 2. 基于JMeter的接口测试 2.1 JMeter概述 2.2 用JMeter实现接口测试 3. 基于JMeter的接口自动化测试 3.1 接口自动化测试基础 3.2 使用JMeter进行接口自动化测试 总结 前言&#xff1a; 接口是…

(字符串) 541. 反转字符串 II——【Leetcode每日一题】

❓541. 反转字符串 II 难度&#xff1a;简单 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大…