利用手机验证码进行注册或进行下一步操作已经是非常普遍的,这篇文章就教你如何是用腾讯云短信服务发送手机验证码。
文章目录
一、前提条件
二、代码实现
1.引入依赖
2.Java代码实现
3.代码改进
4.实现效果
三,关于项目中验证码验证逻辑分享
1.发送手机验证码并进行Redis存储
2.验证逻辑
一、前提条件
腾讯云官网账号,已开通短信服务
需要用到的参数 1.短信签名id,(需要审核)
2.短信正文签名模板,(需要创建审核)
3.应用id,(创建)
4.有剩余短信包(新用户开通后有免费200条,可购买)
上面是需要具备的前提条件,腾讯云还可以设置条数限制。代码开发需要用到上面的参数,不懂得如何获得参数的可以去看这个视频 https://www.bilibili.com/video/BV1KE411K7Sd
二、代码实现
1.引入依赖
<!--腾讯云手机验证码--><dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms</artifactId><version>1.0.6</version></dependency>
2.Java代码实现
package com.liyingjie.lyjalipay.controller;import cn.hutool.core.util.RandomUtil;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import com.liyingjie.lyjalipay.domain.Sms;
import org.json.JSONException;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;@SpringBootTest
class SmsControllerTest {@Testpublic void sms(){//腾讯云固定参数int appid = 1400655460; //腾讯云应用idString appkey="133213"; //腾讯云应用Keyint templateId= 1354718; //模板idString smsSign="杰杰不会hellowor"; //签名内容//可变参数String phoneNumber ="123456";//手机号码String code="131";//手机验证码String min="5";//有效时长try {String[] params = {code,min}; //param1,手机验证码;param2,有效时长,配合正文模板参数SmsSingleSender smsSingleSender = new SmsSingleSender(appid, appkey);SmsSingleSenderResult smsSingleSenderResult = smsSingleSender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", "");System.out.println(smsSingleSenderResult);} catch (IOException e) {e.printStackTrace();} catch (HTTPException | JSONException e) {e.printStackTrace();}}
}
3.代码改进
package com.liyingjie.lyjalipay.controller;import cn.hutool.core.util.RandomUtil;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import com.liyingjie.lyjalipay.domain.Sms;
import org.json.JSONException;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;@SpringBootTest
class SmsControllerTest {@Testpublic void sms(){//腾讯云固定参数int appid = 1400655460; //应用idString appkey="76bcf5ddb58******"; //应用Keyint templateId= 222222;//模板idString smsSign="杰杰不会hellowor";//用户参数Sms sms =new Sms();sms.setPhoneNumber("132");sms.setCode(RandomUtil.randomNumbers(6));//验证码6位随机sms.setMin(5); //验证码有效时长try {String[] params = {sms.getCode(),Integer.toString(sms.getMin())};SmsSingleSender smsSingleSender = new SmsSingleSender(appid, appkey);SmsSingleSenderResult smsSingleSenderResult = smsSingleSender.sendWithParam("86", sms.getPhoneNumber(), templateId, params, smsSign, "", "");System.out.println(smsSingleSenderResult);} catch (IOException e) {e.printStackTrace();} catch (HTTPException | JSONException e) {e.printStackTrace();}}
}
4.实现效果
三,关于项目中验证码验证逻辑分享
以上只有验证码发送,在前后端项目中要实现验证码验证,可以用redis缓存数据库实现
1.发送手机验证码并进行Redis存储
将上面的发送手机验证码封装成一个工具类SmsUtil里的一个方法。返回随机六位的验证码
将返回的验证码存储在redis中,以手机号码为key,验证码为值,有效时间统一一下。
@ApiOperation("发送手机验证码")@GetMapping("/send/{phoneNumber}")public AjaxResult sendCode(@PathVariable("phoneNumber") String phoneNumber){String phoneCode = SmsUtil.send(phoneNumber);redisCache.setCacheObject(phoneNumber,phoneCode,5, TimeUnit.MINUTES);return AjaxResult.success(phoneCode);}
2.验证逻辑
在上一步发送完成之后,提交表单参数时携带者手机号与验证码参数,
String redisCode = redisCache.getCacheObject(phoneNumber);
Boolean flag = redisCode.equals(phoneCode)
验证成功后再进行下一步操作,否则不执行