Java后端利用腾讯云短信服务发短信

利用手机验证码进行注册或进行下一步操作已经是非常普遍的,这篇文章就教你如何是用腾讯云短信服务发送手机验证码。

文章目录

一、前提条件

二、代码实现

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 {

    @Test
    public void sms(){
        //腾讯云固定参数
        int appid = 1400655460;   //腾讯云应用id
        String appkey="133213";  //腾讯云应用Key
        int templateId= 1354718;  //模板id
        String 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 {

    @Test
    public void sms(){
        //腾讯云固定参数
        int appid = 1400655460; //应用id
        String appkey="76bcf5ddb58******"; //应用Key
        int templateId= 222222;//模板id
        String 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)

 验证成功后再进行下一步操作,否则不执行

猜你喜欢

转载自blog.csdn.net/liyingjie2001/article/details/126585224