一对一直播app开发,实现获取验证码功能

现在很多一对一直播app开发的登录注册都需要用到手机验证码,正好这几天公司也有个新项目,其中注册账户就需要验证码。在网上找了一些资料学习了以后,自己也写了一个短信发送功能。

项目目录结构,短信发送所需的类在util包里(JsonResult不是)
这是我的项目结构,短信发送的几个类都在util包里。

我们可以看一下短信码通知短信的API文档
这是请求参数

这是请求地址和请求方式

 

注册登录后,ACCOUNT SID和****AUTH TOKEN平台都会给你。smsContent是需要我们在模板中创建的短信内容,审核过后才能使用。在后面的类中,也必须严格按照模板去定义内容。

代码块
首先是生成验证码的RandUtil类。这里验证码我定义的是6位数,利用随机数生成,为GetMessage提供验证码。

import java.util.Random;
public class RandUtil {

    public static String getRandNum() {
        String randNum = new Random().nextInt(1000000)+"";
        System.out.println("生成"+randNum);
        if (randNum.length()!=6) {   //如果生成的不是6位数随机数则返回该方法继续生成
            return getRandNum();
        }
        return randNum;
    }

}

然后是一个发送验证码的工具类QueryUtil。这个类我们在里面写MD5的签名加密sig和时间戳timestamp的获取
 

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;





/**
 * 类描述:发送验证码工具类
 */
public class QueryUtil {

    public static String queryArguments(String ACCOUNT_SID,String AUTH_TOKEN, String smsContent,String to) {

        String timestamp = getTimestamp(); //时间戳
        String sig =  MD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);//签名认证

        String str = "accountSid="+ACCOUNT_SID+"&smsContent="+
                smsContent+"&to="+to+"&timestamp="+timestamp+"&sig="+sig;
        return str;
    }
    /**
     * MD5加密
     * @param args
     * @return
     */
    public static String MD5(String... args){ //动态参数
        StringBuffer result = new StringBuffer();
        if (args == null || args.length == 0) {
            return "";
        } else {
            StringBuffer str = new StringBuffer();
            for (String string : args) {
                str.append(string);
            }
            System.out.println("加密前:\t"+str.toString());

            try {
                MessageDigest digest = MessageDigest.getInstance("MD5");
                byte[] bytes = digest.digest(str.toString().getBytes());
                for (byte b : bytes) {
                    String hex = Integer.toHexString(b&0xff);  //转化十六进制
                    if (hex.length() == 1) {
                        result.append("0"+hex);
                    }else{
                        result.append(hex);
                    }
                }

            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        System.out.println("加密后:\t"+result.toString());
        return result.toString();
    }
    /*
     * 获取时间戳
     */
    public static String getTimestamp(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        return sdf.format(date);
    }

}

写完这些工具类以后就可以开始写获取短信验证码类GetMessage。因为用到JSONObject所以需要导入以下几个包:
这里写图片描述

 

import net.sf.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

/**
 * 获取短信验证码类
 * @author LB_lfx
 *
 *
 */
public class GetMessage {


    /**
     * 用户ID
     */
    public static final String ACCOUNT_SID = "7e04461fad07********7e478e3eec663";//这里填写你在平台里的ACOUNT_SID

    /**
     * 密钥
     */
    public static final String AUTH_TOKEN = "10aa253a6ece4********ae987032b66";

    /**
     * 请求地址前半部分
     */
    public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";//请求地址是固定的不用改

    public static  String randNum = RandUtil.getRandNum();

    public  static String smsContent = "【****】您的验证码为"+randNum+",请于"+2+"分钟内正确输入,如非本人操作,请忽略此短信。";
    /**
     * (获取短信验证码)
     * @param to
     * @return String
     */
    public static String getResult(String to) {
        randNum = RandUtil.getRandNum();
        String smsContent = "【****】您的验证码为"+randNum+",请于"+2+"分钟内正确输入,如非本人操作,请忽略此短信。";            //这里的randNum 和 smsContent和上面的静态变量是一样的,可删除可保留
        String args = QueryUtil.queryArguments(ACCOUNT_SID, AUTH_TOKEN, smsContent, to);
        OutputStreamWriter out = null;
        InputStream in = null;
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer();


        try {
            URL url = new URL(BASE_URL);
            URLConnection connection = url.openConnection(); //打开链接
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setConnectTimeout(5000);  //设置链接超时
            connection.setReadTimeout(10000);    //设置读取超时

            //提交数据
            out = new OutputStreamWriter(connection.getOutputStream(),"utf-8");
            out.write(args);
            out.flush();

            //读取返回数据
            br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line = "";
            while((line = br.readLine())!=null){
                sb.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (br!=null) {
                    br.close();
                }
                if (out!=null) {
                    out.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        JSONObject jsonObject = JSONObject.fromObject(sb.toString());
        System.out.println(jsonObject);
        Object object = jsonObject.get("respCode");
        System.out.println("状态码:"+object+"验证码:"+randNum);
        System.out.println(!object.equals("00000"));
        if (!object.equals("00000")) {
            return object.toString();
        }else{

            return randNum;
        }


    }
//  测试功能
//  public static void main(String[] args) {
//      String result = getResult("你的手机号");
//      System.out.println("验证码:"+randNum+"\t"+result);
//  }
}

至此,一对一直播app开发的短信验证码发送类就写完了。
声明:本文由云豹科技转发自白菜白菜我是萝卜博客,如有侵权请联系作者删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值