一.在腾讯云短信申请发送短信的资格
(已经成功获取腾讯云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.做一个简单的查询判断即可
发表评论