注册时要求获取手机短信码的实现(java)

在注册用户的时候,我们可能根据需求会需要进行手机短信的验证,本篇博客便是介绍如何实现该功能。(代码后端是基于java,框架用的是SSH)

要发向手机发短信当然就要用到第三方接口,我用的融合通信的接口。(到网站去注册后,会有客服联系你,给你相关语言的发开包,一开始会送你20条免费测试短信。客服挺好的不够用你可以再向她申请点。)

1.首先显示JSP界面代码(核心代码我已经标注蓝色):

   
    

用户注册

手机号码:

2.用javaScript来控制界面数据的获取和传送,以及用JQuery来实现数据的会显。

//短信验证码  
var InterValObj; //timer变量,控制时间    
var count = 60; //间隔函数,1秒执行    
var curCount;//当前剩余秒数    
var code = ""; //验证码    
var codeLength = 6;//验证码长度    
    
function sendMessage(){   
    curCount = count;    
    var jbPhone = $("#telephonename").val();   
    alert(111);
    alert(jbPhone);
    var jbPhoneTip = $("#telephonenameTip").text();    
    if (jbPhone != "") {    
      /*   if(jbPhoneTip == "√" || jbPhoneTip == "√ 短信验证码已发到您的手机,请查收"){  */   
            // 产生验证码    
            for ( var i = 0; i < codeLength; i++) {    
                code += parseInt(Math.random() * 9).toString();    
            }    
            // 设置button效果,开始计时    
            $("#btnSendCode").attr("disabled", "true");    
            $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");    
            InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次    
            // 向后台发送处理数据    
            $.ajax({    
                type: "POST", // 用POST方式传输    
                dataType: "text", // 数据格式:JSON    
                url: "register_sms.action", // 目标地址    
                data: "jbPhone=" + jbPhone +"&code=" + code,    
                error: function (XMLHttpRequest, textStatus, errorThrown) {     
                        
                },    
                success: function (data){     
                    data = parseInt(data, 10);    
                    if(data == 1){    
                        $("#telephonenameTip").html("√ 短信验证码已发到您的手机,请查收");    
                    }else if(data == 0){    
                        $("#telephonenameTip").html("× 短信验证码发送失败,请重新发送");    
                        return false;  
                    }else if(data == 2){    
                        $("#telephonenameTip").html("× 该手机号码今天发送验证码过多");    
                    }    
                }    
            });    
       /*  }  */   
    }else{    
        $("#telephonenameTip").html("× 手机号码不能为空");    
    }    
}  
    
//timer处理函数    
function SetRemainTime() {    
    if (curCount == 0) {                    
        window.clearInterval(InterValObj);// 停止计时器    
        $("#btnSendCode").removeAttr("disabled");// 启用按钮    
        $("#btnSendCode").val("重新发送验证码");    
        code = ""; // 清除验证码。如果不清除,过时间后,输入收到的验证码依然有效    
    }else {    
        curCount--;    
        $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");    
    }    
}    
    
$(function(){    
    $("input",$("#codename").next("span")).blur(function(){    
        var SmsCheckCodeVal = $("#codename").val();    
        // 向后台发送处理数据    
        $.ajax({    
            url : "register_checkCode.action",     
            data : {SmsCheckCode : SmsCheckCodeVal},     
            type : "POST",     
            dataType : "text",     
            success : function(data) {    
                data = parseInt(data, 10);    
                if (data == 1) {    
                    $("#codenameTip").html("");    
                } else {    
                    $("#codenameTip").html("× 短信验证码有误,请核实后重新填写");  
                      
                }    
            }    
        });   
        return true;      
    });    
});  

3.struts.xml的配置

 
		 
		 	/register.jsp
		 	 
4 Action中的代码

public class RegisterAction {
	HttpServletRequest request = ServletActionContext.getRequest();
	HttpServletResponse response = ServletActionContext.getResponse();
	HttpSession session = request.getSession();
	
	
    public static String url = "http://service.XXXXXXXXXXXXX";   //融云通信给的接口
    public static String userid = "XXXXXXXXXXXXXXX";             //注册时用户名
    public static String account = "XXXXXXXXXXXXXX";  		//此处可以不用设置
    public static String password = "XXXXXXXXXXXXXXX";  	//注册时密码
          
      
    private String phonename;  
      
    public String getPhonename() {  
        return phonename;  
    }  
  
    public void setPhonename(String phonename) {  
        this.phonename = phonename;  
    }  
 
    //注册-往数据库中添加注册信息  
    public String add(){  
      
        //显示注册界面  
      return "test";  
    }  
      
    //判断该手机号码是否已经注册  
   /* public void checkLoginname() throws Exception{  
          
        String result = "0";   
        //判断该手机号码是否已经注册  
        List userlist=userRegisterService.findUser(phonename);  
        if(userlist!= null && userlist.size() > 0){  
            result = "1";  
        }else{  
            result = "0";  
        }  
        PrintWriter out = response.getWriter();  
        out.write(result.toString());   
    }  
      */
       
     //验证手机短信是否发送成功   
    public void sms() throws Exception {    
    	
        String result = "0";    
        /** 手机号码 */    
        Object jbPhone=request.getParameter("jbPhone");   
        System.out.println("jbphone------------------------"+jbPhone);
        /** 短信验证码 */    
        Object code = request.getParameter("code");
        System.out.println("code---------------------------"+code);
        /** 短信验证码存入session(session的默认失效时间30分钟) */    
        session.setAttribute("code", code.toString());    
   
        /** 单个手机号发送短信的方法的参数准备 */    
        // 手机号码    
        String mobilephone = jbPhone.toString();    
        // 短信内容+随机生成的6位短信验证码    
        String content = "【XXXXXXX】注册验证码为:" + code.toString();   //自定义发送的内容  
          
            /** 单个手机号发送短信 */    
           if (!sendMessage(content, mobilephone)) {    
                result = "0";// 失败    
            } else {    
                result = "1";// 成功    
                }    
      
        PrintWriter out = response.getWriter();    
        out.write(result.toString());   
    }    
      
    // 验证短信验证码是否正确   
    public void checkCode() throws Exception{    
        String result = "0";    
        // 获取手动输入的手机短信验证码   
        String SmsCheckCode = (String)(request.getParameter("SmsCheckCode"));     
        // 获取session中存放的手机短信验证码    
        Object code =session.getAttribute("code");    
        try {    
            if(SmsCheckCode != code.toString() && !SmsCheckCode.equals(code.toString())){    
                result = "0";    
            }else{    
                result = "1";    
            }    
        } catch (Exception e) {    
            throw new RuntimeException("短信验证失败", e);    
        }     
        PrintWriter out = response.getWriter();    
        out.write(result.toString());    
    }      
      
//验证手机是否发送成功的方法  
   
    public static boolean sendMessage( String content, String mobileNumber) {    
    	 SmsBase smsBase = new SmsBase();                                    //SmsBase便是发送短信的核心类。此类我将在下文中贴出。
        // 单个手机号码发送    
        try {    
            String  retObj = smsBase.SendSms(mobileNumber, content);       //---------调用
            System.out.println("in sendMessage -------------------------");
            //System.out.println(retObj);  
            if (retObj == "未发送,编码异常") {     
                return false;    
            } else {    
                return true;    
            }   
        } catch (Exception ex) {    
            ex.printStackTrace();     
        }    
        return true;    
    }   
} 

5.发送短信核心类SmsBase。

public class SmsBase {
private String x_id="XXXXXXX";     //注册时用户名(最好用英文,中文名字没测试。)
private String x_pwd="XXXXXXX";	   //注册时密码	

public String SendSms(String mobile,String content) throws UnsupportedEncodingException{
	Integer x_ac=10;//发送信息
	HttpURLConnection httpconn = null;
	String result="Error";
	StringBuilder sb = new StringBuilder();
	sb.append("http://service.winic.org:8009/sys_port/gateway/index.asp?");
	
	//以下是参数
	sb.append("id=").append(URLEncoder.encode(x_id, "gb2312"));
	sb.append("&pwd=").append(x_pwd);
	sb.append("&to=").append(mobile);
	sb.append("&content=").append(URLEncoder.encode(content, "gb2312")); 
	sb.append("&time=").append("1");
	try {
		URL url = new URL(sb.toString());
		httpconn = (HttpURLConnection) url.openConnection();
		BufferedReader rd = new BufferedReader(new InputStreamReader(httpconn.getInputStream()));
		result = rd.readLine();
		rd.close();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			if(httpconn!=null){
				httpconn.disconnect();
				httpconn=null;
			}
	
		}
		return result;
	}
}

6.至此,全部实现就完成了。 界面的样子和手机短信界面截图如下。



手机短信:

注册时要求获取手机短信码的实现(java)_第1张图片


7.ok 搞定。














你可能感兴趣的:(java后端)