聚合短信API,手机验证登录

今天在项目中遇到了一个需要手机验证登录的需求,在这里简单的记录一下。聚合短信API,手机验证登录
首先需要在聚合平台里面进行公司资质认真 飞机票:https://www.juhe.cn/docs/api/id/54
认证成功后 点击我的接口

继续在这里插入图片描述
进行短信模板审核

通过后,就可以还是写代码了
写一个类,连接聚合API

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class SMSCode {

    //把手机号码和随机验证码传递过来
    public static boolean sendCode(String phoneNumber, String code) throws Exception {

        String str_code = URLEncoder.encode("#code#=" + code, "UTF-8");
        //包装好URL对象,将接口地址包装在此对象中
        URL url = new URL("http://v.juhe.cn/sms/send?mobile=" + phoneNumber +
                "&tpl_id=这里写短信模板id&tpl_value=" + str_code + "&key=这里写前面的key}");
        /* 短信模板id */                            /* 短信应用接口的key */
        //打开连接,得到连接对象
        URLConnection connection = url.openConnection();
        //向服务器发送连接请求
        connection.connect();
        //获得服务器响应的数据
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        StringBuffer buffer = new StringBuffer();
        String lineDate = null;
        while((lineDate = bufferedReader.readLine()) != null) {
            buffer.append(lineDate);
        }
        bufferedReader.close();
        if(buffer.toString().indexOf("\"error_code\":0")>=0 ) {
            return true;
        }

        return false;
    }


}

下面发送验证码的controller和登录的controller

import com.example.demo.test.SMSCode;
import com.example.demo.test.removeAttrbute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Random;
import java.util.regex.Pattern;

@RestController
public class SMSCodeController {

    @RequestMapping("/sendCode")
    public String sendCode(HttpServletRequest req)  {
    String phoneNumber=req.getParameter("phoneNumber");

        if (phoneNumber.trim().equals("") || phoneNumber == null) {
            System.out.println("手机号码为空!");

        } // 手机号码格式判断
        if (!Pattern.matches("^1[3|4|5|7|8][9]\\d{9}$", phoneNumber)) {
            System.out.println("手机格式错误!");

        }
        StringBuffer buffer = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            buffer.append(random.nextInt(10));
        }
        try {
            if (!SMSCode.sendCode(phoneNumber, buffer.toString())) {
                return  "发送失败";
            } else {
                // 将验证码、手机号码和当前的系统时间存储到session中
                req.getSession().setAttribute("code", buffer.toString());
                req.getSession().setAttribute("number", phoneNumber);
                req.getSession().setAttribute("time", System.currentTimeMillis());



            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return  "ok";
    }

    @RequestMapping("/logn")
    public String Logn(HttpServletRequest req)  {
        String phoneNumber=req.getParameter("phoneNumber");
        String code=req.getParameter("code");
        //从session中拿出数据
        HttpSession session = req.getSession();
        String code_session = (String)session.getAttribute("code");
        String number = (String)session.getAttribute("number");
        Long time = (Long)session.getAttribute("time");
        //清除session中的数据
        session.removeAttribute("code");
        session.removeAttribute("number");
        session.removeAttribute("time");

        if(code_session == null || code_session.trim().equals("")) {
            System.out.println("验证码为空!");

            return "验证码为空" ;
        }
        //验证码登录时效10分钟
        if((System.currentTimeMillis() - time) / 1000 / 60 >= 0) {
            System.out.println("验证码已过期!");

            return "验证码已过期!" ;
        }
        //发送验证码的手机号码和登录时得到手机号码必须一致
        if(!number.trim().equalsIgnoreCase(phoneNumber)) {
            System.out.println("手机号码不一致!");

            return "手机号码不一致!";
        }



        return  "ok";
    }

}

至此,调用这个controller,就可以发送了验证了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值