打开 腾讯云短信服务 ,你会看到免费试用。点进去
进入短信服务的控制台
点击这个创建模板,或者点击左侧的 国内短信》签名管理
这里需要一个已经备案好的网站,没有备案网站的可以在腾讯云买一个,然后在腾讯云备案
点击左侧 国内短信》正文模板管理,去创建一个
创建一个子用户,可以给子用户选择短信的权限,你也可以不分配权限,不分配默认应该就是全部权限,当然分不分随你自己
com.tencentcloudapi
tencentcloud-sdk-java
4.0.11
# 腾讯云账户 secrtId,secretKey
tencent.sms.secretId=
tencent.sms.keysecret=
# 短信应用ID:短信SdkAppId在 【短信控制台】添加应用后生成实际的SdkAppId
tencent.sms.smsSdkAppId=
# 短信签名内容:使用UTF-8编码,必须填写已审核通过的签名,签名内容是中文,推荐转换为Unicode编码,使用工具转化https://tools.ijkxs.com/tools/unicode
tencent.sms.signName=
# 模板ID:必须是已经审核通过的模板ID
tencent.sms.templateId=
使用yml配置,就不用转unicode了
tencent:
sms:
# 腾讯云账户 secrtId,secretKey
secretId:
keysecret:
# 短信应用ID:短信SdkAppId在 【短信控制台】添加应用后生成实际的SdkAppId
smsSdkAppId:
# 短信签名内容:
signName:
# 模板ID:必须是已经审核通过的模板ID
templateId:
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 org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Random;
@Component
public class MsmConstantUtils implements InitializingBean {
/** 腾讯云账户密钥对secretKey(在访问管理中配置) */
@Value("${tencent.sms.secretId}")
private String secretID ;
/** 腾讯云账户密钥对secretKey(在访问管理中配置) */
@Value("${tencent.sms.keysecret}")
private String secretKey ;
@Value("${tencent.sms.smsSdkAppId}")
private String smsSdkAppID ;
@Value("${tencent.sms.signName}")
private String signName ;
@Value("${tencent.sms.templateId}")
private String templateID ;
public static String SECRET_ID;
public static String SECRET_KEY;
public static String SMSSDKAPP_ID;
public static String SIGN_NAME;
public static String TEMPLATE_ID;
@Override
public void afterPropertiesSet() throws Exception {
SECRET_ID = secretID;
SECRET_KEY = secretKey;
SMSSDKAPP_ID = smsSdkAppID;
SIGN_NAME = signName;
TEMPLATE_ID = templateID;
}
/**
* 发送6位数字验证码到手机
* @param sixBitRandom 验证码
* @param phone 手机号
* @return
*/
public static boolean sendPhone(String sixBitRandom, String phone) {
//判断手机号是否为空
if (StringUtils.isEmpty(phone)) {
return false;
}
try{
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential(MsmConstantUtils.SECRET_ID, MsmConstantUtils.SECRET_KEY);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("sms.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的 第二个参数是地域信息
SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
SendSmsRequest req = new SendSmsRequest();
//设置发送相关的参数
String[] phoneNumberSet1 = {"86"+phone};
req.setPhoneNumberSet(phoneNumberSet1);//发送的手机号
//设置固定的参数
req.setSmsSdkAppid(MsmConstantUtils.SMSSDKAPP_ID);// 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId
req.setSign(MsmConstantUtils.SIGN_NAME);//短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
req.setTemplateID(MsmConstantUtils.TEMPLATE_ID);//模板 ID: 必须填写已审核通过的模板 ID
//发送的验证码
String[] templateParamSet1 = {sixBitRandom};//模板的参数 第一个是验证码,第二个是过期时间
req.setTemplateParamSet(templateParamSet1);//发送验证码
//发送短信
// 返回的resp是一个SendSmsResponse的实例,与请求对象对应
SendSmsResponse resp = client.SendSms(req);
System.out.println("resp"+resp);
// 输出json格式的字符串回包
System.out.println(SendSmsResponse.toJsonString(resp));
return true;
} catch (TencentCloudSDKException e) {
e.printStackTrace();
return false;
}
}
/**
* 随机生成验证码
* @param length 长度为4位或者6位
* @return
*/
public static String generateValidateCode(int length){
Integer code =null;
if(length == 4){
code = new Random().nextInt(9999);//生成随机数,最大为9999
if(code < 1000){
code = code + 1000;//保证随机数为4位数字
}
}else if(length == 6){
code = new Random().nextInt(999999);//生成随机数,最大为999999
if(code < 100000){
code = code + 100000;//保证随机数为6位数字
}
}else{
throw new RuntimeException("只能生成4位或6位数字验证码");
}
return code.toString();
}
}
import com.example.utils.MsmConstantUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class testController {
@GetMapping("/test")
public String test(String phone){
MsmConstantUtils.sendPhone(MsmConstantUtils.generateValidateCode(6),phone);
return "success";
}
}
在浏览器请求:http://localhost:8080/test?phone=自己的手机号 就了
如果遇到问题,请参考这位大佬的博客进行解决:Springboot整合腾讯云短信服务_火星包18163112的博客-CSDN博客