基于SpringBoot+腾讯云短信服务实现接收手机验证码功能

  1. 腾讯云中配置需要的服务
  2. 申请签名和短信模板
  3. 创建应用
  4. 在项目application.yml中配置相关参数
  5. 在项目中安装腾讯云短信服务的依赖包
    <!--腾讯云-->
            <dependency>
                <groupId>com.github.qcloudsms</groupId>
                <artifactId>qcloudsms</artifactId>
                <version>1.0.6</version>
            </dependency>

  6. 创建SmsConstantUtil工具类来获取配置文件中的参数
    
    
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    
    /*
    *腾讯云短信服务 */
    @Component
    @PropertySource("classpath:application.yml")
    public class SmsConstantUtil implements InitializingBean {
    
      @Value("${tencent.appid}")
      private Integer APPID;
    
      @Value("${tencent.appkey}")
      private String APPKEY;
    
      @Value("${tencent.templateId}")
      private Integer TEMPLATEID;
    
      @Value("${tencent.signname}")
      private String SIGNNAME;
    
      public static Integer APP_ID;
      public static String APP_KEY;
      public static Integer TEMPLATE_ID;
      public static String SIGN_NAME;
    
    
    
      @Override
      public void afterPropertiesSet() throws Exception {
        APP_ID = APPID;
        APP_KEY = APPKEY;
        TEMPLATE_ID = TEMPLATEID;
        SIGN_NAME = SIGNNAME;
      }
    }
    

  7. 创建service和实现类来实现相应功能
    ps:这里对所需要的参数进行了封装
    @Data
    @Component
    public class SmsCodeVo {
      private String phone;
      private String code;
    }

    SmsService:

    public interface SmsService {
    
      Result sendCode(SmsCodeVo smsCodeVo);
    }

    SmsServiceImpl:

    @Service
    public class SmsServiceImpl implements SmsService {
      @Autowired
      SmsCodeVo smsCodeVo;
    
      @Autowired
      RedisTemplate<String, String> redisTemplate;
    
    
      @Override
      public Result sendCode(SmsCodeVo smsCodeVo) {
    //    获取配置信息
        Integer appId = SmsConstantUtil.APP_ID;
        String appKey = SmsConstantUtil.APP_KEY;
        Integer templateId = SmsConstantUtil.TEMPLATE_ID;
        String signName = SmsConstantUtil.SIGN_NAME;
    
        if (StringUtils.isBlank(smsCodeVo.getPhone())){
          return Result.error(ErrorCode.PARAMS_NULL.getCode(),ErrorCode.PARAMS_NULL.getMsg());
        }
    //    获取手机号
         String phone = smsCodeVo.getPhone();
    //    生成验证码
        String verifyCode = vcode();
        smsCodeVo.setCode(verifyCode);
    //    存入redis
        redisTemplate.opsForValue().set(phone,verifyCode.replaceAll("[[\\s-:punct:]]", ""), 300, TimeUnit.SECONDS);
        try{
          String[] params = {smsCodeVo.getCode()}; //短信中的参数
          SmsSingleSender ssender = new SmsSingleSender(appId, appKey);
          SmsSingleSenderResult result = ssender.sendWithParam("86", smsCodeVo.getPhone(), templateId,
                  params, signName, "", "");
    //      打印返回结果
          System.out.println(result);
          if (result.result == 0){
            return  Result.success(200,"发送成功");
          }
          if (result.result == 1025){
            return Result.error(1025,"验证码已经发上限制!!!,请稍后再试");
          }
        } catch (HTTPException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
    
        return Result.error(400,"发送失败");
      }
    
      /**
      * 生成6位随机短信验证码
      */
      public static String vcode(){
        String vcode = "";
        for (int i = 0;i <6;i++){
          vcode = vcode + (int) (Math.random()*9);
        }
        return vcode;
      }
    
    }

  8. 在控制器controller中实现调用功能
    @RestController
    @Controller
    @Api(tags = "短信模块")
    @CrossOrigin
    public class SmsController {
    
      @Autowired
      SmsService smsService;
    
      @PostMapping("/sendCode")
      @ApiOperation(value = "发送短信验证码")
      public Result sendCode(@RequestBody SmsCodeVo smsCodeVo){
        return smsService.sendCode(smsCodeVo);
      }
    
    
    
    }
    

  9. 启动项目,测试功能
  10. 手机接收如下:

猜你喜欢

转载自blog.csdn.net/weixin_44030860/article/details/122631439