先进行准备工作,获取短信验证码需要用到的参数
1、你的系统默认应用SDK AppID
2、你的系统默认应用App Key
3、你的正文模板
4、你的签名内容
先注册腾讯云==》搜索短信,进入控制台
可以在应用管理==》应用列表获取AppID、App Key
然后就可以去创建签名
创建好之后就可以拿到,签名内容
正文模板就在签名管理下方创建,创建时可以直接选择使用标准模板
就可以拿到你的正文模板ID
1、引入依赖:
<!--腾讯云核心API-->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.111</version>
</dependency>
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
2、在配置文件添加(我的是yml配置文件)
txsms:
AppId: #你的系统默认应用SDK AppID
AppKey: #你的系统默认应用App Key
TemplateId: #你的正文模板ID
signName: #你的签名内容
3、核心代码
1、生成验证码
/**
* 生成验证码
* @return
*/
public String getCode(){
String str="0123456789";
String uuid=new String();
for(int i=0;i<4;i++)
{
char ch=str.charAt(new Random().nextInt(str.length()));
uuid+=ch;
}
return uuid;
}
2、发送验证码
/**
* 发送验证码
* @return
*/
@RequestMapping(value = "/register/createCode/{phone}",method = RequestMethod.GET)
public ResultVO createCode(@PathVariable("phone") String phone){
String code = getCode();
log.info("========================>"+code);
//将验证码保存redis,key为电话号,有效期180s
redisTemplate.opsForValue().set(phone,code,180, TimeUnit.SECONDS);
//发送短信,腾讯云短信国企,暂时注释
String Msg = txSmsTemplate.sendMesModel(phone, code);
return ResultVO.success();
}
3、调用核心方法
import com.alibaba.fastjson.JSONException;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* 腾讯云发送短信模板对象,封装了发送短信的api
*/
@Slf4j
@Component
public class TxSmsTemplate {
// AppId 1400开头的
@Value("${txsms.AppId}")
private int AppId;
// 短信应用SDK AppKey
@Value("${txsms.AppKey}")
private String AppKey;
// 短信模板ID
@Value("${txsms.TemplateId}")
private int TemplateId;
// 签名
@Value("${txsms.signName}")
private String signName;
/**
* 指定正文模板id发送短信
* @param number 用户的手机号码
* @return OK 成功 null 失败
*/
public String sendMesModel(String number,String code) {
try {
// 接收生成的验证码,设置5分钟内填写
String[] params = {code};
// 构建短信发送器
SmsSingleSender ssender = new SmsSingleSender(AppId, AppKey);
SmsSingleSenderResult result = ssender.sendWithParam("86", number,
TemplateId, params, signName, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信
return result.errMsg; //OK
} catch (HTTPException e) {
// HTTP响应码错误
log.info("短信发送失败,HTTP响应码错误!");
// e.printStackTrace();
} catch (JSONException e) {
// json解析错误
log.info("短信发送失败,json解析错误!");
//e.printStackTrace();
} catch (IOException | org.json.JSONException e) {
// 网络IO错误
log.info("短信发送失败,网络IO错误!");
// e.printStackTrace();
}
return null;
}
}