在Web项目中手机短信验证码实现的全过程记录

网友投稿 341 2023-03-07


在Web项目中手机短信验证码实现的全过程记录

前言

最近在做远程智能水表管理系统这个过程有一个功能是在注册页面可以使用手机注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下。下面话不多说了,来一起看看详细的介绍吧。

短信验证码实现流程

1、构造手机验证码:使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数;

2、使用接口向短信平台发送手机号和验证码数据,然后短信平台再把验证码发送到制定手机号上,接口参数一般包括:目标手机号,随机验证码(或包含失效时间),平台接口地址,平台口令;

3、保存接口返回的信息(一般为json文本数据,然后需转换为json对象格式);

4、将手机号--验证码、操作时间存入Session中,作为后面验证使用;

&nbshttp://p;    5、接收用户填写的验证码及其他数据;

6、对比提交的验证码与Session中的验证码是否一致,同时判断提交动作是否在有效期内;

7、验证码正确且在有效期内,请求通过,处理相应的业务。

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

为了简化流程,我们在就使用固定手机验证码而不采用随机产生的数作为验证码

在此我们有一个前端页面一个后台逻辑处理页面,下面就该两项进行简单说明:

前端页面

<%

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);

//请自己反序列化返回的字符串并实现自己的逻辑

%>

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

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 "";

}

//获取响应内容

Shttp://tring 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源码地址:http://xiazai.jb51.net/201712/yuanma/MobileRegist(jb51.net).rar

本demo所用短信服务商地址为:http://106jiekou.com/login/?ReturnUrl=/member/trigger/templates/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Maven仓库之本地仓库、远程仓库
下一篇:开源api管理平台(开源api管理平台有哪些)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~