短信验证码

 

在写仿天猫项目需要使用电话号码进行注册,然后填写短信验证码进行验证。使用的是秒滴验证码公司中的验证第三方平台,代码如下:

package message;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.jms.Message;

import org.json.JSONObject;

/**
 * 发送验证码
 * @author Administrator
 *
 */
public class GetMessageCode {
    private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
    private static final String ACCOUNT_SID = "aec4e6dc80ac42d18c66431055a219c0";
    private static final String AUTH_TOKEN = "573c78f24694442c9b70dc4d1609d3e5";
    /**
     * 根据相应的手机号码,发送验证码
     * @param phone
     * @return
     */
    public static String getCode(String phone){
        String random = smsCode();
        String timestamp   = getTimestamp();
        String sig    = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp);
        String tamp   ="【XXXXXXX】登录验证码:"+random+",如非本人操作,请忽略此短信。";
        
            OutputStreamWriter out = null;
            BufferedReader br = null;
            StringBuilder result = new StringBuilder();
            try {
                URL url = new URL(QUERY_PATH);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
                connection.setDoInput(true);//设置是否允许数据写入
                connection.setDoOutput(true);//设置是否允许参数输出
                connection.setConnectTimeout(5000);//设置连接响应时间
                connection.setReadTimeout(10000);//设置参数读取时间
                //Content-type:application/x-www-form-urlencoded
                connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
                //提交数据
                out = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
                String args = getQueryArgs(ACCOUNT_SID, tamp, phone, timestamp, sig,"JSON");
                out.write(args);
                out.flush();
                
                //读取返回结果
                br =  new BufferedReader(new InputStreamReader(connection.getInputStream())); 
                String temp="";
                while ((temp=br.readLine())!=null) {
                    result.append(temp);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //JSONObject json = new JSONObject(result.toString());
            //String respCode = json.getString("respCode");
            //String defuatRespCode = "00000";
            //if(defuatRespCode.equals(respCode)){
                return random;
            //}
    //else {
            //return result.toString();
                //return defuatRespCode;
            //}
        
        
    }
    
    /**
     * 获取当前时间
     * @return
     */
    public static String getTimestamp(){
        
        return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
    }
    
    
    /**
     * 参数拼接
     * @param accountSid
     * @param smsContent
     * @param to
     * @param timestamp
     * @param sig
     * @param respDataType
     * @return
     */
    public static String getQueryArgs(String accountSid,String smsContent,String to,String timestamp,String sig,String respDataType){
        String bb ="accountSid="+accountSid+"&smsContent="+smsContent+"&to="+to+"&timestamp="+timestamp+"&sig="+sig+"&respDataType="+respDataType;

        return bb;
        //02:08:33
    }
    
    /**
     * sig签名
     * @param sid
     * @param token
     * @param timestamp
     * @return
     */
    public static String getMD5(String sid,String token,String timestamp){
        
        StringBuilder result = new StringBuilder();
        String source = sid+token+timestamp;
        try {
        MessageDigest digest = MessageDigest.getInstance("MD5");
            byte[] bytes = digest.digest(source.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) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result.toString();
    }
    
    /**
     * 获取验证码
     * @return
     */
    public static String smsCode(){
        String ran = new Random().nextInt(1000000)+"";
        if(ran.length()!=6){
            return smsCode();
        }else {
            return ran;
        }
    }
    
//    public static void main(String[] args) {
//        //String time = getTimestamp();
//        //System.out.println(time);
//        
//        //String md5 = getMD5("1", "2", "3");
//        //System.out.println(md5.length());
//        
//        //for (int i = 0; i < 50; i++) {
//        //    System.out.println(smsCode());
//        //}
//        
//        String code = getCode("17670651884");
//        System.out.println(code);
//    }
}

1、先在秒滴平台官网注册--》登录,然后如下图操作

创建模板,然后按照下图进行模板填写,通过审核便可以使用了

 

 然后再项目中创建上一个类,将上面的代码复制到类中,然后修改三处地方(黄色字体,红色背景的代码),便可使用。

    private static final String ACCOUNT_SID = "aec4e6dc80ac42d18c66431055a219c0";
    private static final String AUTH_TOKEN = "573c78f24694442c9b70dc4d1609d3e5";

    String tamp   ="【XXXXXX】登录验证码:"+random+",如非本人操作,请忽略此短信。";

 

如图,将上面的信息复制修改到自己需要的代码中,第三个参数:‘【】’中的信息就是前面模板中的短信签名,复制到里面就可以了,然后{1}要修改为random变量。所有需要进行修改的信息不能复制错了,多一个空格也会让代码的功能失效

 

posted @ 2018-09-01 10:53  北宫乾宇  阅读(2740)  评论(0)    收藏  举报