##先去官网申请secretId, secretKey,然后创建对应的模板 ###maven引入包
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
<version>3.1.836</version>
</dependency>
###工具类
package com.hwd.campus.security.biz.utils;
import com.alibaba.fastjson.JSON;
import com.hwd.campus.common.common.api.ResultCode;
import com.hwd.campus.common.common.exception.BusinessException;
import com.tencentcloudapi.common.AbstractModel;
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.v20190711.SmsClient;
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Slf4j
public class SmsUtil {
private static final String SMS_SDK_APP_ID = "";
/**
* 发送手机短信验证码
* <p>
* 您的动态验证码为:{1},此验证码{2}秒内有效,如非本人操作,请忽略本短信!
*
* @param phone 手机号
* @param verifyCode 验证码
* @param validTime 有效时间
*/
public static void sendPhoneVerifyCodeSecond(String phone, String verifyCode, long validTime) {
List<String> templateParamSet = new ArrayList<>();
templateParamSet.add(verifyCode);
templateParamSet.add(String.valueOf(validTime));
sendMsg(smsModel(phone, "", templateParamSet));
}
/**
* 短信发送提醒
*
* @param phone 手机号
* @param templateParam 参数
* @param templateId 模板Id
* @date 2023-08-23
* @author hhs
*/
public static void sendSmsRemind(String phone, List<String> templateParam, String templateId) {
sendMsg(smsModel(phone, templateId, templateParam));
}
/**
* 发送手机短信验证码
* <p>
* <p>
* 您的动态验证码为:{1},此验证码{2}分钟内有效,如非本人操作,请忽略本短信!
*
* @param phone 手机号
* @param verifyCode 验证码
* @param validTime 校验内容
*/
public static void sendPhoneVerifyCodeMinute(String phone, String verifyCode, long validTime) {
List<String> templateParamSet = new ArrayList<>();
templateParamSet.add(verifyCode);
templateParamSet.add(String.valueOf(validTime));
sendMsg(smsModel(phone, "", templateParamSet));
}
private static SmsModel smsModel(String phone, String templateId, List<String> templateParamSet) {
return SmsModel.builder().PhoneNumberSet(Collections.singletonList("+86" + phone))
.TemplateID(templateId).Sign("标头").TemplateParamSet(templateParamSet)
.SmsSdkAppid(SMS_SDK_APP_ID).build();
}
/**
* 发送短信
*
* @param model 模型
*/
private static void sendMsg(SmsModel model) {
try {
log.info("发送短信:" + model);
Credential cred = new Credential("secretId", "secretKey");
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("sms.tencentcloudapi.com");
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
SmsClient client = new SmsClient(cred, "", clientProfile);
//转换为String
String params = JSON.toJSONString(model);
SendSmsRequest req = AbstractModel.fromJsonString(params, SendSmsRequest.class);
SendSmsResponse resp = client.SendSms(req);
log.info("短信发送成功:" + AbstractModel.toJsonString(resp));
} catch (TencentCloudSDKException e) {
log.error("=========短信发送失败========" + e.getMessage());
throw new BusinessException(ResultCode.OPERATION_FAILURE, "=========短信发送失败========" + e.getMessage());
}
}
public static void main(String[] args) {
//13512765559
sendPhoneVerifyCodeSecond("phone", "验证码", 1);
}
}
###实体参数
package com.hwd.campus.security.biz.utils;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Builder
@Data
public class SmsModel {
/**
* 模板 ID,必须填写已审核通过的模板 ID。
* 模板ID可登录 [短信控制台](<a href="https://console.cloud.tencent.com/smsv2">...</a>) 查看,若向境外手机号发送短信,仅支持使用国际/港澳台短信模板。
*/
@JSONField(name = "TemplateID")
private String TemplateID;
/**
* 短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名,
* 签名信息可登录 [短信控制台](<a href="https://console.cloud.tencent.com/smsv2">...</a>) 查看。注:国内短信为必填参数。
*/
@JSONField(name = "Sign")
private String Sign;
/**
* 短信SdkAppid在 [短信控制台](<a href="https://console.cloud.tencent.com/smsv2">...</a>) 添加应用后生成的实际SdkAppid,示例如1400006666。
*/
@JSONField(name = "SmsSdkAppid")
private String SmsSdkAppid;
/**
* 下发手机号码,采用 e.164 标准,格式为+[国家或地区码][手机号],单次请求最多支持200个手机号且要求全为境内手机号或全为境外手机号。
* 例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号。
*/
@JSONField(name = "PhoneNumberSet")
private List<String> PhoneNumberSet;
/**
* 模板参数,若无模板参数,则设置为空。
*/
@JSONField(name = "TemplateParamSet")
private List<String> TemplateParamSet;
}