SpringBoot集成手机验证码业务(榛子云短信服务)

一、手机验证码的作用

        举个例子:如果你开发了一个系统,那这个系统肯定会有登录功能对吧?那如果说你的密码忘记了呢?

        这个时候我们的解决方式是:1、联系管理员;2、再注册一个(emmm,那我以前的资料就没了呀);3、对于管理员自己而言,手动修改数据库或者查看数据库(万一密码加密呢)

        为了解决这么个事情,所以我们就引入了手机验证码的功能。

作用:

        1、帮助用户直接通过手机号码进行登录,从而解决密码设置繁琐、忘记密码等问题,让账号的登录变得更加方便快捷。同时对于记不住自己的设定账号的用户,直接通过手机+手机验证码的方式登录,对于用户来说更加便利。

        2、帮助用户进行交易的确认。比如网购、订购套餐等等,都可能会碰到需要接收手机验证码的操作。通过手机验证码,可以再次确认用户是否是处于自身的意愿去进行的交易,是否是本人进行的交易,是否对交易的内容有充分了解。

二、短信服务的选择

        国内有一大堆短信认证的平台,就我所知道的。有腾讯短信服务、阿里短信服务(要求网站上线,或者是企业账号)、榛子云(可以个人体验)等。

三、我选择了榛子云

主要原因有三个:

        1、操作简单,可方便快捷实现;

        2、支持个人体验套餐

        3、20块钱500条信息(还算能接受)

弊端:

        个人使用的话,人工客服不理人,技术支持不理你。而且一个很重要很重要的点:在一年里面要用完他,不然就用不了,剩余短信不退款。可恶!!反正我是后面才知道的。但是呢,如果你要玩玩这个功能,也就只能权衡一下利弊。对吧,毕竟是开发者嘛,练练手还是没问题的。

四、注册、登录、充值

        1、http://sms_developer.zhenzikj.com/zhenzisms_user/register.html 访问这个网址,至于注册的流程,我就不细说了,应该大家都会操作的。(略)

        2、登录

                如果你购买了,这里就会显示短信条数

SpringBoot集成手机验证码业务(榛子云短信服务)_第1张图片

         3、充值

                这里最低充值是20块钱,充值完成,就可以看到上面那张图啦

SpringBoot集成手机验证码业务(榛子云短信服务)_第2张图片

五、查看SDK 下载

点击进入这个榛子-云短信

SpringBoot集成手机验证码业务(榛子云短信服务)_第3张图片

         我们用的是spring boot框架进行集成开发,因此我们可以点击Maven,我们会得到下面这个依赖:


    com.zhenzikj
    zhenzisms
    2.0.2

 文档也给我们提供了一个js倒计时demo,我们也可以下载下来。解压缩后页面很简洁:

SpringBoot集成手机验证码业务(榛子云短信服务)_第4张图片

SpringBoot集成手机验证码业务(榛子云短信服务)_第5张图片

 六、开始搭建Spring Boot环境 

        1、在idea里面

                SpringBoot集成手机验证码业务(榛子云短信服务)_第6张图片这里面我使用的是jdk8,打包成war,你可以根据你的情况自行改动

SpringBoot集成手机验证码业务(榛子云短信服务)_第7张图片

 选择完成之后,点击finish。

        2、添加依赖

SpringBoot集成手机验证码业务(榛子云短信服务)_第8张图片

 七、进行yaml文件配置

        在main下的resource文件下,新建一个application.yaml (温馨提示:记得key-value之间 :有空格)

sms:
  apiUrl: https://sms_developer.zhenzikj.com
  appId: appId(你的appid)
  appSecret: 你的应用签名
  timeOut: 3
  codeLength: 6

     那appId和appSecret在哪里获取呢?

     http://sms_developer.zhenzikj.com/zhenzisms_user/index.html

SpringBoot集成手机验证码业务(榛子云短信服务)_第9张图片

八、编写配置类:

        新建一个main下创建一个config包:新建一个类ZhenziCodeConfig(随便命名)

package config;

import com.zhenzi.sms.ZhenziSmsClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Configuration
public class zhenziCode {

    @Value("${sms.apiUrl}")
    private String apiUrl;

    @Value("${sms.appId}")
    private String appId;

    @Value("${sms.appSecret}")
    private String appSecret;

    public String printRandom(){
        //取随机产生的验证码(4位数字)
        Random rnd = new Random();
        int randNum = rnd.nextInt(8999) + 1000;
        //将整型数字转化成字符串
        String randStr = String.valueOf(randNum);
        return randStr;
    }

    public String sendMessage(String randNum,String phoneNum) throws Exception {
        ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret);
        Map params = new HashMap();
        params.put("number", phoneNum);
        params.put("templateId","8345");
        String[] templateParams = new String[2];
        templateParams[0] = randNum;
        templateParams[1] = "5分钟";
        params.put("templateParams", templateParams);
        String result = client.send(params);
        return result;
    }

}

九、新建controller类

        1、通过随机数生成验证码并且保存在session里面(可以用redis设置过期时间)

package cn.com.sise.book.controller;

import cn.com.sise.book.config.zhenziCode;
import cn.com.sise.book.domain.phone;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;


@Controller
public class PhoneNumContoller {

    @Autowired
    private zhenziCode zhenziCode;

    /***
     * 验证手机号码 并且发送验证码
     * @param request
     * @param phoneNum
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping(value = "/PhoneNumCode",method = RequestMethod.POST)
    public String toCode(HttpServletRequest request, String phoneNum) throws Exception {
        HttpSession session = request.getSession(true);
        String random = zhenziCode.printRandom();
        session.setAttribute("randStr",random);
        System.out.println("sendCode:"+random);
        System.out.println(phoneNum);
        return zhenziCode.sendMessage(random,phoneNum);
    }
}

         2、新建一个跳转到index.html的试图控制器

@Controller
public class IndexController {
    @RequestMapping("/")
    public String toIndex(){
        return "index";
    }
}

十、将刚才下载的js代码复制到 resource 下面:

        资源放在static,页面放在templates里面

SpringBoot集成手机验证码业务(榛子云短信服务)_第10张图片

         注意修改index.html的资源路径

SpringBoot集成手机验证码业务(榛子云短信服务)_第11张图片

十一、编写index页面的请求地址 

    $(function(){
		$(".captchaBtn").on("click", function(){
            let that = this;
            let phone =$("#phoneNum").val();
            if (phone==""||phone==null || phone.length<11 || phone.length>11){
                return alert("请正确的电话号码")
            }
			$.post("/PhoneNumCode",{
               "phoneNum": phone
            },function (res){
                res = JSON.parse(res)
                if (res.code==0){
                    countdown(that);
                    return alert(res.data)
                }
                return alert(res.data);
            })
		})
    });

SpringBoot集成手机验证码业务(榛子云短信服务)_第12张图片

SpringBoot集成手机验证码业务(榛子云短信服务)_第13张图片

                至此,我们就已经完成了整个手机验证码的验证功能。下面附一张错误码

SpringBoot集成手机验证码业务(榛子云短信服务)_第14张图片

    哈哈,最后,你学会了吗?如果有问题可以评论去见哦!

    如果你需要源码,可以进入我的主页去下载(免费)

你可能感兴趣的:(maven,springboot)