短信验证码调用互亿无线的接口,详细请参考http://www.ihuyi.com/api/sms.html;
首先获取页面中手机号码传递至web层,调用短信发送工具类,代码如下:
Web:
/**
* 短信验证码
* @param req
* @param pw
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/sendCode")
public void sendCode(HttpServletRequest req,PrintWriter pw)
throws ServletException,IOException{
String number=req.getParameter("number");
String strCode=ShortMessageVerificationCode.SMS(number);
req.getSession().setAttribute("code", strCode);
System.out.println(strCode);
if(strCode!=""){
pw.write("success");
}
}
短信发送工具类
package com.fhc.util;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class ShortMessageVerificationCode {
private static String Url = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
public static String SMS(String number) throws HttpException, IOException{
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(Url);
client.getParams().setContentCharset("utf-8");
method.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=utf-8");
//随机编号
int mobile_code = (int)((Math.random()*9+1)*100000);
String content = new String("您的验证码是:" + mobile_code + "。请不要把验证码泄露给其他人。");
NameValuePair[] data = {//提交短信
new NameValuePair("account", "xxxxx"), //查看用户名是登录用户中心->验证码短信->产品总览->APIID
new NameValuePair("password", "xxxxx"), //查看密码请登录用户中心->验证码短信->产品总览->APIKEY
//new NameValuePair("password", util.StringUtil.MD5Encode("密码")),
new NameValuePair("mobile", number),
new NameValuePair("content", content),
};
method.setRequestBody(data);
try {
client.executeMethod(method);
String SubmitResult =method.getResponseBodyAsString();
//System.out.println(SubmitResult);
Document doc = DocumentHelper.parseText(SubmitResult);
Element root = doc.getRootElement();
String code = root.elementText("code");
String msg = root.elementText("msg");
String smsid = root.elementText("smsid");
System.out.println(code);
System.out.println(msg);
System.out.println(smsid);
System.out.println(mobile_code);
if("2".equals(code)){
System.out.println("短信提交成功");
System.out.println(mobile_code);
return mobile_code+"";
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
}
短信发送成功,有效时间为60秒,进入倒计时;
Js:
$("#getcode").click(function(){
var number="${sessionScope.customerPo.phone}";
$.post("${ctx}/personalBiddersController/sendCode.do",{number:number},function(data){
if(data=="success"){
var second=60;
var timer=setInterval(function() {
if(second==1){
clearInterval(timer);
$("#getcode").text("重发");
}else{
second--;
$("#getcode").text("("+second+")已发送");
}
},1000);
//$("#getcode").text("("++")已发送");
}
});
});
效果如下: