1.注册腾讯云
这里就不过多赘述了可以使用vx扫一扫快速注册。
2.开通短信服务
————————————————
3.创建短信签名
( 现在腾讯不允许个人申请短信签名了,问的客服,因为一直申请不过)
这里测试过小程序和公众号,两者区别不大,有哪个用哪个,都没有建议公众号注册一个也比较快;证明上传不知道怎么传,可以点击“查看案例”根据官方提示操作。
创建签名之后,状态会进入“待审核”,审核通过之后会变成“已通过”,我申请的时候大概也就十来分钟左右就通过了,正好可以趁着这个时间去创建正文模板。
4.创建正文模板
接着就要开始创建应用了:
5、创建你的云 API 密钥
ok,此刻我们的所有准备工作都已经做完了,那此时我们应有如下的资源:
1、短信套餐(就是你能发送多少条短信的资格)
2、短信签名
3、短信模板
4、应用
5、云 API
6、Java 编码实现短信发送
现在是万事俱备了,就差写代码实现了。而因为腾讯对于 API 鉴权这块非常复杂所以腾讯建议我们使用他们提供的 SDK 进行开发,所以本次代码的编写也其 SDK 上做了一些微调而已。
1)引入依赖:
<!-- 腾讯短信sdk -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.270</version>
</dependency>
2)编写短信发送 util
// 注意引入 lombok
@Slf4j
public class SendSmsUtil {
public static Boolean sendSms(SendSmsRequest request) {
Credential cred = new Credential(request.getSecretId(), request.getSecretKey());
SmsClient client = new SmsClient(cred, "ap-guangzhou");
final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
req.setSmsSdkAppId(request.getSmsSdkAppId());
req.setSignName(request.getSignName());
req.setTemplateId(request.getTemplateId());
req.setTemplateParamSet(request.getTemplateParamSet());
SendSmsResponse res = null;
try {
res = client.SendSms(req);
} catch (TencentCloudSDKException e) {
log.error("发送短信出错:", e);
return Boolean.FALSE;
}
log.error("发送短信结果:", SendSmsResponse.toJsonString(res));
if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
/**
* 参数对象
*/
@Data
public static class SendSmsRequest {
/**
* 电话
*/
private String phone;
/**
* 短信签名内容,必须填写已审核通过的签名
*/
private String signName;
/**
* 模板 ID: 必须填写已审核通过的模板 ID
*/
private String templateId;
/**
* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
*/
private String[] templateParamSet;
/**
* 应用id
*/
private String smsSdkAppId;
/**
* 云api密钥中的 secretId
*/
private String secretId;
/**
* 云api密钥中的 secretKey
*/
private String secretKey;
}
}
3)测试
public class SendSmsUtil {
public static void main(String[] args) {
SendSmsRequest request = new SendSmsRequest();
request.setPhone("电话");
request.setSmsSdkAppId("应用id");
request.setSecretId("API的SecretId");
request.setSecretKey("API的SecretKey");
request.setSignName("签名内容");
request.setTemplateId("模板id");
// 这个值,要看你的模板中是否预留了占位符,如果没有则不需要设置
request.setTemplateParamSet(new String[]{"模板中的参数值,如果没有则为空"});
SendSmsUtil.sendSms(request);
}
}
此时,手机会收到一条短信