-
在腾讯云创建短信签名
-
短信签名审核通过后创建短信模板
-
短信发送SDK(java)文档,将com.tencentcloudapi包导入
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.423</version>
</dependency>
-
在配置文件配置相应的参数信息
tencent:
sms:
#secretId
keyId: 123
#secretKey
keysecret: 123
#SdkAppId
smsSdkAppId: 123
#签名内容
signName: "我的技术记录"
#模板 ID
templateId: 123
-
腾讯云短信发送在线Api调试(点击查询对应参数信息)
-
新建ConstantSmsUtils
/**
* 实现了InitializingBean接口,当spring进行初始化bean时,会执行afterPropertiesSet方法
*/
@Component
public class ConstantSmsUtils implements InitializingBean {
@Value("${tencent.sms.keyId}")
private String secretID ;
@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;
}
}
-
新建SmsService和SmsServiceImpl
public interface SmsService {
Boolean send (String phone);
}
@Service
public class SmsServiceImpl implements SmsService {
/**
* 发送短信
*
* @param phone
* @return
*/
@Override
public Boolean send(String phone) {
//判断手机号是否为空
if (StringUtils.isEmpty(phone)){
return false;
}
try{
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential(ConstantSmsUtils.SECRET_ID, ConstantSmsUtils.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-guangzhou", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
SendSmsRequest req = new SendSmsRequest();
req.setSmsSdkAppid(ConstantSmsUtils.SMSSDKAPP_ID);
//设置固定的参数
// 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId
req.setSmsSdkAppid(ConstantSmsUtils.SMSSDKAPP_ID);
//短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
req.setSign(ConstantSmsUtils.SIGN_NAME);
//模板 ID: 必须填写已审核通过的模板 ID
req.setTemplateID(ConstantSmsUtils.TEMPLATE_ID);
//设置发送相关的参数
String[] phoneNumberSet1 = {"+86"+phone};
//发送的手机号
req.setPhoneNumberSet(phoneNumberSet1);
//生成6位数随机验证码
//模板的参数 第一个是验证码,第二个是过期时间,对应短信模板的{1},{2}参数
String[] templateParamSet1 = {"123","1"};
//发送验证码
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;
}
}
}
-
编写接口进行测试
@RestController
@RequestMapping("/edusms/sms")
public class SmsController {
@Autowired
private SmsService smsService;
@Resource
private RedisUtils redisUtils;
/**
* 短信发送,传入手机号
*
* @param phone
* @return
*/
@GetMapping("/send/{phone}")
public String sendSms(@PathVariable String phone){
//调用service发送短信的方法
boolean isSend = smsService.send(phone);
if (isSend){
return "success";
}else {
return "error";
}
}
}