如何在Web项目完成短信验证码

在作远程智能水表管理系统这个过程有一个功能是在注册页面可使用手机注册,找了许久才大体了解了手机验证码实现流程,今天在此和你们分享一下。前端

短信验证码实现流程

一、构造手机验证码:使用random对象生成要求的随机数做为验证码,例如4位验证码:1000~9999之间随机数;
二、使用接口向短信平台发送手机号和验证码数据,而后短信平台再把验证码发送到制定手机号上,接口参数通常包括:目标手机号,随机验证码(或包含失效时间),平台接口地址,平台口令;
三、保存接口返回的信息(通常为json文本数据,而后需转换为json对象格式);
四、将手机号--验证码、操做时间存入Session中,做为后面验证使用;
五、接收用户填写的验证码及其余数据;
六、对比提交的验证码与Session中的验证码是否一致,同时判断提交动做是否在有效期内;
七、验证码正确且在有效期内,请求经过,处理相应的业务。java

今天咱们就前4步进行实现:

为了简化流程,咱们在就使用固定手机验证码而不采用随机产生的数做为验证码
在此咱们有一个前端页面一个后台逻辑处理页面,下面就该两项进行简单说明:json

前端页面

<body>
        <h1>
            <%
            Send send = new Send();
            String PostData = "account=JamesXT&password=18770918982lkx&mobile=18770918982&content="+java.net.URLEncoder.encode("您的订单编码:4557。如需帮助请联系客服。","utf-8");
            //out.println(PostData);
            String ret = Send.SMS(PostData, "http://sms.106jiekou.com/utf8/sms.aspx");
            out.println(ret);
            //请本身反序列化返回的字符串并实现本身的逻辑
        %>

        </h1>
    </body>

PostData:就是想短信服务平台提交的待处理的数据,它通常包括短信服务平台注册者的用户帐号名,密码,以及你想向谁发送短信验证码以及短信验证码所属信息的完整内容。app

String ret = Send.SMS(PostData, "http://sms.106jiekou.com/utf8/sms.aspx"); 
 
 这个是将数据和短信服务平台的网址进行绑定,即该提交数据交付哪一个平台进行处理。

后台逻辑处理类:

public class Send {

   //SMS方法中有两个参数,这个参数是由前台页面提交的PostData和前者绑定的短信服务地址肯定的
    public static String SMS(String postData, String postUrl) {
        try {
            //发送POST请求
            URL url = new URL(postUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setUseCaches(false);
            conn.setDoOutput(true);

            conn.setRequestProperty("Content-Length", "" + postData.length());
            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            //将前台提交的数据放入输出流中,即向短信服务平台发送该条业务请求
            out.write(postData);
            out.flush();
            out.close();

            //获取响应状态码
            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                System.out.println("connect failed!");
                return "";
            }
            //获取响应内容
            String line, result = "";
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            while ((line = in.readLine()) != null) {
                result += line + "\n";
            }
            in.close();
            return result;
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
        return "";
    }
}

最后附上Demo源码地址:连接:https://pan.baidu.com/s/1bYwLpc 密码:8lfr
本demo所用短信服务商地址为:http://www.106jiekou.com/memb...dom

相关文章
相关标签/搜索