0.前置条件
pom.xml新增
<dependency> <groupId>com.aliyungroupId> <artifactId>aliyun-java-sdk-coreartifactId> <version>3.5.0version> dependency> <dependency> <groupId>com.aliyungroupId> <artifactId>aliyun-java-sdk-dysmsapiartifactId> <version>1.0.0version> dependency>2.基本数据输入
//提交,最终验证。
var isSure = true; $('#submit2').click(function(){ $(".find-form2 :input").trigger('blur'); if(isSure){ isSure = false; var myphone = $("#myphone").val(); var validateCode = $("#validateCode").val(); var newPwd = $("#newPwd").val(); $.ajax({ url: "/user/foundPWDByTel", type: 'post', dataType: "json", data: {myphone:myphone,validateCode:validateCode,newPwd:md5(newPwd)}, cache: false, async: false, success: function (data) { isSure = true; if (data.code == 0) { alert("短信验证码有误,找回密码失败"); } else if(data.code == 1) { alert("新密码已生效,请重新登录"); window.location.href="/user/weblogout"; } else if(data.code == 2) { alert("手机号信息有误,找回密码失败"); window.location.href="/user/weblogout"; }else { alert("系统错误,找回密码失败"); } }, error: function (data) { isSure = true; alert("系统错误,找回密码失败"); } }); } });3.发送验证码
var count = 60; var isSuccess = true; $(".btn-send").click(function(){ var myphone = $("#myphone").val(); if( myphone=="" || ( myphone!="" && !/^1[3|4|5|7|8][0-9]{9}$/.test(myphone) ) ){ $("#myphone").focus(); }else{ setTime(count); // 向后台发送处理数据 $.ajax({ url: "/user/aliyunSms", type: 'post', dataType: "json", data: {phone:myphone}, cache: false, async: false, success: function (data){ if(data.code == 1){ document.getElementById("showHtml").innerHTML = '√ 短信验证码已发到您的手机,请查收'; }else if(data.code == 2){ document.getElementById("showHtml").innerHTML = '该手机号在系统中不存在,请注册后登录系统'; isSuccess = false; }else{ document.getElementById("showHtml").innerHTML = '× 短信验证码发送失败,请重新发送'; isSuccess = false; } $("#showHtml").fadeIn(2000); }, error: function () { } }); } }); function setTime(val){ var $send = $(".btn-send"); if(val == 0 || !isSuccess){ $send.html("重新发送").attr("disabled",false); count = 60; isSuccess = true; }else{ $send.html(count + " s").attr("disabled",true); count--; setTimeout(function(){ setTime(count); },1000) } }
验证码发送后台:
/** * 验证手机短信是否发送成功 * * @throws Exception */ @RequestMapping(value = "/aliyunSms", method = RequestMethod.POST) @ResponseBody public HashMap aliyunSms(HttpServletRequest request) throws Exception { String result = "0"; HashMap map = new HashMap(); /** 手机号码 */ String phone = request.getParameter("phone"); String type = request.getParameter("type");//0:未注册,其他:已注册 Integer telphoneCount = usersService.isExistByTel(phone); if((!"0".equals(type) && telphoneCount>0) || ("0".equals(type)&& telphoneCount==0)){ /** 短信验证码 */ String code = (int)((Math.random()*9+1)*100000) +""; /** 短信验证码存入session(session的默认失效时间30分钟) ,session失效时间*/ request.getSession().setAttribute("code", code); request.getSession().setAttribute("codeTel", phone); //发短信 SendSmsResponse response = AliyunSms.sendSms(code,phone);//阿里云接口发送验证码 if(response.getCode() != null && "OK".equals(response.getCode())){//发送成功 result = "1"; } }else{ result = "2"; } map.put("code", result); return map; }
/** * 阿里云接口发送验证码 * * @throws Exception */
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by zhangluzhen on 2017/11/22. */ public class AliyunSms { //产品名称:云通信短信API产品,开发者无需替换 static final String PRODUCT = "Dysmsapi"; //产品域名,开发者无需替换 static final String DOMAIN = "dysmsapi.aliyuncs.com"; // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) static final String ACCESS_KEY_ID = "XXXXXX"; static final String ACCESS_KEY_SECRET = "XXXXXX"; public static SendSmsResponse sendSms(String code,String telphone) throws ClientException { //可自助调整超时时间 System.setProperty("sun.net.client.defaultConnectTimeout", "60000"); System.setProperty("sun.net.client.defaultReadTimeout", "60000"); //初始化acsClient,暂不支持region化 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET); DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN); IAcsClient acsClient = new DefaultAcsClient(profile); //组装请求对象-具体描述见控制台-文档部分内容 SendSmsRequest request = new SendSmsRequest(); //必填:待发送手机号 request.setPhoneNumbers(telphone); //必填:短信签名-可在短信控制台中找到 request.setSignName("XXXXXX"); //必填:短信模板-可在短信控制台中找到 request.setTemplateCode("XXXXXX"); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam("{\"code\":\""+code+"\"}"); //选填-上行短信扩展码(无特殊需求用户请忽略此字段) //request.setSmsUpExtendCode("90997"); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.setOutId("yourOutId"); //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); return sendSmsResponse; } public static QuerySendDetailsResponse querySendDetails(String bizId,String telphone) throws ClientException { //可自助调整超时时间 System.setProperty("sun.net.client.defaultConnectTimeout", "60000"); System.setProperty("sun.net.client.defaultReadTimeout", "60000"); //初始化acsClient,暂不支持region化 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET); DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN); IAcsClient acsClient = new DefaultAcsClient(profile); //组装请求对象 QuerySendDetailsRequest request = new QuerySendDetailsRequest(); //必填-号码 request.setPhoneNumber(telphone); //可选-流水号 request.setBizId(bizId); //必填-发送日期 支持30天内记录查询,格式yyyyMMdd SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd"); request.setSendDate(ft.format(new Date())); //必填-页大小 request.setPageSize(10L); //必填-当前页码从1开始计数 request.setCurrentPage(1L); //hint 此处可能会抛出异常,注意catch QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request); return querySendDetailsResponse; } public static void main(String[] args) throws ClientException, InterruptedException { //发短信 SendSmsResponse response = sendSms("123456","15800000000"); System.out.println("短信接口返回的数据----------------"); System.out.println("Code=" + response.getCode()); System.out.println("Message=" + response.getMessage()); System.out.println("RequestId=" + response.getRequestId()); System.out.println("BizId=" + response.getBizId()); Thread.sleep(3000L); //查明细 if(response.getCode() != null && "OK".equals(response.getCode())) { QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId(),"15800000000"); System.out.println("短信明细查询接口返回数据----------------"); System.out.println("Code=" + querySendDetailsResponse.getCode()); System.out.println("Message=" + querySendDetailsResponse.getMessage()); int i = 0; for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs()) { System.out.println("SmsSendDetailDTO["+i+"]:"); System.out.println("Content=" + smsSendDetailDTO.getContent()); System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode()); System.out.println("OutId=" + smsSendDetailDTO.getOutId()); System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum()); System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate()); System.out.println("SendDate=" + smsSendDetailDTO.getSendDate()); System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus()); System.out.println("Template=" + smsSendDetailDTO.getTemplateCode()); } System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount()); System.out.println("RequestId=" + querySendDetailsResponse.getRequestId()); } } }
4.获取验证码,修改密码(后台)
/** * 手机修改新密码 * * @throws Exception */ @RequestMapping(value = "/foundPWDByTel", method = RequestMethod.POST) @ResponseBody public HashMap foundPWDByTel(HttpServletRequest request) throws Exception { String result = "0"; HashMap map = new HashMap(); /** 手机号码 */ String myphone = request.getParameter("myphone"); /** 短信验证码 */ String validateCode = request.getParameter("validateCode"); /** 新密码MD5已加密 */ String newPwd = request.getParameter("newPwd"); /** 短信验证码存入session(session的默认失效时间30分钟) */ String code = request.getSession().getAttribute("code")+""; String codeTel = request.getSession().getAttribute("codeTel")+""; if(validateCode.equals(code)){ if(codeTel.equals(myphone)){ result = userService.foundPWDByTel(newPwd,myphone); }else{ result = "2"; } } map.put("code", result); return map; }