绑定手机短信验证

controller里写的

@RequestMapping({"/createValidateCode"})

public void verification(HttpServletRequest request,HttpServletResponse response) {
try {
        this.responseCrossDomain(response);
            String mobile = this.assService.get(this.getCurrentAss().getId()).getSafeTelephone();
            if (StringUtils.isEmpty(mobile)) {
            this.renderJson(response, false,AppConst.REQUEST_400,"验证码错误请重新输入!");
                return;
            }
            if (! CommonUtils.mobileFormat(mobile)) {
                this.renderJson(response, false,AppConst.REQUEST_400,"手机号格式不正确");
                return;
            }


            HttpSession httpSession = request.getSession();
            if (httpSession.getAttribute("validateTime001") != null) {
                long preTime = (Long) httpSession.getAttribute("validateTime001");
                long currentTime = System.currentTimeMillis();
                if ((currentTime - preTime) <= 60 * 1000) {// 小于1分钟
                this.renderJson(response, false,AppConst.REQUEST_400,"验证码发送太频繁[小于60秒]");
                    return;
                }
            }
//             // 发送验证码短信
            String verifyCode = smsMessageService.generateVerifyCode();
            logger.info("ass band safe mobile: ["+mobile+"],create verifyCode:" + verifyCode + "】");
            ShortMsg msg = smsMessageService.sendVerifyCodeMsgAlibaba(ShortmsgConstApp.ASS_CASH_TID, mobile, verifyCode);
            if (null==msg) {
                this.outputFail(response, AppConst.REQUEST_400, "验证码发送失败");
                return;
            } else if(msg.getStatus().intValue()==0){
            if("160040".equals(msg.getResultCode())){
            msg.setResultMsg("当天发送次数已达上限!");
                }
            this.outputFail(response, AppConst.REQUEST_400, msg.getResultMsg());
                return;
            }
            httpSession.setAttribute("mobileandvc", mobile + "," + verifyCode);
            httpSession.setAttribute("validateTime001", System.currentTimeMillis());
            AppSessionContext.addSession(httpSession);
            JSONObject result = new JSONObject();
            result.put("sessionId", httpSession.getId());
            this.renderJson(response, true,AppConst.REQUEST_200,httpSession.getId());


        } catch (Exception e) {
            logger.error("【获取注册验证码】出现异常:" + e.getMessage());
        }


}


@RequestMapping({"mobileBand"})
public String mobileBand(HttpServletRequest request,
HttpServletResponse response, Model model) {
new ShopAss();
ShopAss ass = this.assService.get(this.getCurrentAss().getId());
new ShopAss();
ShopAss assAccount = this.assService.get(this.getCurrentAss().getId());
model.addAttribute("assAccount", assAccount);
return "ass/mobile_band";
}


@RequestMapping({"saveBandMobile"})
public String saveBandMobile(HttpServletRequest request,
HttpServletResponse response, Model model) {
new ShopAss();
String oldMobile = request.getParameter("oldMobile");
String newMobile = request.getParameter("newMobile");
String mobileSmsCode = request.getParameter("mobileSmsCode");
ShopAss assAccount = this.assService.get(this.getCurrentAss().getId());
model.addAttribute("assAccount", assAccount);
String regExp = "^[1][34578][0-9]{9}$";
    Pattern p = Pattern.compile(regExp);
    Matcher m = p.matcher(newMobile);
    
    HttpSession httpSession = AppSessionContext.getSession(request.getSession().getId());
    String codes = (String) httpSession.getAttribute("mobileandvc");
    String code2[] = codes.split(",");
if (!StringUtils.isEmpty(request.getParameter("oldMobile"))
&& !StringUtils.isEmpty(request
.getParameter("newMobile"))
&& !StringUtils.isEmpty(request.getParameter("mobileSmsCode"))) {
if (!oldMobile.equals(assAccount.getSafeTelephone())) {
return this.renderJson(response, false, AppConst.REQUEST_400,
"绑定的旧手机号输入错误!");
}else if(!m.find()) {
return this.renderJson(response, false, AppConst.REQUEST_400,
"手机号格式不正确");
}else if(oldMobile.equals(code2[0]) || mobileSmsCode.equals(code2[1])) {
assAccount.setSafeTelephone(newMobile);
this.assService.saveTel(assAccount);

return this.renderJson(response, true, AppConst.REQUEST_200,
"新手机号绑定成功!");
}else {
return this.renderJson(response, false, AppConst.REQUEST_400,
"验证码填写错误!");
}
}else {
return this.renderJson(response, false, AppConst.REQUEST_400,
"旧手机号/新手机号/短信验证都不能为空!");
}

}



service 类


/**
 * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.epay.opt.sys.service;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.epay.common.config.Global;
import com.epay.common.persistence.Page;
import com.epay.common.service.CrudService;
import com.epay.common.utils.VerifyCodeApp;
import com.epay.opt.sys.dao.ShortMsgDao;
import com.epay.opt.sys.entity.ShortMsg;

@Service
@Transactional(readOnly = true)
public class ShortMsgService extends CrudService<ShortMsgDao, ShortMsg> {

private static Logger LOGGER = LoggerFactory.getLogger(ShortMsgService.class);




    /**
     * 生成六位随机数
     * @return String
     */
    public String generateVerifyCode(){
        return VerifyCodeApp.getRandNum(6);
    }


public ShortMsg get(String id) {
return super.get(id);
}


public List<ShortMsg> findList(ShortMsg shortMsg) {
return super.findList(shortMsg);
}


public Page<ShortMsg> findPage(Page<ShortMsg> page, ShortMsg shortMsg) {
return super.findPage(page, shortMsg);
}


@Transactional(readOnly = false)
public void save(ShortMsg shortMsg) {
super.save(shortMsg);
}


@Transactional(readOnly = false)
public void delete(ShortMsg shortMsg) {
super.delete(shortMsg);
}




 
    /*
     * 用到阿里巴巴短信服务平台发送短信
     */
    @Transactional(readOnly = false)
    public ShortMsg sendVerifyCodeMsgAlibaba(String tid, String mobile, String code) {
        try {


        //可自助调整超时时间
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");


            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", Global.getConfig("ALIYUN.SMS.ACCESSKEYID"), Global.getConfig("ALIYUN.SMS.ACCESSKEYSECRET"));
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", Global.getConfig("ALIYUN.SMS.PRODUCT"),  Global.getConfig("ALIYUN.SMS.DOMAIN"));
            IAcsClient acsClient = new DefaultAcsClient(profile);
            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //必填:待发送手机号
            request.setPhoneNumbers(mobile);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName(Global.getConfig("ALIYUN.SMS.SIGN_NAME"));
            //必填:短信模板-可在短信控制台中找到
            String[] TEMPLATE_CODE = Global.getConfig("ALIYUN.SMS.TEMPLATE_CODE_LIST").split(",");
            String randomTemplateCode = "";
            int index = (int) (Math.random() * TEMPLATE_CODE.length);
            randomTemplateCode = TEMPLATE_CODE[index];
            request.setTemplateCode(randomTemplateCode);
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam("{\"name\":\""+mobile+"\", \"code\":\""+code+"\"}");
            //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
            //request.setSmsUpExtendCode("90997");
            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            request.setOutId(mobile+sdf.format(new Date()));
            //hint 此处可能会抛出异常,注意catch
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            LOGGER.info("aliyun return params:"+JSON.toJSONString(sendSmsResponse));
            String statusCode = sendSmsResponse.getCode();
            String statusMsg = sendSmsResponse.getMessage();
            String smsMessageSid = randomTemplateCode;
            Date sendTime = new Date();
            int status = 0;
            if ("OK".equals(statusCode)) {//正常返回输出data包体信息(map)
                statusMsg = "发送成功-"+code;
                status = 1;
            } else {//异常返回输出错误码和错误信息
                statusMsg = "短信发送失败,请联系管理员!";
                status = 0;
            }
            ShortMsg shortmsg = new ShortMsg();
            shortmsg.setIsNewRecord(true);
            shortmsg.setResultCode(statusCode);
            shortmsg.setMobile(mobile);
            shortmsg.setResultMsg(statusMsg);
            shortmsg.setStatus(status);
            shortmsg.setSendTime(sendTime);
            shortmsg.setSmsSid(smsMessageSid);
            shortmsg.setTemplateId(tid);
            this.save(shortmsg);
//            if (status == 0) {
//                return false;
//            }
            return shortmsg;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }


    }


}



jsp页面



<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="smp"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<smp:apply-decorator name="assPanel">
<html>
<head>
<title>修改个人绑定手机号码</title>
<link href="${ctxStatic}/common/jeesite.css" type="text/css" rel="stylesheet" />
<script type="text/javascript">






function ajaxChangeMobile(){
var oldMobile = $('#oldMobile').val();
var newMobile=$("#newMobile").val();
var mobileSmsCode=$("#mobileSmsCode").val();

if(oldMobile==''||newMobile==''||mobileSmsCode==''){
layer.open({title: '警告',content:'旧手机号/新手机号/短信验证都不能为空!'});
}

var oks = jqueryAjaxPost({
"oldMobile":oldMobile,
"newMobile":newMobile,
"mobileSmsCode":mobileSmsCode
}, "${ctx_root}/ass/workspace/saveBandMobile");
var data = oks;
console.log(data);
if (!data.success) {
layer.open({title: '警告',content:data.message});
return false;
}else{
layer.open({title: '成功',content:data.message});
location.href = '${ctx_root}/ass/workspace/mobileBand';
}
};

$(function(){
$("input[type='submit']").attr('disabled',true);
$("#btn-sms").click(function(){
if(!check_mobile())
{
return false;
}
$('#btn-sms').addClass('disable');
$('#btn-sms').attr('disabled',true);
sendSMS();
});
});
function sendSMS(){


if(check_mobile()){
$.ajax({
type: "GET",
url: '${ctx_root}/ass/workspace/createValidateCode?rnd='+new Date().getTime()/1000,
data:'oldMobile='+$.trim($('#oldMobile').val()),
dataType: 'json',
success: function(data)
{
if(data.success){
lSeconds=60;
$("#btn-sms").attr('value','已成功发送');
displayInterval();
}
else{
alert(data.message);
$('#btn-sms').removeClass('disable');
$('#btn-sms').attr('disabled',false);
}
},
'error':function(){
alert('获取短信出错,请重试或联系管理员!');
$('#btn-sms').removeClass('disable');
$('#btn-sms').attr('disabled',false);
}
});
}
}
//手机验证
function check_mobile()
{
var m=$.trim($('#oldMobile').val());
if(m!='')
{
var reg = /^1[34578]\d{9}$/;


var result = false;
if (reg.test(m))
result=true;
if (result)
{
return true;
}else{
  alert("请输入正确的手机号");
  return false;
}
}else{


alert("请输入手机号");
return false;
}
}
function popPolicy()
{
$.fancybox.open({
'type' : 'inline',
'href': '#policy-dialog'
});
}
function hasRead()
{
if($('#cbkRead').is(":checked"))
{
$("input[type='submit']").attr('disabled',false);
}
else
{
$("input[type='submit']").attr('disabled',true);
}
}
/*
$( "#CustomerAccount" ).blur(function() {


$.ajax({
type: "POST",
url: 'Customers/validateField',
data: {'account':$("#CustomerAccount").val()},
success: function(data)
{
$('#flashError').html(data);
}
});
});


$( "#CustomerPassword" ).blur(function() {
$.ajax({
type: "POST",
url: 'Customers/validateField',
data: {'password':$("#CustomerPassword").val()},
success: function(data)
{
$('#flashError').html(data);
}
});
});


$( "#CustomerVerifyPassword" ).blur(function() {
$.ajax({
type: "POST",
url: 'Customers/validateField',
data: {'verify_password':$("#CustomerVerifyPassword").val(), 'password':$("#CustomerPassword").val()},
success: function(data)
{
$('#flashError').html(data);
}
});
});
*/
var lSeconds = 60;
function displayInterval(){
$("#btn-sms").unbind('click');
timeIntervalSMS=setInterval(function(){
if(lSeconds<=1){
    $('#btn-sms').removeClass('disable');
    $('#btn-sms').attr('disabled',false);
$("#btn-sms").attr('value','重新发送');
clearInterval(timeIntervalSMS);
$("#btn-sms").click(function(){
$('#btn-sms').addClass('disable');
$('#btn-sms').attr('disabled',true);
sendSMS();
});
return;
}
lSeconds--;
$('#btn-sms').addClass('disable');
$("#btn-sms").attr('value',lSeconds+"秒后重发");
}, 1000);
}
</script>
<style type="text/css">
.disable{
color:#999!important;
}
.sendMessage {
    cursor: pointer;
    width: 90px;
    height: 30px;
    border: 2px solid #ececec;
    background: #f4f4f4;
    display: block;
    color: #333;
    font-size: 12px;
    text-align: center;
    line-height: 30px;
    margin-left:10px;
}
</style>
</head>
<body>
<div class="page-content">
<div class="panel panel-default clearfix marginbot20 pctopbg">


<ul id="generalTab" class="nav nav-tabs ul-edit responsive hidden-xs hidden-sm" style="left: 0px;">
<li class=""><a href="#alert-tab" data-toggle="tab">账户明细</a></li>
<li class=""><a href="${ctx_root}/ass/workspace/modifyPwd" data-toggle="tab" >登入密码</a></li>
<li class=""><a href="${ctx_root}/ass/workspace/modifyPay" data-toggle="tab" >支付密码</a></li>
<li class=""><a href="${ctx_root}/ass/workspace/assinfo" data-toggle="tab">个人信息</a>
<li class="active"><a href="${ctx_root}/ass/workspace/mobileBand" data-toggle="tab">手机绑定</a>


</ul>
<div id="generalTabContent" class="tab-content responsive hidden-xs hidden-sm">


<div id="note-tab" class="tab-pane fade active in">
<!--这是查询模块开始-->
<div class="panel panel-default clearfix">
<div class="panel-body">
<!--这是新增-->
<div id="addPayPwd">
<form id="inputForm" modelAttribute="user" action="${ctx_root}/ass/workspace/saveBandMobile" method="post" class="form-horizontal">
<c:if test="${success==false}">
<label id="loginError" class="error">${message}</label>
</c:if>


<c:if test="${success==true}">
<label id="loginError" class="success">${message}</label>
</c:if>


<div class="control-group">
<label class="control-label">旧手机号:</label>
<div class="controls">
<input id="oldMobile" name="oldMobile" value="${assAccount.safeTelephone }" type="text" value="" style="width:200px;float:left;" class="form-control required"/>
<span class="help-inline"><font color="red">&nbsp;&nbsp;&nbsp;&nbsp;*(必填)</font> </span>
</div>
</div>
<div class="control-group">
<label class="control-label">新手机号:</label>
<div class="controls">
<input id="newMobile" name="newMobile" type="text" value="" style="width:200px;float:left;" class="form-control required"/>
<span class="help-inline"><font color="red">&nbsp;&nbsp;&nbsp;&nbsp;*(必填)</font> </span>
</div>
</div>
<div class="control-group">
<label class="control-label">短信验证:</label>
<div class="controls">
<input id="mobileSmsCode" name="mobileSmsCode" type="text" value="" style="width:200px;float:left;" class="form-control required"/>
<input type="button" id="btn-sms" class="sendMessage" value="获取短信" />

</div>
</div>












<div class="form-actions">
<input id="btnSubmit" class="btn btn-primary" type="button" οnclick="ajaxChangeMobile()"  value="确定绑定手机号"/>
</div>
</form>
</div>
</div>
</div>
</div>
<!--End CONTENT-->
</div>


</body>








</html>
</smp:apply-decorator>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值