您的位置:首页 > 其它

调用短信接口发送验证码,并对验证码进行验证

2018-03-14 17:10 603 查看
最近遇到用户注册时,需要调用短信接口,发送验证码,做了个调用淘宝短信接口的例子

首先需要对短信接口内容进行封装:

public class SendMsg2Util {
private static String url="http://gw.api.taobao.com/router/rest";
private static String appkey="xxxxxxxx";
private static String secret="xxxxxxxx";

public void sendMsg(String name,String phone,String vcode) throws ApiException{
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest();
req.setExtend("XXX");
req.setSmsType("normal");
req.setSmsFreeSignName("注册验证");
req.setSmsParamString("{\"name\":\""+name+"\",\"code\":\""+vcode+"\"}");
req.setRecNum(phone);
req.setSmsTemplateCode("SMS_11415328");
AlibabaAliqinFcSmsNumSendResponse rsp = client.execute(req);
System.out.println(phone+"]验证码:"+vcode+">"+rsp.
c4b2
getMsg());
}

public void sendMsg(String name,String phone) throws ApiException{
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest();
req.setExtend("XXX");
req.setSmsType("normal");
req.setSmsFreeSignName("变更验证");
req.setSmsParamString("{\"name\":\""+name+"\",\"phone\":\""+phone+"\"}");
req.setRecNum(phone);
req.setSmsTemplateCode("SMS_11535513");
AlibabaAliqinFcSmsNumSendResponse rsp = client.execute(req);
System.out.println(rsp.getBody());
}

public String sendVlidMsg(String name,String phone,String vcode) throws ApiException{
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest();
req.setExtend("XXX");
req.setSmsType("normal");
req.setSmsFreeSignName("XXX");
req.setSmsParamString("{\"name\":\""+name+"\",\"code\":\""+vcode+"\"}");
req.setRecNum(phone);
req.setSmsTemplateCode("SMS_52125325");
AlibabaAliqinFcSmsNumSendResponse rsp = client.execute(req);
if(rsp.getErrorCode()==null ||rsp.getErrorCode().equals("0")){
return "0";
}else{
return rsp.getMsg();

}
}

public String createRandomVcode(){
//验证码
String vcode = "";
for (int i = 0; i < 6; i++) {
vcode = vcode + (int)(Math.random() * 9);
}
return vcode;
}
}


以上是发送短信的工具类,接下来前台发送请求:

<button type="button" class="vcode-btn" id="vcode-btn">获取验证码</button>
//这些是格式设置,不做参考
<div class="input_row" style="display: none;" id="vcode_div"><label for="name"><span class="iconfont icon-radiobutton2 medium_size"></span></label>
<div class="input_row_bd"><input id="vcode" type="text" placeholder="输入验证码" />
</div>
<div class="input_row_ft"><i class="weui-icon-warn"id="code_icon"></i></div>
</div>
$("#vcode-btn").click(function() {
$("#vcode_div").show();
$.ajax({
type : "post",
dataType : "text",
url : "getValidPhoneCode.do",
data : {
length : 4,
phone : phone,
},
success : function(result) {
var rsObj = typeof result === "object" ? result : $.parseJSON(result);
if (rsObj.status == 0) {
var step = 59;
$('#vcode-btn').html('重发60');
var _res = setInterval(function()
{
$("#vcode-btn").attr("disabled", true);//设置disabled属性
$('#vcode-btn').html('重发'+step);
step-=1;
if(step <= 0){
$("#vcode-btn").removeAttr("disabled"); //移除disabled属性
$('#vcode-btn').html('获取验证码');
clearInterval(_res);//清除setInterval
}
},1000);
}else{
alert(rsObj.responseDescription);
}
}

})
})


前台发送请求后,后台对请求作出反应

@RequestMapping("/getValidPhoneCode.do")
@ResponseBody
public void getValidPhoneCode(HttpServletRequest request,
HttpServletResponse response) {
ResponseHeader resData = new ResponseHeader();
resData.setStatus(-1);
int length = requestUtil.getIntValue(request, "length");
String phone = requestUtil.getStringValue(request, "phone");
//此处工具类随机生成按照需要的位数生成的验证码;
String phonecode = EncodeUtilTools.getRanomNumCode(length);
request.getSession().setAttribute(phone, phonecode);
SendMsg2Util sendmsg=new SendMsg2Util();
String rs="0";
//      resData.setStatus(0);
try {
rs=sendmsg.sendVlidMsg(name, phone, phonecode);
if(rs.equals("0")){
resData.setStatus(0);
}else{
resData.setResponseDescription(rs);
}
} catch (ApiException e) {
resData.setResponseDescription("短信接口异常,请稍后再试");
}
System.out.println(phone+"]验证码:"+phonecode+"_"+rs);

ResponseUtil.responseJson(response, resData);
return;
}

/**
* 生成随机数字
* @param 编码长度
* @return String
*/
public static String getRanomNumCode(int length) {
Random random = new Random();
String result = "";
for (int i = 0; i < length; i++) {

result += random.nextInt(10);
}
return result;
}


以上就完成的短信的发送功能,接下来就是对验证码进行验证

$.ajax({
url : DOMAIN_URL + "/wechat/getCheckSesCode.do",
data : {
code : vcode,
key : localphone,
},
type : "post",
dataType : "text",
success : function(result) {
var rsObj = typeof result === "object" ? result : $.parseJSON(result);
if (rsObj.status == 0) {
//此处验证码正确,给出操作
}else{
//验证码错误,给出相应的操作
}
}

});


前台发出请求验证验证码是否正确,后台对其作出响应

/**
* 检验手机校验的code是否正确
* @param request
* @param response
*/
@RequestMapping("/getCheckSesCode.do")
@ResponseBody
public void getCheckSesCode(HttpServletRequest request,
HttpServletResponse response) {
ResponseHeader resData = new ResponseHeader();
resData.setStatus(-1);
String key = requestUtil.getStringValue(request, "key");
String code = requestUtil.getStringValue(request, "code");
if(key!=null &&code!=null){
String scode=(String) request.getSession().getAttribute(key);
if(scode.equals(code)){
resData.setStatus(0);
}
}
ResponseUtil.responseJson(response, resData);
return;
}

/**
* 获得String类型请求参数
*
* @param request
* @param name
* @return
*/
public String getStringValue(HttpServletRequest request, String name) {
return StringUtil.isEmpty(name) ? null : request.getParameter(name);
}


通过以上步骤,就完成了发送验证码以及对验证码进行验证的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐