花了 44 块钱,实现 Java 发送短信功能

news2024/11/15 19:25:20

个人项目:社交支付项目(小老板)

作者:三哥(https://j3cod3.cn)

本篇为从 0 到 1 的一个,用 Java 对接腾讯短信发送功能的一篇流程文章。而标题中的 44 大洋则是用来购买短信套餐,当然如果你是首次使用腾讯云平台则可以享受【免费使用】这一功能(我是老用户)。

那,废话不多说,我们往下看对接步骤。

1、短信套餐

我们先来购买以下短信套餐,这里选择腾讯云,地址:

https://cloud.tencent.com/act/cps/redirect?redirect=2496&cps_key=85dced045eb1cad8a10f2c9f393eb308&from=console

当然,套餐我们有两种选择方式:

  1. 免费试用
  2. 购买

1)先来看看,免费试用

  • 在这里插入图片描述

    点击云通信中的短信服务

    在这里插入图片描述

2)再来看,购买套餐

  • 地址:https://cloud.tencent.com/act/pro/618season?cps_key=85dced045eb1cad8a10f2c9f393eb308&fromSource=gwzcw.6731510.6731510.6731510&utm_id=gwzcw.6731510.6731510.6731510&utm_medium=cps&page=seckill_season

    在这里插入图片描述

3)如果购买了或者有试用套餐,这里会显示你的套餐信息

在这里插入图片描述

我这里是用了 44 块钱购买了一个套餐,但是它附赠了 100 条短信,所以我一共有 1100 条短信发送的资格。

2、短信配置

短信配置主要分三部分:

  1. 签名
  2. 模板
  3. 应用

进入短信控制台,先完成如下部分的内容填写:

在这里插入图片描述

注意:这里选择的类型是个人网站,所以必须要有已备案的域名信息

填写信息这里就不截图了,如果你有已经备案的域名,那么就按照人家给的步骤一次填写就行。至于短信模板就是你要发给用户的一段中文内容,当然里面也可以预留占位符,灵活改变内容。

如果信息填写成功,并审核通过之后会回显如下内容:

在这里插入图片描述

接着就要开始创建应用了:

在这里插入图片描述

3、创建你的云 API 密钥

地址:https://console.cloud.tencent.com/cam/capi

在这里插入图片描述

ok,此刻我们的所有准备工作都已经做完了,那此时我们应有如下的资源:

  1. 短信套餐(就是你能发送多少条短信的资格)
  2. 短信签名
  3. 短信模板
  4. 应用
  5. 云 API

4、Java 编码实现短信发送

现在是万事俱备了,就差写代码实现了。而因为腾讯对于 API 鉴权这块非常复杂所以腾讯建议我们使用他们提供的 SDK 进行开发,所以本次代码的编写也其 SDK 上做了一些微调而已。

1)引入依赖:

<!-- 腾讯短信sdk -->
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.1.270</version>
</dependency>

2)编写短信发送 util

// 注意引入 lombok
@Slf4j
public class SendSmsUtil {

    public static Boolean sendSms(SendSmsRequest request) {
        Credential cred = new Credential(request.getSecretId(), request.getSecretKey());

        SmsClient client = new SmsClient(cred, "ap-guangzhou");

        final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
        req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
        req.setSmsSdkAppId(request.getSmsSdkAppId());
        req.setSignName(request.getSignName());
        req.setTemplateId(request.getTemplateId());
        req.setTemplateParamSet(request.getTemplateParamSet());

        SendSmsResponse res = null;
        try {
            res = client.SendSms(req);
        } catch (TencentCloudSDKException e) {
            log.error("发送短信出错:", e);
            return Boolean.FALSE;
        }
        log.error("发送短信结果:", SendSmsResponse.toJsonString(res));

        if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }
    
    /**
     * 参数对象
     */
    @Data
    public static class SendSmsRequest {
        /**
         * 电话
         */
        private String phone;

        /**
         * 短信签名内容,必须填写已审核通过的签名
         */
        private String signName;

        /**
         * 模板 ID: 必须填写已审核通过的模板 ID
         */
        private String templateId;

        /**
         * 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
         */
        private String[] templateParamSet;

        /**
         * 应用id
         */
        private String smsSdkAppId;
        /**
         * 云api密钥中的 secretId
         */
        private String secretId;

        /**
         * 云api密钥中的 secretKey
         */
        private String secretKey;
    }
}

3)测试

public class SendSmsUtil {
    public static void main(String[] args) {
        SendSmsRequest request = new SendSmsRequest();
        request.setPhone("电话");

        request.setSmsSdkAppId("应用id");

        request.setSecretId("API的SecretId");
        request.setSecretKey("API的SecretKey");

        request.setSignName("签名内容");
        request.setTemplateId("模板id");
        // 这个值,要看你的模板中是否预留了占位符,如果没有则不需要设置
        request.setTemplateParamSet(new String[]{"模板中的参数值,如果没有则为空"});
        SendSmsUtil.sendSms(request);
    }
}

此时,手机会收到一条短信:

在这里插入图片描述

到此呢,我们对接腾讯短信这一功能就算是实现了,但是这仅仅是开发的一部分,我们只是封装了一个小小的发送短信工具类而已。还没有结合具体的业务来运用这个短信发送功能,后续我打算用该功能实现一个用户注册,并考虑性能、安全等因素对其进行优化。

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

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

相关文章

怎么用21zui工具为图片添加水印

有些小伙伴工作内容是推荐公司产品&#xff0c;在平台中发布产品图片的时候&#xff0c;应该为图片添加专属水印&#xff08;文字水印或者logo水印&#xff09;&#xff0c;为什么要这么做呢&#xff1f;因为添加水印可以保护我们的图片不被盗用&#xff0c;同时也有助于推广我…

(24)目标检测算法之YOLOv6 (2)量化与部署详解

目标检测算法之YOLOv6 (2)量化与部署详解 详解量化训练方式 详解部署方法&#xff1a;onnx 、openvnio、 tensorrt YLOLOv6目前发布的模型&#xff1a;从模型大小方面来看&#xff0c;可分为微小型(Nano)&#xff0c;小(Small)&#xff0c;中(Medium)&#xff0c;大模型(Larg…

【单周期CPU】LoongArch | 32位寄存器DR | 32位的程序计数器PC | 通用寄存器堆Registers | 32位RAM存储器

前言&#xff1a;本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本时序逻辑部件设计。 &#x1f4bb;环境&#xff1a;一台内存4GB以上&#xff0c;装有64位Windows操作系统和Vivado 2017.…

黑马微信小程序登录弹窗问题与解决的说明

1.问题 1.1开发者工具报错 [getFuzzyLocation] is not authorized如何解决&#xff1f; 1.2弹窗问题 2.解决方法 2.1开发工具报错问题 首先登录微信公众平台&#xff0c;找到开发管理。如下图 然后开通wx.getFuzzyLocation 申请模版&#xff0c;通过速度很多&#xff0c;…

24小时不定时价格监测如何做到

在做电商平台的数据监测时&#xff0c;品牌需要对线上监测的数据进行不定时监测&#xff0c;这是因为品牌做价格监测的目的是为了管控渠道&#xff0c;如果对店铺只能在特定的时间进行监测&#xff0c;那对于其他时间段的低价行为将不被发现&#xff0c;这也会使品牌渠道管控的…

【Redis】配置

&#x1f3af;Redis 配置 Redis 的配置文件位于 Redis 安装目录下&#xff0c;文件名为 redis.conf(Windows 名为 redis.windows.conf)。 1、查看配置 语法如下通过 config get 命令查看或设置配置项。 CONFIG GET 配置的名字 使用 * 号获取所有配置项 127.0.0.1:6379>…

Parsing error: Unexpected token :

如果你创建的是Vue3的项目还报这个错误的话&#xff0c;很可能就是.eslintrc.js配置的问题。 我为了省事把vue2项目的.eslintrc.js复制到vue3的项目了。。 .eslintrc.js module.exports {root: true,env: {node: true,},extends: [plugin:vue/vue3-essential,eslint:recomm…

【哈士奇赠书活动 - 29期】- 〖人工智能与ChatGPT〗

文章目录 ⭐️ 赠书 - 《人工智能与ChatGPT》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《人工智能与ChatGPT》 ⭐️ 内容简介 人们相信人工智能可以为这个时代的技术带来突破&#xff0c;而ChatGPT则使这种希望成为现实。现在&#xff0…

自定义View实战《弹幕》

自定义View实战《弹幕》 前言一、步骤讲解二、缓存优化三、弹幕框架DanmakuFlameMaster介绍DanmakuFlameMasterDanmakuFlameMaster的使用 四、初步实现的完整代码总结 前言 前面已经学习了自定义的View《渐变色的文字》是继承View的。现在我们在继承ViewGroup来实现我们的《弹…

C++【初识哈希】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 &#x1f307;前言&#x1f3d9;️正文1、哈希思想2、哈希函数2.1、哈希函数的设计原则2.2、常见的哈希函数 3、哈希…

曹操最有名的4首诗

在中国帝王级的人物中间&#xff0c;真正称得上诗人的&#xff0c;曹操必定是最杰出一个。 曹操简介&#xff1a; 曹操&#xff08;155年&#xff0d;220年正月庚子&#xff09;&#xff0c;字孟德&#xff0c;一名吉利&#xff0c;小字阿瞒&#xff0c;沛国谯&#xff08;今…

Redis实现用户签到

用户签到 现在许多的APP或者网上应用为了提高用户的活跃度&#xff0c;都会设置一个每日签到的活动&#xff0c;签到完成后会给予一定的奖励&#xff0c;从而达到其目的。 而记录用户的签到信息可以使用如下一张数据库表来进行记录。 在用户数量并不多的情况下&#xff0c;数…

排序算法--冒泡排序(Java语言)

冒泡排序&#xff08;Bubble Sort&#xff09;是啥&#xff1f; 冒泡排序是一种简单的排序算法。它重复地走访过要排序的元素列&#xff0c;依次比较两个相邻的元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。走访元素…

Android:Lifecycle

整体架构 LifecycleOwner Lifecycle持有者 在ComponentActivity中new出来&#xff0c;所以Activity和Fragment自带 实现了LifecycleOwner接口的类 可以获得生命周期信息类Lifecycle Fragment和Activity都已经实现了该接口 Lifecycle Registry 生命周期注册器 可以提交生命周…

栈板识别的思考

0.啰嗦几句 最近公司又变动了&#xff0c;所以又做了一个关于视觉的项目。简单说就是栈板定位&#xff0c;主要应用在AGV叉车上&#xff0c;当然这一套流程基本适用于所有的视觉项目。主要是看算法的设计和一些人为的经验。 1.结果图 可以看到在图像上3个托盘都分割出来了&am…

青少年机器人技术一级核心知识点:机械结构及模型(三)

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

2024考研408-计算机组成原理第七章-输入输出系统学习笔记

文章目录 前言一、IO系统基本概念1.1、输入/输出系统基本概念1.1.1、现代计算机的结构1.1.2、常见的I/O设备1.1.3、主机与I/O设备如何进行交互&#xff1f;&#xff08;认识I/O接口&#xff09;1.1.4、I/O系统的基本组成&#xff08;I/O硬件、I/O软件&#xff09;本节回顾 1.2、…

标配8155,智驾延续「高低配」,小鹏G6能否挽回颜面?

对于小鹏汽车来说&#xff0c;G6就是最后的尊严。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-5月&#xff0c;小鹏汽车交付量为3.22万辆&#xff0c;同比上年同期下滑39.81%&#xff0c;是「蔚小理」三家新势力中唯一下滑的一家。 去年上市的G9&#xff08;何小鹏口中…

基于声音信号的工业设备异常检测

异常检测主要目标是将异常事件与正常事件区分开来&#xff0c;因此才有了“异常”一词。本文将介绍基于声音信号的工业机械异常检测&#xff0c;使用的数据集是MIMII声音数据集&#xff0c;该数据集很容易在网上获得。 异常检测的任务可以通过多种方式实现。其中最简单的一种方…

Hadoop基础——HDFS知识点梳理

HDFS基础知识 1. 介绍一下HDFS组成架构&#xff1f; 组成部分&#xff1a; HDFS Client,NameNode,DataNodeSecondary NameNode( HA模式下是 StandBy NameNode) Client: 客户端 文件切分&#xff0c;文件上传HDFS时&#xff0c;client将文件切分成一个一个的block&#xff0…