当前位置: 代码网 > it编程>编程语言>Java > (超详细)使用腾讯云短信实现java后端的springboot项目的短信验证码功能,从申请到收发验证码(idea中使用)

(超详细)使用腾讯云短信实现java后端的springboot项目的短信验证码功能,从申请到收发验证码(idea中使用)

2024年08月03日 Java 我要评论
(已经成功获取腾讯云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)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com