准备工作
首先需要在腾讯云完成如图工作。
国内短信必须进行签名,并且需要审核,有点难通过,签名必须是网站名字
创建短信模板并审核
购买套餐包,腾讯最少购买1k条,50rmb
集成到 Spring Boot 项目
引入依赖
引入腾讯云的 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.872</version>
</dependency>
编写 applictaion.yml
tencent:
sms:
secretID: 腾讯云账号的SecretId
secretKey: 腾讯云账号的SecretKey
smsSdkAppId: 短信控制台中的应用,应用的SDK AppID
signName: 审核通过的签名
templateId: 短信模板ID
其中:
secretID:腾讯云账号的SecretId
secretKey: 腾讯云账号的SecretKey,同上图
smsSdkAppId: 短信控制台中的应用,应用的SDK AppID
signName: 审核通过的签名,(不是id)
templateId: 短信模板ID
配置类 TencentSmsConfig
创建配置类 TencentSmsConfig.java
,读取配置文件信息,并注册一个 client。
@Configuration
@ConfigurationProperties(prefix = "tencent.sms")
@Data
public class TencentSmsConfig {
private String secretID ;
private String secretKey ;
private String smsSdkAppID ;
private String signName ;
private String templateID ;
@Bean
public SmsClient smsClient() {
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential(secretID, secretKey);
// 实例化一个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);
return client;
}
}
发送短信工具类 SmsManager
我将这种放在了项目的 manager 包下:
@Component
public class SmsManager {
@Resource
private SmsClient client;
@Resource
private TencentSmsConfig tencentSmsConfig;
public boolean send(String userAccount, String phoneCode) {
try {
// 实例化一个请求对象,每个接口都会对应一个request对象
SendSmsRequest req = new SendSmsRequest();
//设置固定的参数
req.setSmsSdkAppId(tencentSmsConfig.getSmsSdkAppID());// 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId
req.setSignName(tencentSmsConfig.getSignName());//短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
req.setTemplateId(tencentSmsConfig.getTemplateID());//模板 ID: 必须填写已审核通过的模板 ID
/* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
// String sessionContext = "xxx";
// req.setSessionContext(sessionContext);
//设置发送相关的参数
String[] phoneNumberSet1 = {"+86" + userAccount};
req.setPhoneNumberSet(phoneNumberSet1);//发送的手机号
String[] templateParamSet1 = {phoneCode};//模板的参数 第一个是验证码,第二个是过期时间
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) {
throw new BusinessException(ErrorCode.SYSTEM_ERROR, e.getMessage());
}
}
}
调用
在业务中调用发送短信
评论区