springboot如何去集成腾讯云的短信服务

2023-11-03

1、先去申请一个微信公众号,通过微信公众号,以个人的名义去申请腾讯短信服务。

2、 填写你注册公众号要注册成啥类型的,如果是自己玩或者自己测试的话我推荐大家呢去注册这个订阅号他这个呢比较好注册,然后去填写自己的相关的信息。

3注册成功了,就会生成这个界面

4、然后我们去设置公众号的设置里面去把他的那个隐私设置给打开

5、 去腾讯云的短信服务哪里去免费注册一个(默认呢腾讯云是送的客户100条的免费的短信发送个数)。 

6、然后单击,免费试用,进去了以后呢他左侧的选项栏里面呢有一个这个快速入门,点击创建自己的签名以及自己的短信模板去申请去给腾讯工作人员去申请。

7、 点击概括这个里面有人家官方给你写好的ipA文档

 8、导入腾讯云的依赖

    <!--腾讯云-->
        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-sdk-java</artifactId>
            <version>3.1.270</version><!-- 注:这里只是示例版本号(可直接使用),可获取并替换为 最新的版本号,注意不要使用4.0.x版本(非最新版本) -->
        </dependency>
     <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>

 

9 、编写java代码,这里呢我是自己封装了一个工具包。

package com.baidu.util;

import com.alibaba.fastjson.JSONObject;
import com.baidu.config.configuration;
import com.baidu.entity.Request;
import com.baidu.entity.SendStatusSet;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
//导入可选配置类
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
// 导入对应SMS模块的client
import com.tencentcloudapi.sms.v20210111.SmsClient;
// 导入要请求接口对应的request response类
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;

import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.regex.Pattern;

import static com.baidu.config.configuration.sdkAppId;
import static com.baidu.config.configuration.signName;

public class SendSmsUtil {
    //腾讯短信验证
    /***
     * 参数设置 phon 手机号 sixBitRandom验证码*/
public static Boolean sendsms(String phone,String sixBitRandom) throws TencentCloudSDKException {
    /* 必要步骤:
     * 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
     * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
     * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
     * 以免泄露密钥对危及你的财产安全。
     * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
    Credential cred = new Credential(configuration.secretId, configuration.secretKey);
    // 实例化一个http选项,可选,没有特殊需求可以跳过
    HttpProfile httpProfile = new HttpProfile();
    // 设置代理(无需要直接忽略)
    // httpProfile.setProxyHost("真实代理ip");
    // httpProfile.setProxyPort(真实代理端口);
    /* SDK默认使用POST方法。
     * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
    httpProfile.setReqMethod(configuration.request);
    /* SDK有默认的超时时间,非必要请不要进行调整
     * 如有需要请在代码中查阅以获取最新的默认值 */
    httpProfile.setConnTimeout(60);
    /* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */
    httpProfile.setEndpoint(configuration.territory);
    /* 非必要步骤:
     * 实例化一个客户端配置对象,可以指定超时时间等配置 */
    ClientProfile clientProfile = new ClientProfile();
    /* SDK默认用TC3-HMAC-SHA256进行签名
     * 非必要请不要修改这个字段 */
    clientProfile.setSignMethod("HmacSHA256");
    clientProfile.setHttpProfile(httpProfile);
    /* 实例化要请求产品(以sms为例)的client对象
     * 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
    SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
    /* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
     * 你可以直接查询SDK源码确定接口有哪些属性可以设置
     * 属性可能是基本类型,也可能引用了另一个数据结构
     * 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
    SendSmsRequest req = new SendSmsRequest();
    /* 填充请求参数,这里request对象的成员变量即对应接口的入参
     * 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
     * 基本类型的设置:
     * 帮助链接:
     * 短信控制台: https://console.cloud.tencent.com/smsv2
     * 腾讯云短信小助手: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */
    /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
    req.setSmsSdkAppId(sdkAppId);
    req.setSignName(signName);
    req.setTemplateId(configuration.templateId);
    /* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
    String[] templateParamSet = {sixBitRandom};
    req.setTemplateParamSet(templateParamSet);
    /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
     * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */
    /* String[] phoneNumberSet = {"+8621212313123", "+8612345678902", "+8612345678903"};*/
    final StringBuilder builder = new StringBuilder();
    builder.append("+86");
    builder.append(phone);
    String[] phoneNumberSet = {builder.toString()};
    req.setPhoneNumberSet(phoneNumberSet);
    /* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
    String sessionContext = "";
    req.setSessionContext(sessionContext);
    /* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
    String extendCode = "";
    req.setExtendCode(extendCode);

    /*  *//* 国际/港澳台短信 SenderId(无需要可忽略): 国内短信填空,默认未开通,如需开通请联系 [腾讯云短信小助手] *//*
            String senderid = "";
            req.setSenderId(senderid);*/

    /* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
     * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
    SendSmsResponse res = client.SendSms(req);
    // 输出json格式的字符串回包
    /*  System.out.println(SendSmsResponse.toJsonString(res));*/
    final String s = SendSmsResponse.toJsonString(res);
    final JSONObject object = JSONObject.parseObject(s);
    final Request request = JSONObject.toJavaObject(object, Request.class);
    final List<SendStatusSet> sendStatusSet = request.getSendStatusSet();
    String code=null;
    for (SendStatusSet statusSet : sendStatusSet) {
        statusSet.setPhoneNumber("*****");
       code=statusSet.getCode();
    }
    if (code.equals("Ok")){
        return true;
    }else {
        return false;
    }
    // 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
    // System.out.println(res.getRequestId());
    /* 当出现以下错误码时,快速解决方案参考
     * [FailedOperation.SignatureIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.signatureincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
     * [FailedOperation.TemplateIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.templateincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
     * [UnauthorizedOperation.SmsSdkAppIdVerifyFail](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunauthorizedoperation.smssdkappidverifyfail-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
     * [UnsupportedOperation.ContainDomesticAndInternationalPhoneNumber](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunsupportedoperation.containdomesticandinternationalphonenumber-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
     * 更多错误,可咨询[腾讯云助手](https://tccc.qcloud.com/web/im/index.html#/chat?webAppId=8fa15978f85cb41f7e2ea36920cb3ae1&title=Sms)
     */
}
    /**
     * 验证手机号 由于号码段不断的更新,只需要判断手机号有11位,并且全是数字以及1开头
     * @param phoneNumber 手机号码
     * @return
     */
    private static boolean matchPhoneNumber(String phoneNumber) {
        String regex = "^1\\d{10}$";
        if(phoneNumber==null||phoneNumber.length()<=0){
            return false;
        }
        return Pattern.matches(regex, phoneNumber);
    }
    //验证
    public static void main(String[] args) throws TencentCloudSDKException {
        final String sixBitRandom = RandomUtil.getSixBitRandom();
        String phone="139352099";
        final boolean b = SendSmsUtil.matchPhoneNumber(phone);
        if (b){
            if(SendSmsUtil.sendsms(phone, sixBitRandom)){
                System.out.println("发送成功");
            }else {
                System.out.println("发送失败");
            }
        }else {
            System.out.println("请从新输入手机号");
        }
    }

}

10 、我这里呢我是把我的这个公共的配置属性都提取出来了,或者呢大家呢也可以把这个配置属性呢放到我们的这个application.properties里面已value(“${xx}”)的这个方式呢去取值,这里的secretID 跟sercretKey呢可以去腾讯去设置登录 - 腾讯云

package com.baidu.config;

public interface configuration {
    //id
    String secretId="*****";
    //key
    String secretKey="*****";
    //请求方式
    String request="POST";
    //地域
    String territory="sms.tencentcloudapi.com";
    // 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
    String sdkAppId="1400670952";
    /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
    // 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
    String signName = "****";
    /* 模板 ID: 必须填写已审核通过的模板 ID */
    // 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
    String templateId = "****";

}

 

 11、 生成随机数并测试(我这里呢生成的是6位的随机验证码)

public class RandomUtil {
//生成随机验证码
    private static final Random random = new Random();
    //我定义的验证码位数是6位
    private static final DecimalFormat sixdf = new DecimalFormat("000000");

    public static String getSixBitRandom() {
        return sixdf.format(random.nextInt(1000000));
    }
//校验手机号格式 因为呢手机号格式比较多然后我们这里呢采用的是这个手机号位数的校验
 private static boolean matchPhoneNumber(String phoneNumber) {
        String regex = "^1\\d{10}$";
        if(phoneNumber==null||phoneNumber.length()<=0){
            return false;
        }
//判断正则表达式与我输入的值的长度是否相同
        return Pattern.matches(regex, phoneNumber);
    }
}

12、 编写实体类接收返回的json格式参数

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Request {
    //请求id
    private String RequestId;
    //发送状态集
    private List<SendStatusSet> SendStatusSet;
}
package com.baidu.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
//发送状态集
public class SendStatusSet {
    //序列号
    private String SerialNo;
    //电话号码
    private String PhoneNumber;
    //费用
    private Integer  Fee;
    //上下文
    private String SessionContext;
    //标识
    private String Code;
    //消息
    private String Message;
    //异码
    private String IsoCode;
}

 

 13 、调用方法完成测试

  //验证
    public static void main(String[] args) throws TencentCloudSDKException {
        final String sixBitRandom = RandomUtil.getSixBitRandom();
        String phone="139352099";
        final boolean b = RandomUtil.matchPhoneNumber(phone);
        if (b){
            if(SendSmsUtil.sendsms(phone, sixBitRandom)){
                System.out.println("发送成功");
            }else {
                System.out.println("发送失败");
            }
        }else {
            System.out.println("手机号格式不对请从新输入手机号");
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot如何去集成腾讯云的短信服务 的相关文章

随机推荐

  • CSS相关问题

    目录 第三方组件样式修改不生效问题 方法一 非scoped 方法二 deep 深度修改 方法三 lt lt lt 深作用选择器 第三方组件样式修改不生效问题 问题背景 由于el select组件下拉选项被弹窗遮挡 需要修改el select
  • iOS cell.accessoryType在黑暗模式下的显示问题

    iOS UITableViewCell 提供了 accessoryType 属性用来设置 cell 右侧图标 在黑暗模式下使用 发现按钮的颜色比较暗 cell accessoryType UITableViewCellAccessoryDi
  • 卷积神经网络(三)

    六 三维卷积 在经历了二维灰度图的卷积操作之后 如何进行三维卷积 RGB图像 呢 我们一起来看下 首先我们还是给出一个6 6的图像 不过因为有RGB三个通道 所以图像变成了6 6 3 同样的 在二维灰度图中3 3的卷积核也要相应的更改为3
  • 智能家居项目总结以及学习总结

    学习总结 是一段艰辛的路程 是一段值得回忆的经历 一切都是为了秋招 为了将来有更好的生活 为了能够成为一名嵌入式工程师 从熟悉的C语言 半吊子的数据结构和简单算法 linux下的IO操作 进线程编写 socket套接字的应用 QT和C 的学
  • Java+Selenium实现网页截图

    概述 使用Java语言 实现网页截图 本文仅考虑Selenium方案 如果对其他方案感兴趣 可参考Java实现HTML页面截图功能 实现 大名鼎鼎的自动化测试工具 引入最新稳定版依赖
  • mysql计算时间差-本例为计算分钟差然后/60计算小时保留一位小数,由于直接得小时只会取整...

    ORDER TIME datetime NOT NULL 字段类型 SELECTso ID so ORDER TIME NOW CONCAT ROUND TIMESTAMPDIFF MINUTE so ORDER TIME NOW 60 1
  • C++全特化与偏特化

    全特化 全特化一般用于处理有特殊要求的类或者函数 此时的泛型模板无法处理这种情况 include
  • modbus之crc16计算代码

    这边提供两种方式 第1种是查表法方式 速度会快一点 但是需要多占用一些空间 第二种是纯计算方式 速度相对第一种会慢一点 但是比较省空间 代码如下 static const uint16 t crc table 0X0000 0XC0C1 0
  • MFC VS2012对话框背景填图

    这是使用VS 2012编写MFC对话框程序的教程 主要是关于图片处理方面的操作 这些在MFC游戏 图片处理 软件编写中是经常要用到的知识 一 创建项目 文件 新建项目 MFC应用程序 该页面使用 基于对话框 完成即可 注意 取消 使用Uni
  • JMS 规范简介

    本文转载至 深入浅出JMS 一 JMS基本概念 上篇文章ActiveMQ简单介绍以及安装 我们介绍了开源的JMS具体实现 ActiveMQ 这篇博文我们主要介绍MS的基本概念和它的模式 消息的消费以及JMS编程步骤 基本概念 JMS是jav
  • 人脸检测算法:mtcnn简介

    人脸检测算法 MTCNN简介 算法流程 网络介绍 训练方法 MTCNN是一个针对于人脸检测的模型 由PNet RNet 和ONet三个网络组成 三个网络都比较轻量 易于训练 基于pytorch的实现可以看我这篇 链接 l利用celebA数据
  • 【Java基础】有一对兔子,从出生后的第3个月开始,每个月生一对兔子;小兔子同样长到第三个月后,每个月生一对兔子;假如兔子都不死,问第二十个月有多少对兔子?

    public class Demo public static void main String args 问题描述 有一对兔子 从出生后的第3个月开始 每个月生一对兔子 小兔子同样长到第三个月后 每个月生一对兔子 假如兔子都不死 问第二十
  • Mysql日期差函数,Mysql选择两个日期字段相差大于或小于一定时间

    SELECT from table where TIMESTAMPDIFF type pretime latertime gt 100 TIMESTAMPDIFF函数 需要三个参数 type是比较的类型 可以比较FRAC SECOND SE
  • 运算放大电路的基础(秒懂)

    运算放大器 下文简称运放 理想的运放 它的输入阻抗无穷大 输出阻抗为零 理想的运放电路分析有两大重要原则贯穿始终 即 虚短 与 虚断 虚短 的意思是正端和负端接近短路 即V V 看起来像 短路 虚断 的意思是流入正端及负端的电流接近于零 即
  • 【C语言】输入一个N阶矩阵,将其转置后输出。利用指针

    解题思路 将接收到的矩阵存入一个3 3的数组 编写一个函数 从主函数传来一个指向该数组的指针 利用多维数组指针运用规律 实现数组的转置 最后输出转置后的数组 矩阵转置上一篇有讲 C语言 N 阶矩阵的转置 魚肉的博客 CSDN博客 c语言n阶
  • word分页保存_Word邮件合并功能详解:合并后生成多个word文档,删除空白页

    最近在实习 干了很多打杂的工作 所以office软件用的很多很多 瞬间觉得自己可以去裸考计算机二级了哈哈哈哈哈哈 今天因为工作用到了邮件合并这个功能 但又比我之前所学的更深一些 所以我来写下这一篇详解 一 预期达到效果 这是一个信函模板 我
  • MQ是什么

    目录 MQ是什么 MQ是什么 MQ全称为Message Queue 也就是消息队列 是应用程序和应用程序之间的通信方法 在微服务盛行的当下 MQ被使用的也是越来越多 一般常用来进行 业务异步解耦 解耦微服务 流量削峰填谷 消息分发 分布式事
  • 【Shell牛客刷题系列】SHELL1 统计文件的行数:学习wc命令和文本三剑客awk、grep、sed命令

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习用于统计文件的字节数 单词数 行数等信息的
  • openwrt网络配置

    openwrt网络配置 1 OpenWrt命令行配置固定IP地址 1 OpenWrt命令行配置固定IP地址 输入命令查看现有的网络接口配置信息 uci show network 接口名称通常为lan 使用以下命令配置网络 uci set n
  • springboot如何去集成腾讯云的短信服务

    1 先去申请一个微信公众号 通过微信公众号 以个人的名义去申请腾讯短信服务 2 填写你注册公众号要注册成啥类型的 如果是自己玩或者自己测试的话我推荐大家呢去注册这个订阅号他这个呢比较好注册 然后去填写自己的相关的信息 3注册成功了 就会生成