一.在腾讯云短信申请发送短信的资格

(已经成功获取腾讯云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.做一个简单的查询判断即可

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐