jspringboot 调用腾讯短信

1、购买腾讯短信,大约5分钱一条

2、登录:https://console.cloud.tencent.com/smsv2,

创建资质

3、创建签名,创建完成后腾讯审核。审核通过后,会发送到短信运营商进行报备,报备通过后才能正常发送短信

4、创建短信模板,模板也需要腾讯审核。

5、创建应用,从而获取sdkAppId

6、登录https://console.cloud.tencent.com/cam/capi,配置秘钥,

7、详细文档地址可参考:https://cloud.tencent.com/document/product/382/43194

下面直接给出java代码(sdk方式)

1、maven引入

xml 复制代码
<dependency>
			<groupId>com.tencentcloudapi</groupId>
			<artifactId>tencentcloud-sdk-java</artifactId>
			<version>3.1.571</version>
		</dependency>

2、java代码

java 复制代码
import java.util.concurrent.ThreadLocalRandom;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

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.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;

import lombok.extern.slf4j.Slf4j;

/**
 * 高并发版 短信验证码生成工具类 基于ThreadLocalRandom,适合分布式、高请求量场景
 */
@Component
@Slf4j
public class SmsCodeService {
	
	@Value("${tencent.sms:secretId}")
	private String secretId;
	
	@Value("${tencent.sms:secretKey}")
	private String secretKey;
	
	@Value("${tencent.sms:endPoint}")
	private String endPoint;
	
	
	
	/**
	 * 生成指定位数的数字验证码
	 * 
	 * @param length
	 *            验证码位数(4/6)
	 * @return 纯数字验证码字符串
	 */
	public String generateCode(int length) {
		if (length < 1) {
			throw new IllegalArgumentException("验证码位数不能小于1,建议使用4位或6位");
		}
		int max = (int) Math.pow(10, length) - 1;
		// 线程安全的随机数生成
		int randomNum = ThreadLocalRandom.current().nextInt(max + 1);
		// 格式化补零
		return String.format("%0" + length + "d", randomNum);
	}

	// 4位验证码快捷方法
	public String generate4BitCode() {
		return generateCode(4);
	}

	// 6位验证码快捷方法
	public String generate6BitCode() {
		return generateCode(6);
	}

	public boolean sendSMSCode(String sdkAppId,String templateId,String signName,String phoneNumber, String[] templateParamSet) {
		try {
			// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId,SecretKey。
			// 为了保护密钥安全,建议将密钥设置在环境变量中或者配置文件中,请参考凭证管理
			// https://github.com/TencentCloud/tencentcloud-sdk-java?tab=readme-ov-file#%E5%87%AD%E8%AF%81%E7%AE%A1%E7%90%86。
			// 硬编码密钥到代码中有可能随代码泄露而暴露,有安全隐患,并不推荐。
			// SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi
			Credential cred = new Credential(secretId, secretKey);
			// Credential cred = new Credential(System.getenv("TENCENTCLOUD_SECRET_ID"),
			// System.getenv("TENCENTCLOUD_SECRET_KEY"));

			// 实例化一个http选项,可选的,没有特殊需求可以跳过
			HttpProfile httpProfile = new HttpProfile();
			// 从3.0.96版本开始, 单独设置 HTTP 代理(无需要直接忽略)
			// httpProfile.setProxyHost("真实代理ip");
			// httpProfile.setProxyPort(真实代理端口);
			httpProfile.setReqMethod("GET"); // get请求(默认为post请求)
			httpProfile.setConnTimeout(30); // 请求连接超时时间,单位为秒(默认60秒)
			httpProfile.setWriteTimeout(30); // 设置写入超时时间,单位为秒(默认0秒)
			httpProfile.setReadTimeout(30); // 设置读取超时时间,单位为秒(默认0秒)

			/*
			 * 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为
			 * sms.ap-guangzhou.tencentcloudapi.com
			 */
			httpProfile.setEndpoint(endPoint);

			/*
			 * 非必要步骤: 实例化一个客户端配置对象,可以指定超时时间等配置
			 */
			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-shanghai", 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 */
//			//TODO
//			String sdkAppId = "1400009099";
			req.setSmsSdkAppId(sdkAppId);
			
			//TODO 签名
//			String signName = "***公众号";
			req.setSignName(signName);

			//TODO 
//			String templateId = "449739";
			req.setTemplateId(templateId);

			/* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
			
			req.setTemplateParamSet(templateParamSet);

			String[] phoneNumberSet = { "+86"+phoneNumber };
			req.setPhoneNumberSet(phoneNumberSet);

			SendSmsResponse res = client.SendSms(req);
			// 输出json格式的字符串回包
			System.out.println(SendSmsResponse.toJsonString(res));
			return true;
		} catch (TencentCloudSDKException e) {
			log.error(e.getMessage(),e);
			return false;
		}
	}
}
相关推荐
AC赳赳老秦13 分钟前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
笑小枫19 分钟前
用 Claude Code 推翻重写笑小枫网站
java·人工智能·spring boot·ai编程
霸道流氓气质32 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
独隅1 小时前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
还是奇怪1 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
zfoo-framework2 小时前
1.ansible安装 2.虚拟机克隆
java
码上解惑2 小时前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
青山木3 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
程序员-珍3 小时前
报错下载android sdk失败
android·java
糖果店的幽灵3 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph