java实现短信验证码发送功能

java实现短信验证码发送功能

这是一篇使用java+jquery+ajax实现的发送短信验证码功能的技术分享贴,分享给需要的同学,可以用作毕业设计或者自建网站等等(手机号注册、验证等功能)。废话少说,我们进入正题:
准备工作:首先这个功能需要第三方短信平台支持,我这里使用了秒滴平台,也可以使用阿里或者百度的平台,响应速度比较快一点(秒滴有时候响应会有点慢,大型项目不推荐,我们这里用来测试,因为秒滴刚注册会赠送十元账户额度),秒滴每条信息是0.06元。
我们先去秒滴注册个账号,网址:[http://www.miaodiyun.com/auth/login]
接下来我们需要一个发送短信的模板,进入秒滴个人中心后点击左侧配置管理,进去之后新建模板,新建成功之后提交审核,一般半个小时就会审核完成。另外,秒滴可能会派销售人员打电话,嫌麻烦的话就说是学生个人测试用的就ok了。
现在我们可以编写核心类了:
(文章末尾有现成的项目下载地址)

package com.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;




import org.apache.commons.codec.digest.DigestUtils;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
/**
 * 发送短信验证码
 * @author QQ:1064885682(有疑问可以加我)
 *
 */
public class PhoneCode {
    private static Logger log = Logger.getLogger(PhoneCode.class);
    // 短信请求的地址
    String url = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
    // 请求的头
    String title = "Content-type:application/x-www-form-urlencoded";
    // 密匙ACCOUNT SID(填入自己的sid)
    String accountSid = "";
    //填入自己的authtoken
    String authtoken = "";
    // 响应数据的格式
    String respDataType = "JSON";
    // 求的内容
    String smsContent =null;
    // 手机号
    String to = "";
    /**
     * 单元测试
     */
    @Test
    public void test() {
        String code = getCode(to);
        log.debug(code);
        Assert.assertNotNull(code);
    }

    /**
     * 生成随机数,用作验证码
     * @return验证码
     */
    public  String getSMSCode(){
        Random random=new Random(); 
        String nextInt = random.nextInt(1000000)+"";
        if(nextInt.length()!=6){
            return getSMSCode();
        }   
        else{
            return nextInt;
        }   
    }

    int min = 30;
    public String getCode(String to){
        int minue = 30;
        System.out.println("String to"+to);
        String timestamp = getTimestamp();
        String smsCode = getSMSCode();
        smsContent=String.format("【XXXX科技】您的验证码为"+smsCode+",请于"+minue+"分钟内正确输入,如非本人操作,请忽略此短信。");//这里需要与模板匹配
        System.err.println(smsContent.length());
        String boby="accountSid="+accountSid+"&smsContent="+smsContent+"&to="+to+timestamp+"&respDataType="+respDataType;
        String sta = post(url,boby);
        System.out.println(sta);
        System.out.println("body:"+boby);
        //return post;
        return smsCode;
    }

       // 返回时间和签名
    public String getTimestamp() {
        // 时间戳
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyMMddHHmmss");
        String timestamp = simpleDateFormat.format(date);
        // 获取签名
        String sig = DigestUtils.md5Hex(accountSid + authtoken + timestamp);
        return "×tamp=" + timestamp + "&sig=" + sig;
    }

    // 通过post方法提交数据和获取提交的数据
    public String post(String url, String boby) {
        String redilt = null;
        try {
            URL urls = new URL(url);
            URLConnection openConnection = urls.openConnection();
            // 设置连接参数
            openConnection.setDoOutput(true);
            openConnection.setDoInput(true);
            //超时
            openConnection.setConnectTimeout(5000);
             //读取超时
            openConnection.setReadTimeout(20000);
            //提交发送的数据
            OutputStreamWriter out = new OutputStreamWriter(openConnection.getOutputStream(), "utf-8");
            out.write(boby);
            out.flush();
            out.close();

            // 获取发送的数据
            BufferedReader buff = new BufferedReader(new InputStreamReader(openConnection.getInputStream(), "utf-8"));
            String str = null;
            boolean boo = true;
            while ((str = buff.readLine()) != null) {
                if (boo)
                    boo = false;
                else
                    str += System.lineSeparator();
                redilt += str;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return redilt;
    }

}

运行结果:java实现短信验证码发送功能_第1张图片

源码地址:源码地址
最后,项目实际应用时推荐使用ajax异步提交,返回验证码,进行验证,这里就不累述啦。

你可能感兴趣的:(java实现短信验证码发送功能)