业务需求:
点击获取验证码之后出现60倒计时效果,且获取验证码按钮不可点击,同时手机会收到短信验证码,若收不到可60秒之后重复获取。

主要代码:
1、页面

 

 

<s:form id="getApplyCodeForm" method="post">
		<table width="92%" border="0" align="center" cellpadding="10" cellspacing="0">
			<tr>
				<td class="reg_left">手机号码:</td>
				<td width="160"><input id="tryUserAimCode"
					name="tryUserAimCode" class="easyui-validatebox" required="true"
					validtype="mobile" missingMessage="手机号码不能为空" />
					<input type="hidden" name="smsCount"
							id="smsCount" value="1"/>
				</td>
				<td class="reg_xxts"><a href="#" class="easyui-linkbutton"
					id="getTryCodeButton" onclick="getRegCode()">获取验证码</a>
				</td>
			</tr>
			
			<tr>
				<td> </td>
				<td colspan="2">
					<div class="xsnazzy" id="timeInfo" style="display: none;">
						<b class="xb1"></b><b class="xb2"></b><b class="xb3"></b><b
							class="xb4"></b><b class="xb5"></b><b class="xb6"></b><b
							class="xb7"></b>
						<div class="xboxcontent">
							<label for="male" id="infoValue"></label>
						</div>
						<b class="xb7"></b><b class="xb6"></b><b class="xb5"></b><b
							class="xb4"></b><b class="xb3"></b><b class="xb2"></b><b
							class="xb1"></b>
					</div></td>
			</tr>
		</table>
</s:form>

 2、js倒计时代码:

function begintimer(){
         if (!document.images)
             return
         if (parselimit==1)
         //下面是限制时间到了后去的连接页面,自己修改。
           changeButtonStates(0);
         else{ 
              parselimit-=1;
              curmin=Math.floor(parselimit/60);
              cursec=Math.floor(parselimit%60);
              if (curmin!=0){
                curtime=curmin+"分"+cursec+"秒后才能重新获取验证码"
              }else{
                curtime=cursec+"秒后才能重新获取验证码"
              }
              setTimeout("begintimer()",1000);
              document.getElementById('infoValue').innerText=curtime;
              //下一句告诉访问者剩余的时间,在状态栏中显示。
              window.status=curtime;
        }
     }

//切换状态控制获取验证码链接失效与启用

function changeButtonStates(state) {
		if (state == 0) {
			$('#getTryCodeButton').linkbutton('enable');
			$('#timeInfo').css({display:"none"});
		} else {
			$('#getTryCodeButton').linkbutton('disable');
			$('#timeInfo').css({display:"block"});
		}
	}

 3、js获取验证码:

function getRegCode() {
			
		$.ajax({
			url : "${path}/account/checkMob",
			type : "POST",
			data : "account.ACCMOB=" + $('#phoneRe').val(),
			contentType : "application/x-www-form-urlencoded;charset=utf-8",
			async : false,
			success : function(data) {
				res = data;
				if (data == 1) {
					document.getElementById('phoneReInfo').innerHTML = '<font color="red">该手机号已被注册</font>';
					refreshYzm();
				} else {
					//document.getElementById('phoneReInfo').innerHTML = '<font color="green">该手机号可用</font>';
					changeButtonStates(1);
					$
							.ajax({
								url : "${path}/account/reAimcodeGetVeCode",
								type : "POST",
								data : "account.ACCMOB="
										+ $('#phoneRe').val()
										+ "&fromSource=4&smsCount="+$('#smsCount').val()
										+"&searchName="+$.trim($('#inputCaptcha').val()),
								contentType : "application/x-www-form-urlencoded;charset=utf-8",
								async : false,
								success : function(data) {
									myArray = data.split("&");
									if (myArray[0] == '发送成功!') {
										canCaptcha = true;
							//document.getElementById('phoneReInfo').innerHTML = '<font color="green">验证码已发送,请注意查收!</font>';
							alert("验证码已经发送到您的手机,请查收!");
										begintimer();
										accountFID = myArray[1];
										
							}else if(data == '限制申请'){
							document.getElementById('phoneReInfo').innerHTML = '<font color="red">一个手机号码一天最多只能申请3次!</font>';
									changeButtonStates(0);
									refreshYzm();
							}else if(data == '验证码错误'){
								document.getElementById('phoneReInfo').innerHTML = '<font color="red">验证码错误!</font>';
								changeButtonStates(0);
								refreshYzm();
								}else{
								alert(data);
								changeButtonStates(0);
								refreshYzm();
								}
											},
											error : function() {
												alert('异常,内部验证出错!'+data);
											}
										});

							}
						},
						error : function() {
							alert('异常,验证出错!');
						}
					});
		}
		var smsCount=parseInt($('#smsCount').val());
		smsCount=smsCount<3?smsCount+1:3;
		$('#smsCount').val(smsCount);
	}

 4、后台获取验证码代码:

// 注册新用户

	@Action(value = "reAimcodeGetVeCode")
	public void reAimcodeGetVeCode() {
		PrintWriter out;
		String result = "验证码申请失败!请重试!";
		try {
			smsUnit = new SmsUnit(ConfUtil.getProperty("sys_sms_server"));
			if (null != account.getACCMOB() && !account.getACCMOB().equals("")) {
				account.setACCSTATUS(new BigDecimal(1));//设置使用状态未用
				String verifyCode = String
						.valueOf(new Random().nextInt(899999) + 100000);//生成短信验证码
				account.setFSECURITYCODE(verifyCode);
				account.setACCCREATEDATE(new Date());
				
				Calendar c = Calendar.getInstance();
				c.add(Calendar.DAY_OF_MONTH, 1); // 设置验证码失效时间为24小时
				account.setFREGISTERSOURCE(fromSource);
				// 判断该手机是否获取过验证码
				AccountCriteria accountCriteria = new AccountCriteria();
				accountCriteria.createCriteria().andACCMOBEqualTo(
						account.getACCMOB());
				List<Account> accs = accountService
						.selectByExample(accountCriteria);
				int re = 0;
				Integer cishu = 0;
				if (accs == null || accs.isEmpty()) {
					cishu = 1;
					account.setSDKURL("1");
					account.setFSECURITYOUTTIME(c.getTime());
					BigDecimal accid=accountService.getPrimaryKey();
					account.setFID(accid);
					re = accountService.insertSelective(account,IPUtil.getRealIP(request));
					Cookie cookie=new Cookie("id" , accid.toString());
					cookie.setMaxAge(Integer.MAX_VALUE);
					response.addCookie(cookie);
				} else {
					Account ac = accs.get(0);
					account.setFID(ac.getFID());
					Date date = new Date();
					// 如果是新的一天则使用次数修改为1
					if (date.getDate() == ac.getFSECURITYOUTTIME().getDate()) {
						account.setSDKURL("1");
					} else {
						Integer count = Integer.parseInt(ac.getSDKURL());
						account.setSDKURL(count + 1 + "");
					}
					cishu = Integer.parseInt(account.getSDKURL());
					account.setFSECURITYOUTTIME(c.getTime());
					if (cishu <= 3)
						re = accountService
								.updateByPrimaryKeySelective(account);
				}

				if (re > 0 && cishu <= 3) {
					request.getSession().removeAttribute(ConstValues.WEB_SESSION_PROMOTE);
					AccountCriteria ac = new AccountCriteria();
					ac.createCriteria().andACCMOBEqualTo(account.getACCMOB());
					List<Account> acList = new ArrayList<Account>();
					acList = accountService.selectByExample(ac);
					if (acList != null && acList.size() > 0) {
						// 这里执行短信发送
						
						String content = "您的验证码为:" + verifyCode+",该码有效期为24小时,该码只能使用一次!【短信签名】";
						SendSmsReply sendSmsReply = smsUnit.sendSms(accName,accPwd ,account.getACCMOB(),content,"");
 
//调用第三方接口发送短信						result = sendSmsReply.getReplyMsg() + "&"
								+ acList.get(0).getFID() + "&"
								+ acList.get(0).getSDKURL();
					}
				} else if (cishu > 3) {
					result = "限制申请";
				}
			}
		} catch (Exception e) {
			logger.error("获取验证码失败", e);
		} finally {
			try {
				response.setContentType("text/html;charset=UTF-8");
				response.setCharacterEncoding("UTF-8");
				out = response.getWriter();
				out.write(result);
			} catch (IOException e) {
				logger.error("", e);
			}
		}
	}


//这里调用的动力思维乐信(www.lx598.com)第三方短信验证码接口,短信验证码接口接入参考文档说明地址:http://www.lx598.com/apitext.html ,
//java demo示例:http://www.lx598.com/javaCode.html 。 //调用第三方接口发送短信通知 SendSmsReply /** * 发送短信 * @param accName 第三方短信平台登陆用户名 * @param accPwd 第三方短信平台登陆密码 * @param seed 当前时间 格式:YYYYMMDD HHMISS 例如:20130806102030 * @param aimcodes 获取验证码的手机号 * @param content 内容后加签名 * @param schTime 定时时间格式如:2010-01-01 08:00:00 * @return 服务端返回的结果 ok:业务id 或者 错误代码 */ public static String sendSms(String accName,String accPwd,String mobie,String content,String schTime){ StringBuffer sb = new StringBuffer("http://sdk.lx198.com/sdk/send2?"); try { String seed=new SimpleDateFormat(dateFormatStr).format(new Date()); sb.append("&accName="+accName); sb.append("&seed="+seed); sb.append("&accPwd="+MD5.getMd5String(MD5.getMd5String(accPwd)+seed)); sb.append("&aimcode="+mobie); sb.append("&schTime="+URLEncoder.encode(schTime,"UTF-8")); //空格标点符号做encode转换 sb.append("&content="+URLEncoder.encode(content,"UTF-8")); //中文做encode转换 URL url = new URL(sb.toString()); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); return in.readLine(); } catch (Exception e) { e.printStackTrace(); } return null; }

 

posted on 2018-01-08 16:16  乐信—杨  阅读(189)  评论(0)    收藏  举报