本文使用SpringBoot 框架,针对腾讯云发送短信方法做了一定程度的封装。

准备工作

参考:

腾讯云发送短信验证码服务—csdn

1. 首先需要开通腾讯云的短信服务

首次开通会赠送100条短信的免费额度,用于个人的测试完全够了

2. 申请签名和模板

​ 由【控制台】进入短信的管理界面,选择【快速入门】,平台将会引导创建签名和短信模板(图中已经创建完成且审核通过)

注意:创建的签文和模板都属于国内短信

创建签名

​ 如果选择签名类型为网站则必须要有一个已经备案的域名

注意:

  • 假设网站备案名称为【腾讯云】,那么签名内容需要变为【腾讯云个人网】,否者审核不会通过

  • 证明材料必须要上传网站备案的后台截图,如果是ICP备案查询的截图无法通过审核

  • 申请说明中填写自己的备案域名即可

​ 如果没有备案域名也可以申请一个个人公众号,然后再选择【签名类型】为公众号创建一个签名。

创建模板

​ 模板的审核比签名更简单,只需要符合规范即可,不需要证明材料,直接使用标准模板审核成功率更高。

最后等待审核通过。

代码编写

参考:

腾讯云短信服务Java SDK

​ 具体使用请参考官方文档。本文使用 SpringBoot 开发,对官方文档中发送短信的方法做了一定程度的封装。

​ 本文使用的短信模板为:

您正在申请手机注册,验证码为:{1},{2}分钟内有效!

参数提取

​ 首先将腾讯云短信服务的一些相关参数提取出来,作为一个配置类,从配置类中读取相关参数

/*** 腾讯短信业务配置类(sms)** 注意:@Component 和 @ConfigurationProperties(prefix = "tencent.sms") 需要同时使用* @version 1.0* @date 2021/12/30 18:32*/
@Data // lombok 省略get/set方法
@Component
@ConfigurationProperties(prefix = "tencent.sms")  // 读取配置文件中tencent.sms 为前缀的配置信息
public class TencentSmsProperties {/** 腾讯云账户密钥对secretId */private String secretId;/** 腾讯云账户密钥对secretKey */private String secretKey;/** 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId(位于[应用管理]中的[应用列表]),示例: 1400006666 (1400开头)*/private String sdkAppId;/** 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */private String signName;/** 模板 ID 哈希表: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看*  key: 模板名称(自定义);value: 模板 ID(腾讯云已通过模板)* */private Map<String, String> templateIdMap;/** 国际/港澳台短信 SenderId: 国内短信填空,默认未开通(国内短信不需要填写此项),如需开通请联系 [sms helper] */String senderid = "";/**短信号码扩展号: 默认未开通,如需开通请联系 [sms helper]   个人不需要填写*/private String extendCode = "";}

配置文件 application.yml

# 腾讯云短信服务
tencent:sms:secret-id: "AKIXXXXXoCQO5VeW7RVJp42kBKCn7AwXXXXX"secret-key: "A3kAXXXXXvRgtqWv3uUnoY1EBsIXXXXX"sdk-app-id: 1400611234sign-name: "网站名称个人网"# 模板ID映射,key任意设置,value为审核通过模板IDtemplate-id-map:register: "1260123"forget: "1260258"# 以下两项非必填
#    senderid: ""
#    extend-code: ""

​ SpringBoot 将会自动把以上配置信息注入TencentSmsProperties类中,可以通过自动注入注解获取

编写Service层

@Service
public class MsmServiceImpl implements MsmService {public static final int REGISTER_CODE_VALID_TIME = 5;@ResourceTencentSmsProperties smsProperties;@Autowiredprivate RedisTemplate<String, String> redisTemplate;/*** 检查验证码是否已经存在* @param phoneNum: 手机号* @return boolean* @date 2021/12/31 12:39*/@Overridepublic boolean checkVerCodeIsExist(String phoneNum) {String verCode = redisTemplate.opsForValue().get(phoneNum);return !StringUtils.isEmpty(verCode);}@Overridepublic boolean sendVerCodeToPhone(String phoneNum,String sessionContext,String templateId,String[] templateParamSet) {try {/* 必要步骤:* 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,* 以免泄露密钥对危及你的财产安全。* CAM密匙查询: https://console.cloud.tencent.com/cam/capi*/Credential cred = new Credential(smsProperties.getSecretId(),smsProperties.getSecretKey());// 实例化一个http选项,可选,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();// 设置代理// httpProfile.setProxyHost("真实代理ip");// httpProfile.setProxyPort(真实代理端口);/* SDK默认使用POST方法。* 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */httpProfile.setReqMethod("POST");/* SDK有默认的超时时间,非必要请不要进行调整* 如有需要请在代码中查阅以获取最新的默认值 */httpProfile.setConnTimeout(60);/* SDK会自动指定域名。通常是不需要特地指定域名的,但是如果你访问的是金融区的服务* 则必须手动指定域名,例如sms的上海金融区域名: sms.ap-shanghai-fsi.tencentcloudapi.com */httpProfile.setEndpoint("sms.tencentcloudapi.com");/* 非必要步骤:* 实例化一个客户端配置对象,可以指定超时时间等配置 */ClientProfile clientProfile = new ClientProfile();/* SDK默认用TC3-HMAC-SHA256进行签名* 非必要请不要修改这个字段 */clientProfile.setSignMethod("HmacSHA256");clientProfile.setHttpProfile(httpProfile);/* 实例化要请求产品(以sms为例)的client对象* 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量 */SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile);/* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数* 你可以直接查询SDK源码确定接口有哪些属性可以设置* 属性可能是基本类型,也可能引用了另一个数据结构* 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */SendSmsRequest req = new SendSmsRequest();/* 填充请求参数,这里request对象的成员变量即对应接口的入参* 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义* 基本类型的设置:* sms helper: https://cloud.tencent.com/document/product/382/3773 *//* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */String sdkAppId = smsProperties.getSdkAppId();req.setSmsSdkAppId(sdkAppId);/* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */String signName = smsProperties.getSignName();req.setSignName(signName);/* 国际/港澳台短信 SenderId: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */String senderid = smsProperties.getSenderid();req.setSenderId(senderid);/* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
//            String sessionContext = "xxx";req.setSessionContext(sessionContext);/* 短信号码扩展号: 默认未开通,如需开通请联系 [sms helper] */String extendCode = smsProperties.getExtendCode();req.setExtendCode(extendCode);/* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */// String templateId = smsProperties.getTemplateIdMap().get("register");req.setTemplateId(templateId);/* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]* 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */String[] phoneNumberSet = {phoneNum};req.setPhoneNumberSet(phoneNumberSet);/* 模板参数: 若无模板参数,则设置为空 */// String[] templateParamSet = {"5678", "5"};req.setTemplateParamSet(templateParamSet);/* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的* 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */SendSmsResponse res = client.SendSms(req);// 输出json格式的字符串回包// System.out.println(SendSmsResponse.toJsonString(res));// 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义// System.out.println(res.getRequestId());} catch (TencentCloudSDKException e) {e.printStackTrace();return false;}return true;}/*** 发送注册验证码controller 层可以调用此方法,对于手机号的格式校验,* @param phoneNum: 手机号* @return boolean* @date 2021/12/31 12:39*/@Overridepublic boolean sendRegisterVerCode(String phoneNum) {// 格式校验...  ;  防止短信验证码接口被恶意调用攻击...// 使用 hutool 工具包生成6位随机数String verCode = RandomUtil.randomNumbers(6);String[] templateParamSet = new String[]{verCode, REGISTER_CODE_VALID_TIME + ""};// 将验证码缓存至redis中并设置过期时间redisTemplate.opsForValue().set(phoneNum, verCode, REGISTER_CODE_VALID_TIME, TimeUnit.MINUTES);return sendVerCodeToPhone(phoneNum,"userId",smsProperties.getTemplateIdMap().get("register"),templateParamSet);}
}

以上代码中使用了redis缓存验证码,可以更具项目需求进行更换。控制层代码根据项目需求完成即可,这里不贴代码。

注意:如果项目有上线需求一定要做好对于短信验证码接口被恶意调用的防范措施 ===> 参考

SpringBoot调用腾讯云短信服务相关推荐

  1. 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题

    使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 参考文章: (1)使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 (2)https://www.cnblog ...

  2. 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

    文章目录 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现) 1.打开腾讯云短信服务 2.创建短信签名 3.创建短信正文模板 4.等待全部审核完毕即可 5.发送短信 ...

  3. SpringBoot工程接入腾讯云短信服务平台

    由于业务需要,需要使用第三方短信平台,进行验证码的发送.网上的短信服务平台主要由:百度.腾讯.阿里云:采用官方提供的SDK,调用接口即可. 腾讯云短信服务平台和阿里云短信服务平台,一般步骤为:注册-- ...

  4. 基于SpringBoot+腾讯云短信服务实现接收手机验证码功能

    在腾讯云中配置需要的服务 申请签名和短信模板 创建应用 在项目application.yml中配置相关参数 在项目中安装腾讯云短信服务的依赖包 <!--腾讯云--><dependen ...

  5. Springboot+Redis接入腾讯云短信服务实现验证码发送

    目录 一.开通腾讯云短信服务 二.代码实现 三.测试 申请阿里云短信服务需要以上线APP或已备案网站,腾讯云短信服务可以使用微信公众号申请,注册个人微信公众号比较方便,改用腾讯云短信服务,参考官方SD ...

  6. 腾讯云短信服务发送验证码

    腾讯云短信服务发送验证码 1.前言 2.进入短信服务控制台 3.创建签名 4.创建模板 5.短信-应用管理-应用列表 6.创建密钥 7.SpringBoot实现短信验证码发送 7.1 引入依赖 7.2 ...

  7. 接入腾讯云短信服务(史上最详细+该短信服务如何申请成功+发送短信验证码API讲解+相关错误分析)

    2021/8/17/23:01{2021/8/17/23:01}2021/8/17/23:01 文章目录 前言 一.如何成功申请到腾讯云短信服务 1.签名申请 2.正文模板申请 二.发送短信API开发 ...

  8. SpringBoot集成腾讯云短信实现注册/登录功能

    前言 笔记参考 Duktig丶 JavaSDK地址:短信 Java SDK - SDK 文档 - 文档中心 - 腾讯云 1.导入依赖 <dependency><groupId> ...

  9. Python使用腾讯云-短信服务发送手机短信

    原创不易,欢迎关注我的微信公众号:司马弈 获取更多精选内容. 腾讯云短信服务介绍 目前[腾讯云短信]为客户提供[国内短信].[国内语音]和[海外短信]三大服务,腾讯云短信SDK支持以下操作: 国内短信 ...

  10. 项目接入腾讯云短信服务SMS实现向用户发送手机验证码

    1.自述 早在18年的时候,我就在项目中使用过阿里云的短信服务,现在我上阿里云短信控制台看,还能看到当时创建的短信签名,如下图所示. 出于某种原因,我现在想重新申请一个新的签名,却审批失败了,原因是: ...

最新文章

  1. C#中的Dictionary简介
  2. oracle 关系 表 视图_oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系
  3. Objective-C的算术表达式
  4. Internet Explorer 8的新特性和自定义部署
  5. 我的博客文章快速索引
  6. Mac重装系统(1)系统U盘制作
  7. Springboot毕设项目基于SpringBoot的个人理财系统ibx9hjava+VUE+Mybatis+Maven+Mysql+sprnig)
  8. 07-11-Exchange Server 2019-配置-Outlook 2019-IMAP4
  9. matlab制作扇形统计图及颜色调配
  10. mysql建表测试_测试必备mysql技能2:mysql建表
  11. R语言基础指令和并行算法初识(上篇)
  12. R语言与数据分析—上(篇幅长,全)
  13. 在linux系统下忘记了root密码,在linux系统下,忘记了root密码,可以到()模式下修改找回root密码()...
  14. ps2键盘测试软件,PS2键盘51测试程序2
  15. 16届智能车竞赛单车拉力国二经验分享
  16. 【微信抢红包】红包助手-修改版
  17. Python Appium移动端app自动化测试框架
  18. 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第6章 集合
  19. export_fig是保存图片更加清晰
  20. SpringMVC数据绑定全面示例

热门文章

  1. 重装服务器系统鼠标键盘用不了,win7重装系统后鼠标键盘不能用怎么办
  2. 【Linux】进程间通信之消息队列
  3. linux中硬链接可以跨分区呀,linux中硬链接与软链接
  4. HPSocket 三种模型PACK,PUSH,PULL
  5. IntelliJ IDEA常用插件及其安装
  6. java面试 bs cs_面试题思考:BS与CS的区别与联系
  7. 合并两个有序链表-c语言
  8. [MDK]MDK通杀版注册机(更新最新的注册机,支持5.15, 5.16, 5.17,5.18,5.20,5.21, 5.22,5.23,5.24)
  9. c51步进电机程序汇编语言,51单片机驱动步进电机(汇编语言)
  10. “属你最牛” | 树莓派百变打印机