(超详细)使用腾讯云短信实现java后端的springboot项目的短信验证码功能,从申请到收发验证码(idea中使用)
(已经成功获取腾讯云de直接跳转第二条即可)1.需要登录腾讯云短信页面申请,领取到100条免费短信,然后这个页面就会显示出需要做的步骤2.按照步骤先申请,建议使用公众号申请签名,然后申请一个(官方预计2个小时审核完毕)3.然后在访问管理控制台 >页面获取(一定要保存好这个数据,只会显示一次,如果没有记住,需要先禁用->删除->重新新建秘钥)4.需要在这个页面:应用管理的应用列表,创建应用,获取到5
一.在腾讯云短信申请发送短信的资格
(已经成功获取腾讯云de直接跳转第二条即可)
1.需要登录腾讯云短信页面申请,领取到100条免费短信,然后这个页面就会显示出需要做的步骤

2.按照步骤先申请签名,建议使用公众号申请签名,然后申请一个短信模版(官方预计2个小时审核完毕)
3.然后在访问管理控制台 >API密钥管理页面获取 SecretID 和 SecretKey(一定要保存好这个数据,只会显示一次,如果没有记住,需要先禁用->删除->重新新建秘钥)

4.需要在这个页面:应用管理的应用列表,创建应用,获取到SDKAppid

5.现在总结一下我们在腾讯云需要准备的条件:
(不想找的同学可以先登录,然后通过下方链接获取到发送短信的数据:先扫码登录:登录腾讯云短信)
①签名管理中的签名:需要签名的名称(获取自己的签名)
②签名管理中的模版:需要模版的id(获取自己的模版)
③API管理页面的 SecretID 和 SecretKey(获取自己的秘钥)
④应用管理页面的应用列表中sdkappid(获取自己的sdkappid)
(获取到这几个必须使用的 数据就可以啦)
二.在idea中使用sdk实现发送
1.在pom文件中添加依赖
(我使用的时候最新版本是3.1.708,使用先去官方查询一下最新的版本:最新的依赖版本)

<!--添加腾讯云短信的依赖-->
<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.708</version>
</dependency>
2.创建一个util工具类
package com.itheima.duanxin01.utils;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
//导入可选配置类
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
// 导入 SMS 模块的 client
import com.tencentcloudapi.sms.v20190711.SmsClient;
// 导入要请求接口对应的 request response 类
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
import java.util.Random;
/**
* Tencent Cloud Sms Sendsms
* https://cloud.tencent.com/document/product/382/38778
*
*/
public class TengXunSMSUtils{
public static void main( String[] args ) throws Exception {
String templateID = "自己的短信模板ID";
String phoneNumbers = "需要发送验证码的手机号";
//随机生成一个6位数的验证码
String strNumber = generateValidateCode(6).toString();
String param=strNumber;
sendShortMessage(templateID,phoneNumbers,param);
}
/**
* 随机生成验证码
* @param length 长度为4位或者6位
* @return
*/
public static Integer generateValidateCode(int length){
Integer code =null;
if(length == 4){
code = new Random().nextInt(9999);//生成随机数,最大为9998
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;
}
//腾讯云短信的sdk
public static final String VALIDATE_CODE = "866988";
public static void sendShortMessage(String templateCode, String phoneNum,String param) throws Exception {
try {
/* 必要步骤:
* 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
* 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
* 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
* CAM 密钥查询:https://console.cloud.tencent.com/cam/capi
*/
Credential cred = new Credential("这里填入自己的SecretID", "这里填入自己的SecretKey");
// 实例化一个 http 选项,可选,无特殊需求时可以跳过
HttpProfile httpProfile = new HttpProfile();
/* SDK 默认使用 POST 方法。
* 如需使用 GET 方法,可以在此处设置,但 GET 方法无法处理较大的请求 */
httpProfile.setReqMethod("POST");
/* SDK 有默认的超时时间,非必要请不要进行调整
* 如有需要请在代码中查阅以获取最新的默认值 */
httpProfile.setConnTimeout(60);
/* SDK 会自动指定域名,通常无需指定域名,但访问金融区的服务时必须手动指定域名
* 例如 SMS 的上海金融区域名为 sms.ap-shanghai-fsi.tencentcloudapi.com */
httpProfile.setEndpoint("sms.tencentcloudapi.com");
/* 非必要步骤:
* 实例化一个客户端配置对象,可以指定超时时间等配置 */
ClientProfile clientProfile = new ClientProfile();
/* SDK 默认用 TC3-HMAC-SHA256 进行签名
* 非必要请不要修改该字段 */
clientProfile.setSignMethod("HmacSHA256");
clientProfile.setHttpProfile(httpProfile);
/* 实例化 SMS 的 client 对象
* 第二个参数是地域信息,可以直接填写字符串 ap-guangzhou,或者引用预设的常量 */
SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile);
/* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
* 您可以直接查询 SDK 源码确定接口有哪些属性可以设置
* 属性可能是基本类型,也可能引用了另一个数据结构
* 推荐使用 IDE 进行开发,可以方便地跳转查阅各个接口和数据结构的文档说明 */
SendSmsRequest req = new SendSmsRequest();
/* 填充请求参数,这里 request 对象的成员变量即对应接口的入参
* 您可以通过官网接口文档或跳转到 request 对象的定义处查看请求参数的定义
* 基本类型的设置:
* 帮助链接:
* 短信控制台:https://console.cloud.tencent.com/smsv2
* sms helper:https://cloud.tencent.com/document/product/382/3773 */
/* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
String SdkAppid = "这里填入的是SdkAppid";
req.setSmsSdkAppid(SdkAppid);
/* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
String sign = "这里填自己申请的签名";
req.setSign(sign);
/* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
String senderid = "";
req.setSenderId(senderid);
/* 模板 ID: 必须填写已审核通过的模板 ID,可登录 [短信控制台] 查看模板 ID */
req.setTemplateID(templateCode);
/* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
* 例如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
String[] phoneNumber = {"+86"+phoneNum+""};
req.setPhoneNumberSet(phoneNumber);
/* 模板参数: 若无模板参数,则设置为空*/
String[] templateParams = {param};
req.setTemplateParamSet(templateParams);
/* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
* 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
SendSmsResponse res = client.SendSms(req);
// 输出 JSON 格式的字符串回包
System.out.println(SendSmsResponse.toJsonString(res));
// 可以取出单个值,您可以通过官网接口文档或跳转到 response 对象的定义处查看返回字段的定义
System.out.println(res.getRequestId());
} catch (TencentCloudSDKException e) {
e.printStackTrace();
}
}
}
直接拷贝即可
①这是一个main方法,做发送代码测试使用,发送成功后可以按自己的需求删除即可

②这里填入的就是SecretID 和 SecretKey
③这里填自己的SDKappid和签名名称

④修改完这六个地方,点击main方法测试



三.发送成功后,调用前端验证过程
1.建立一张专门收集验证码的数据库表(本人使用的是mysql数据库)
2.把生成的6位数验证码和手机号存储到一张表中
3.把验证码存储到minio中,因为minio中一个key只有一个值,避免出现重复获取或者是一个手机号两个验证码的问题
4.做一个简单的查询判断即可
更多推荐
所有评论(0)