SpringBoot 实现手机发送短信验证码

本文介绍了如何使用SpringBoot实现手机发送短信验证码的功能。内容包括前端限制10秒内不能重复发送,UserInfoController控制器的设计,application.properties配置文件的设置,以及通过与京东万象短信服务商接口对接的具体实现过程。

内容


一、手机发送短信

1. 前端界面代码

10秒内不能重复发送验证码

//短信发送
$('.vcode-send').click(function () {
	if ($(this).hasClass('disabled')) {

	} else {
        var self = $(this);
        var count = 10;
        self.addClass('disabled');
        self.text(count + '秒后重新获取');
        var timer = setInterval(function () {
            count--;
            if (count > 0) {
                self.text(count + '秒后重新获取');
            } else {
                clearInterval(timer);
                self.text('重新获取验证码');
                self.removeClass("disabled");
            }
    	}, 1000);

        var phone = $("#phone").val();
        $.get(domainUrl + "/users/sendVerifyCode", {phone:phone}, function (data) {
            console.log(data);
            if(data.code == 200){
                popup("发送成功")
            } else {
                popup(data.msg);
            }
        });
    }
});

2. UserInfoController 控制器

package com.yy.springboot.controller;

@RestController
@RequestMapping("/users")
public class UserInfoController {
    @Autowired
    private IUserInfoService userInfoService;

    @GetMapping("/sendVerifyCode")
    public JsonResult<UserInfo> sendVerifyCode(String phone) {
        return userInfoService.sendVerifyCode(phone);
    }
}

3. application.properties 配置类文件

找一个发短信的服务商,如去京东万象找一个短信服务商,根据它提供的接口来实现发送短信功能;
在这里插入图片描述
在这里插入图片描述

转码结果:

sms.url=https://way.jd.com/kaixintong/kaixintong?mobile={0}&content=\u3010\u51ef\u4fe1\u901a\u3011\u60a8\u7684\u9a8c\u8bc1\u7801\u662f\uff1a{1}&appkey={2}
sms.appkey=f3c4f8c6845efddac0420ebbfeae256f

4. 具体实现

// URL 和 appkey 是上面配置文件中的URL和appkey
@Value("${sms.url}")
private String url;
@Value("${sms.appkey}")
private String appkey;

@Override
public JsonResult<UserInfo> sendVerifyCode(String phone) {
    // 1、创建随机验证码(4位)
    String code = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 4);

    // 2、发送短信
    // java 如何发起 Http 请求
    // 参数1:请求 url,参数2:响应值类型对象(将返回值转换成什么类型对象)
    // 参数3:路径上的参数值
    RestTemplate restTemplate = new RestTemplate();
    String message = restTemplate.getForObject(url, String.class, phone, code, appkey);
    System.out.println("message = " + message);
    if (!message.contains("Success")) {
        throw new LogicException("短信发送失败");
    }

    // 4、缓存验证码-以 phone 为 key,code 为 value
    return userInfoRedisService.sendVerifyCode(phone, code);
}

总结

上面就是手机发送短信验证码的总结了,代码仅供参考,欢迎讨论交流。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值