2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 发送手机短信获取验证码功能

发送手机短信获取验证码功能

时间:2024-05-15 06:10:38

相关推荐

发送手机短信获取验证码功能

因为移动端的方便,现在网络上很多的网站与应用都有与实现用户手机绑定的功能。这样做的好处很多,例如账号登陆、修改密码、在线支付……等功能模块都可以与手机实时获取验证码短信结合,来确保用户的安全性操作。

而这整功能模块的实现,我把它大致分为三个步骤:

(1)前端触发获取验证码,同步显示有效验证倒计时;

(2)后台通过代理平台发送验证短信;

(3)用户提交验证信息,后台逻辑判断处理。

一、首先,与大家分享下前端的实现:

如图:输入完正确的手机号码后再触发有效验证倒计时。

JS代码如下(头部需引入jquery):

function getCode(){var tel = $("#mobile").val();//获取手机号码输入框值var reg = /^1[3|4|5|8][0-9]\d{4,8}$/;if(!reg.test(tel)){ //校验手机号码格式alert("请先输入您的正确手机号!");document.form1.o_tel.focus();return false;}var paras = "o_tel="+tel;//jquery post方法同步提交//(提交地址; data:返回值)$.post('<%=basePath%>mobile/sendCode?'+paras,function(data) {if(data!=null&&typeof(data)!="undefined"){var msg = data.msg; //返回值为json格式if(msg!=null&&typeof(msg)!="undefined"&&msg=="SUCCESS"){get_code_time(); //发送成功则出发get_code_time()函数}else{alert("短信验证码发送失败!请重新获取。");}}else{alert("短信验证码发送失败!请重新获取。");}},"json");}var wait = 120;function get_code_time(){if(wait==0){$("#updateverify").removeAttr("disabled");//移除获取验证码按钮的disabled属性$("#updateverify").val("获取验证码");wait = 120;}else{$("#updateverify").attr("disabled", true);//设置获取验证码按钮为不可触发$("#updateverify").val("剩(" + wait + ")秒");wait--;setTimeout("get_code_time()", 1000); }}

二、接下来我们就该在后台进行短息发送处理了(Demo是用java整合Spring MVC框架写的):

/*** 订单查询发送验证码* @param request* @param response* @return*/@RequestMapping(value="/sendCode",method={RequestMethod.POST,RequestMethod.GET})public String sendCode(HttpServletRequest request,HttpServletResponse response){HttpSession session = request.getSession();String ret="";String o_tel = request.getParameter("o_tel");//获取前端传送过来的电话号码if(o_tel!=null&&o_tel!=""){int Random = (int) ((Math.random()*9+1)*1000);//随机生成的4位数(验证码)String mes = Random+"(用于测试的验证码,两分钟内有效)【学而思博客】";//需在短信中显示的文字信息描述ApiSendMobile asm = new ApiSendMobile();String msg = asm.sendSM(o_tel, mes);//发送短信if("发送成功".equals(msg)){ret = "{\"msg\":\"SUCCESS\"}";//把验证码与电话号码存入session中,并设置120秒有效期限session.setAttribute("code", Random);session.setAttribute("tel", o_tel);session.setMaxInactiveInterval(2*60);}else {ret = "{\"msg\":\"ERROR\"}";}}else{ret = "{\"msg\":\"ERROR\"}";}response.setContentType("application/json;charset=UTF-8");PrintWriter writer = null;try {writer = response.getWriter();} catch (IOException e) {e.printStackTrace();}writer.write(ret);//推送回前端return null;}

后台的大概逻辑就是这样,不熟悉SpringMVC的请不要在意太多细节。因为接下来的才是我要说的关键点:

ApiSendMobile asm =newApiSendMobile();

String msg = asm.sendSM(o_tel, mes);

嗯,没错ApiSendMobile这货是我已经封装好的一个类。先来说说目前我们常用的发送短信方法,

1、与运营商联系,调用运营商的接口,把要发送的内容与手机号给运营商,让运营商去发送。(例如Mas机平台,附上相关链接:/wufeishimeng/article/details/4204093)

2、自己去买设备,然后在基于它进行二次开发(例如短信猫,相关链接:/backtract/blog/133629)

3、专门的短信服务公司,让后通过网络服务形式调用第三方接口发送(例如飞信)

额,才疏学浅。目前我知道的就这三种吧,其中第一种方式是稳定快速有保障的(因为运营商们要收费),第二种就出现延迟或者遗漏现象的几率就会很大,最后一种不知道现在是否还可行了。

我们言归正传,本文的例子就是用了第一种方法,上代码:

package com.xiaoxm.util;import java.io.BufferedReader;import com.jasson.im.api.APIClient;/*** ApiTestDemo*/public class ApiSendMobile{private long smId = 1;private int smType = 0;private String host = "mas地址";private String dbName = "mas";private String apiId = "用户apid";private String name = "用户名";private String pwd = "密码";private APIClient handler = new APIClient();BufferedReader in = null;public ApiSendMobile(){}public void init(){int connectRe = handler.init(host, name, pwd, apiId,dbName);if(connectRe == APIClient.IMAPI_SUCC)info("初始化成功");else if(connectRe == APIClient.IMAPI_CONN_ERR)info("连接失败");else if(connectRe == APIClient.IMAPI_API_ERR)info("apiID不存在");if(connectRe != APIClient.IMAPI_SUCC){System.exit(-1);}}public void release(){handler.release();Thread.currentThread().interrupt();}public String sendSM(String mobile,String sendContent){init(); //初始化 相关参数String msg = "";int result = 0;result = handler.sendSM(mobile, sendContent, smId );if(result == APIClient.IMAPI_SUCC){msg = "发送成功";}else if(result == APIClient.IMAPI_INIT_ERR)msg = "未初始化";else if(result == APIClient.IMAPI_CONN_ERR)msg = "数据库连接失败";else if(result == APIClient.IMAPI_DATA_ERR)msg = "参数错误";else if(result == APIClient.IMAPI_DATA_TOOLONG)msg = "消息内容太长";else if(result == APIClient.IMAPI_INS_ERR)msg = "数据库插入错误";elsemsg = "出现其他错误";release(); //释放资源return msg;}public void error(Object obj , Throwable thr){info(obj);thr.printStackTrace();}public void info(Object obj){System.out.println(obj);}public void quit(){release();System.exit(0);}}

因为涉及到隐私,所以什么地址、用户名密码之类的,自己去向运营商联系获取吧……

要注意哦:这个类里引入了importcom.jasson.im.api.APIClient;

还有就是项目中也必须加一个jar包:ImApi.jar

如果有去和运营商合作的话,他们会给你文档和所需的开发包之类的,所以你大可放心。

嗯,该功能模块的核心内容都已经介绍得差不多了,就只剩下用户查看短信验证信息,输入了传到后台,然后再获取刚才发送短信成功时存入session中连个值进行对比验证。我也就不在此啰嗦……

结语:天下没有白吃的午餐,垄断行业就是屌。水平不足,文章中也许存在着许多不足之处,还望大家指点与纠正。坚持博客精神,分享是一种快乐!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。