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;
		}
	}
}
相关推荐
Tong Z1 小时前
Spring Boot 请求处理链路
java·spring boot·后端
rabbitlzx1 小时前
《Async in C# 5.0》第十四章 深入探讨编译器对于async的转换
java·开发语言·c#·异步·asynchronous
LSL666_1 小时前
3 Redis 的 Java 客户端
java·数据库·redis
虫师c1 小时前
Spring Boot自动配置黑魔法:手写Starter实现原理深度解析
java·spring boot·后端·自动配置·starter
范什么特西2 小时前
狂神---死锁
java·前端·javascript
小飞学编程...2 小时前
【Java相关八股文(二)】
android·java·开发语言
程序猿阿越2 小时前
Kafka4(一)KRaft下的Controller
java·后端·源码阅读
on the way 1232 小时前
day09 - Spring启动
java·后端·spring
yixin1232 小时前
Spring 多实例注入
java·后端·spring