基于SpringBoot+腾讯云短信服务实现接收手机验证码功能
在腾讯云中配置需要的服务申请签名和短信模板创建应用在项目application.yml中配置相关参数在项目中安装腾讯云短信服务的依赖包<!--腾讯云--><dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms</artifactId>
·
- 在腾讯云中配置需要的服务
- 申请签名和短信模板
- 创建应用
- 在项目application.yml中配置相关参数
- 在项目中安装腾讯云短信服务的依赖包
<!--腾讯云--> <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> <version>1.0.6</version> </dependency>
- 创建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; } }
- 创建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; } }
- 在控制器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); } }
- 启动项目,测试功能
- 手机接收如下:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)