JAVA 发送短信信息工具类(腾讯云)

news2024/11/16 14:13:48

发送短信信息工具类

在这里插入图片描述

import cn.hutool.core.collection.CollUtil;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import com.w.common.dto.MessageDTO;
import com.w.common.exception.WangyaoException;
import com.w.common.util.Json;
import jakarta.validation.constraints.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Locale;


@SuppressWarnings("ALL")
@Component
public class SendMessage2TencentUtil {

    private static final Logger log = LoggerFactory.getLogger(SendMessage2TencentUtil.class);

    @Value("${tencent.secretId}")
    private String secretId;

    @Value("${tencent.secretKey}")
    private String secretKey;

    @Value("${tencent.sms.sdkAppId}")
    private String sdkAppId;

    @Value("${tencent.sms.signName}")
    private String signName;

    /**
     * 根据模板Id发送短信
     *
     * @param templateId    模板ID
     * @param templateParam 模板参数
     * @param phoneNumber   电话
     */
    public boolean sendMsg(String templateId, String[] templateParam, String[] phoneNumber) {
        return sendMsg(signName, templateId, templateParam, phoneNumber);
    }

    /**
     * 根据签名内容、模板Id发送短信
     *
     * @param signName      签署名称
     * @param templateId    模板ID
     * @param templateParam 模板参数
     * @param phoneNumber   电话
     */
    public boolean sendMsg(String signName, String templateId, String[] templateParam, String[] phoneNumber) {
        return sendMsg(sdkAppId, signName, templateId, templateParam, phoneNumber);
    }

    /**
     * 根据应用Id、签名内容、模板Id发送短信
     *
     * @param sdkAppId      appID
     * @param signName      签署名称
     * @param templateId    模板ID
     * @param templateParam 模板参数
     * @param phoneNumber   电话
     * @return boolean
     */
    public boolean sendMsg(String sdkAppId, String signName, String templateId, String[] templateParam, @NotNull String[] phoneNumber) {

        if (StringUtils.isEmpty(sdkAppId)) {
            throw new WangyaoException("应用ID不能为空");
        }

        if (StringUtils.isEmpty(signName)) {
            throw new WangyaoException("签名内容不能为空");
        }

        if (StringUtils.isEmpty(templateId)) {
            throw new WangyaoException("模板ID不能为空");
        }

        if (phoneNumber == null || phoneNumber.length == 0) {
            throw new WangyaoException("电话号不能为空");
        }

        // 实例化一个认证对象
        Credential cred = new Credential(secretId, secretKey);

        // 实例化client对象
        SmsClient client = new SmsClient(cred, "ap-beijing");

        // 实例化一个请求对象
        SendSmsRequest req = new SendSmsRequest();

        // 短信应用ID
        req.setSmsSdkAppId(sdkAppId);

        // 短信签名内容
        req.setSignName(signName);

        // 模板 ID
        req.setTemplateId(templateId);

        // 模板参数
        req.setTemplateParamSet(templateParam);

        // 下发手机号码
        req.setPhoneNumberSet(phoneNumber);

        try {
            // 通过 client 对象调用 SendSms 方法发起请求
            SendSmsResponse res = client.SendSms(req);

            SendStatus[] sendStatusSet = res.getSendStatusSet();
            StringBuilder sb = new StringBuilder();

            for (SendStatus sendStatus : sendStatusSet) {
                if (!"OK".equals(sendStatus.getCode().toUpperCase(Locale.ROOT))) {
                    sb.append(Json.toJsonString(sendStatus));
                }
            }

            if (sb.length() > 0) {
                throw new WangyaoException(sb.toString());
            }

        } catch (TencentCloudSDKException e) {
            log.error("SendMessage2TencentUtil.sendMsg Failed. ", e);
            return false;
        }

        return true;

    }

    public void sendMsg(List<MessageDTO> list) {

        if (CollUtil.isNotEmpty(list)) {
            list.forEach(dto -> {
                try {
                    sendMsg(StringUtils.isEmpty(dto.getSdkAppId()) ? sdkAppId : dto.getSdkAppId(), StringUtils.isEmpty(dto.getSignName()) ? signName : dto.getSignName(), dto.getTemplateId(), dto.getTemplateParam(), dto.getPhoneNumber());
                } catch (Exception e) {
                    log.error("sendMsg: ", e);
                }
            });
        }

    }

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

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

相关文章

Maven:下载配置教学(2024版 最简)

文章目录 一、Maven下载1.1 下载官网1.2 下载压缩包1.3 解压1.4 创建repo文件夹 二、Maven配置2.1 环境变量2.1.1 新建系统变量2.1.2 添加Path 2.2 阿里云镜像2.3 JDK2.4 本地仓库2.5 conf文件的全部内容2.6 测试安装配置是否成功 三、IDEA中配置Maven3.1 新配置3.2 推荐配置 四…

ACE Studio的成功经验:从国内到全球的市场拓展

在AI技术飞速发展的今天&#xff0c;音乐创作也正经历着一场前所未有的变革。作为这一变革的前沿代表&#xff0c;ACE Studio无疑引起了广泛关注。本文将通过对时域科技创始人Joe与曲凯的对话&#xff0c;深入探讨ACE Studio的创新理念、市场定位、技术优势以及未来发展方向。 …

20240704 每日AI必读资讯

Runway Gen-3 Alpha 详细使用教程 - 以及提示词指南大全&#xff0c;包括摄像机风格、灯光效果、运动状态类型以及风格美学、文本风格等。 - Gen-3 Alpha是Runway推出的新—代视频生成模型&#xff0c;它在保真度、一致性、运动和速度方面都比以前的模型有所改进&#xff0c;…

HTML总结2

什么是HTML HTML&#xff08;Hypertext Markup Language&#xff09;&#xff0c;超文本标记语言&#xff0c;&#xff08;是一套标记标签&#xff0c;一般用来描述网页&#xff09;。 HTML标签 HTML标记标签&#xff0c;通常被称为HTML标签&#xff0c;或者HTML标记。 标签…

Qt篇——QLabel固定尺寸的情况下让字体大小自适应并自动换行以完整显示

当文字较少时&#xff0c;默认字体大小为16&#xff1b;当文字内容较多时&#xff0c;自动换行并缩小字体。 举例&#xff1a; 字体较少时 字体较多时 思路&#xff1a; 设置自动换行属性 setWordWrap&#xff1b;通过QFontMetrics计算文字字体要多大、显示多少行才不会超过…

是霍尼韦尔还是柏曼啊??书客、霍尼、柏曼三款护眼大路灯横向PK!

是霍尼韦尔还是柏曼啊&#xff1f;&#xff1f;近年来市面上的劣质护眼大路灯越来越多&#xff0c;很容易使我们选到劣质产品。为了解决这一问题&#xff0c;我自费购买了多个品牌的护眼大路灯进行测评。经过深入研究&#xff0c;我发现市面上确实存在一些光线不稳定、选材做工…

【postgresql初级使用】用户与角色的关系,搭建数据库安全体系中的分权管理

用户角色管理 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 用户角色管…

使用 Smart-doc 记录 Spring REST API

如果您正在使用 Spring Boot 开发 RESTful API&#xff0c;您希望让其他开发人员尽可能容易地理解和使用您的 API。文档是必不可少的&#xff0c;因为它为将来的更新提供了参考&#xff0c;并帮助其他开发人员与您的 API 集成。很长一段时间以来&#xff0c;记录 REST API 的方…

Toshiba东芝TB67S109AFNAG:步进电机控制的强大解决方案

与我司合作的工程师客户不断寻求稳健、高效且精确的元件来提升他们的产品设计。东芝的TB67S109AFNAG步进电机驱动IC具备这些优点&#xff0c;是从工业机械到消费电子等广泛应用的理想选择。本文将深入探讨TB67S109AFNAG的特性、优势和应用。 主要特性 TB67S109AFNAG是一款采用…

《人生苦短,我用python·七》各种报错问题解决及C++调用python的接口

1、VS的debug版本正常可以调用python的release版本&#xff08;python安装完只有release版本的dll和lib&#xff09;&#xff0c;在项目——附加依赖项中加入python39.lib然后编译debug版本报错&#xff0c;无法打开python39_d.lib&#xff0c;我在项目属性配置的是调用release…

少儿编程 2024年6月电子学会图形化编程等级考试Scratch一级真题解析(选择题)

2024年6月scratch编程等级考试一级真题 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、音乐Video Game1的时长将近8秒&#xff0c;点击一次角色&#xff0c;下列哪个程序不能完整地播放音乐两次 A、 B、 C、 D、 答案&#xff1a;D 考…

Redis基础教程(十一):Redis 发布订阅

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【FFmpeg】avcodec_open2函数

目录 1. avcodec_open21.1 编解码器的预初始化&#xff08;ff_encode_preinit & ff_decode_preinit&#xff09;1.2 编解码器的初始化&#xff08;init&#xff09;1.3 释放编解码器&#xff08;ff_codec_close&#xff09; FFmpeg相关记录&#xff1a; 示例工程&#xff…

vue H5页面video 视频流自动播放, 解决ios不能自动播放问题

视频组件 <videostyle"width: 100%; height: 100%;object-fit: fill"class"player"refplayer_big_boxcontrolspreloadautoplay //自动播放muted //是否静音playsinline"true"x5-playsinline""webkit-playsinline"tru…

麒麟服务器操作系统漏洞补丁包怎么快速下载

第一种方案:【建议方案】 1、将漏洞公告里的“受影响的软件包”全部复制出来到文本文件中 2、在对应版本的服务器系统中修改好repo文件,如果在x86系统中下载aarch64的补丁包,可以将repo中的$basearch替换为aarch64. [root@localhost ~]# vim package.txt #将第一步的软件…

澳大利亚新闻.科技.汽车.旅行.商业类单发媒体

每日简报Daily Bulletin 澳大利亚西部时间ModernAustralian.com 澳大利亚垂直新闻.科技.汽车.旅行.商业类媒体&#xff0c;ModernAustralian.com是澳大利亚西部地区的一家权威媒体平台&#xff0c;提供全面的新闻报道、科技资讯、汽车信息、旅行指南、商业动态等内容。每日简报…

横截面数据回归

横截面数据回归 一些笔记 观测值一定要比参数值多 p值<0.05,拒绝H0. 参数显著&#xff0c;不能说明模型对 AIC与BIC准则&#xff0c;越小越好的指标值AIC 回归分析一定要进行残差的正态性检验。所有的残差都大于0&#xff0c;小于0&#xff0c;都不正常。残差正常应该是分…

p2p、分布式,区块链笔记:试用ZeroTier组网

ZeroTier 是一种用于创建和管理虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09;的软件定义网络&#xff08;SDN&#xff09;解决方案。它可以通过互联网将多个设备安全地连接在一起&#xff0c;就像它们在同一个本地网络上一样。主要开发语言为…

rust + mingw安装教程

0. 说明 windows上安装rust时&#xff0c;需要在电脑上安装C/C构建工具。推荐的的两种工具链可以选择&#xff1a; visual studio build toolsmingw 官方推荐使用visual studio&#xff0c;若你的电脑上已经安装了visual studio&#xff0c;则无需再安装&#xff0c;直接安装…

GPT Prompt冠军调教技巧CO-STAR

新加坡政府科技局 (GovTech) 举办的首届 GPT-4 提示工程大赛冠军Sheila Teo分享了她的一些提示撰写技巧及案例分析。 使用 CO-STAR 框架撰写Prompt CO-STAR是结构化的Prompt模版六大要素的首字母缩写&#xff0c;即&#xff1a; © Context 上下文&#xff1a;为任务提供背…