您的位置:首页 > 编程语言 > Java开发

java手机找回密码--阿里云发送验证码

2017-12-27 11:32 405 查看
0.前置条件

pom.xml新增

<!--短信验证  阿里云Start-->
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
<!--短信验证  阿里云End-->

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 = '<span style="color:green;">√ 短信验证码已发到您的手机,请查收</span>';
}else if(data.code == 2){
document.getElementById("showHtml").innerHTML = '<span style="color:red;">该手机号在系统中不存在,请注册后登录系统</span>';
isSuccess = false;
}else{
document.getElementById("showHtml").innerHTML = '<span style="color:red;">× 短信验证码发送失败,请重新发送</span>';
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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 验证码
相关文章推荐