Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...

近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限,还请大家见谅!

一:首先上几张案例截图,以便大家可以了解一下短信验证码的流程,这里我在做的过程中也参考了很多网站的短信验证码,比如:58同城,汽车之家等。

1.点击获取验证码之前的样式:


2.输入正确的手机号后点击获取验证码之后的样式:


3.如果手机号已经被注册的样式:


4.如果一个手机号一天发送超过3次就提示不能发送:


二:前台的注册页面的代码:reg.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@page import="cn.gov.csrc.base.action.FindAllData"%>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>中国证券会证券期货违法违规举报中心-注册</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="shortcut icon" type="image/x-icon" href="<%=request.getContextPath()%>/images/favicon.ico" />
<link rel="stylesheet" type="text/css"href="<%=request.getContextPath()%>/css/main.css">
<linkhref="<%=request.getContextPath()%>/formValidator1/style/validator.css"rel="stylesheet" type="text/css" />
<style type="text/css">
button {background: #F0F0F0 repeat-x;padding-top: 3px; border-top : 1px solid #708090;border-right: 1px solid #708090;border-bottom: 1px solid #708090;border-left: 1px solid #708090;width: auto;line-height: 12pt; font-size : 10pt;cursor: hand;font-size: 10pt;border-top: 1px solid #708090;
}
</style>
<script src="<%=request.getContextPath()%>/js/jquery-1.7.2.min.js"type="text/javascript"></script>
<script src="<%=request.getContextPath()%>/formValidator1/formValidator-4.0.1.js"type="text/javascript"></script>
<script src="<%=request.getContextPath()%>/formValidator1/formValidatorRegex.js"type="text/javascript"></script>
<script src="<%=request.getContextPath()%>/js/register.js"type="text/javascript"></script>
<script src="<%=request.getContextPath()%>/js/sms.js"type="text/javascript"></script>
<script type="text/javascript">function changeCheckNum() {var checkNumImage_ = document.getElementById("checkNumImage");checkNumImage_.src = "${pageContext.request.contextPath}/image.jsp?timeStamp="+ new Date().getTime();}
</script>
<script type="text/javascript">var msg = "${message}";if (msg != "") {alert(msg);}
</script>
</head>
<body><%@include file="/statics/top.jspf"%><div class="center_division"><div class="center_body"><div class="center_menu"><font color="#000000">当前位置:</font><a href="<%=request.getContextPath()%>/statics/reg.jsp"><font color="#000000">用户注册</font></a></div></div><div class="center_body_menu"><s:form action="RegisterAction_register" id="form1" name="form1" method="post" namespace="/"><table id="tb"><tr><td colspan="3" align="center" bgcolor="#DDDFE1">举报人基本信息</td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>用户名:</td><td align="center" width="40%"><s:textfield name="username" id="username" cssStyle="width:160px;height:24px;" οnblur="checkusername()"/></td><td align="left" width="30%"><span id="usernameTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>username</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>登录密码:</td><td align="center" width="40%"><s:password name="password" id="password" cssStyle="width:160px;height:24px;" οnblur="checkpassword()"/></td><td align="left" width="30%"><span id="passwordTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>password</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>确认密码:</td><td align="center" width="40%"><s:password name="passwordRepeat" id="passwordRepeat" cssStyle="width:160px;height:24px;" οnblur="checkpasswrodb()"/></td><td align="left" width="30%"><span id="passwordRepeatTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>passwordRepeat</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>姓名:</td><td align="center" width="40%"><s:textfield name="nickname" id="nickname" cssStyle="width:160px;height:24px;" οnblur="checknickname()"/></td><td align="left" width="30%"><span id="nicknameTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>nickname</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%">性别:</td><td align="center" width="40%"><s:radio list="#application.dataMap.get('10001')" name="jbSex" cssStyle="height:24px;"/></td><td align="left" width="30%"></td></tr><tr><td align="center" width="30%">联系地址:</td><td align="center" width="40%"><s:textfield name="jbAddress" id="jbAddress" cssStyle="width:160px;height:24px;" /></td><td align="left" width="30%"><span id="jbAddressTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>jbAddress</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>联系手机:</td><td align="center" width="40%"><s:textfield id="jbPhone" name="jbPhone" cssStyle="width:160px;height:24px;" οnblur="checkjbPhone()"/></td><td align="left" width="30%"><span id="jbPhoneTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>jbPhone</s:param></s:fielderror></span></td></tr><tr><td align="center"><img src="images/new_reg_xing.gif"/>短信验证码:</td><td align="left" colspan="2" style="padding-left: 112px;"><s:textfield id="SmsCheckCode" name="SmsCheckCode" cssStyle="width:80px;height:24px;" maxLength="6" /><span><input type="button" id="btnSendCode" name="btnSendCode" value="免费获取验证码" οnclick="sendMessage()" /></span><span id="SmsCheckCodeTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>SmsCheckCodeTip</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>证件类型:</td><td align="center" width="40%"><s:select list="#application.dataMap.get('10002')" label=""headerKey="" headerValue="--请选择--" value="1" listValue="value" οnchange="enableCredentialsCode(this)"name="jbCredentialsName" id="jbCredentialsName" cssStyle="width:160px;height:24px;"/></td><td align="left" width="30%"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>jbCredentialsName</s:param></s:fielderror></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>证件号码:</td><td align="center" width="40%"><s:textfield name="jbCredentialsCode" id="jbCredentialsCode" cssStyle="width:160px;height:24px;" οnblur="checkjbCredentialsCode()"/></td><td align="left" width="30%"><span id="jbCredentialsCodeTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>jbCredentialsCode</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%">单位名称:</td><td align="center" width="40%"><s:textfield name="jbCompanyName" id="jbCompanyName" cssStyle="width:160px;height:24px;" /></td><td align="left" width="30%"><span id="jbCompanyNameTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>jbCompanyName</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>所在地区:</td><td align="center" width="40%"><s:select list="#application.dataMap.get('10003')" label=""headerKey="" headerValue="--请选择--" listKey="key"cssStyle="width:160px;height:24px;" listValue="value" id="jbSourceArea"name="jbSourceArea" οnblur="checkjbSourceArea()"/></td><td align="left" width="30%"><span id="jbSourceAreaTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>jbSourceArea</s:param></s:fielderror></span></td></tr><tr><td align="center" width="30%"><img src="images/new_reg_xing.gif"/>验证码:</td><td align="center" width="40%"><s:textfield id="checkNum" name="checkNum" cssStyle="width:60px;height:24px;" οnblur="checkNumber()" maxLength="4"/><img id="checkNumImage" src="${pageContext.request.contextPath}/image.jsp"><a onClick="changeCheckNum()" title="点击换一张" style="cursor:hand;">换一张</a></td><td align="left" width="30%"><span id="checkNumTip"><s:fielderror cssStyle="color:red;padding-left:10px;"><s:param>checkNumTip</s:param></s:fielderror></span></td></tr><tr><td colspan="3" style="vertical-align: top; padding-top: 5px;padding-bottom: 5px;"><input type="submit" value="注册" style="width:50px; height:24px;"/><input type="reset" value="重置" style="width:50px; height:24px;"/></td></tr></table></s:form></div></div><%@include file="/common/buttom.jspf"%>
</body>
</html>

三:前台获取短信验证码的js:sms.js

var InterValObj; //timer变量,控制时间
var count = 120; //间隔函数,1秒执行
var curCount;//当前剩余秒数
var code = ""; //验证码
var codeLength = 6;//验证码长度function sendMessage() {curCount = count;var jbPhone = $("#jbPhone").val();var jbPhoneTip = $("#jbPhoneTip").text();if (jbPhone != "") {if(jbPhoneTip == "√ 该手机号码可以注册,输入正确" || jbPhoneTip == "√ 短信验证码已发到您的手机,请查收"){// 产生验证码for ( var i = 0; i < codeLength; i++) {code += parseInt(Math.random() * 9).toString();}// 设置button效果,开始计时$("#btnSendCode").attr("disabled", "true");$("#btnSendCode").val("请在" + curCount + "秒内输入验证码");InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次// 向后台发送处理数据$.ajax({type: "POST", // 用POST方式传输dataType: "text", // 数据格式:JSONurl: "UserAction_sms.action", // 目标地址data: "jbPhone=" + jbPhone +"&code=" + code,error: function (XMLHttpRequest, textStatus, errorThrown) { },success: function (data){ data = parseInt(data, 10);if(data == 1){$("#jbPhoneTip").html("<font color='#339933'>√ 短信验证码已发到您的手机,请查收</font>");}else if(data == 0){$("#jbPhoneTip").html("<font color='red'>× 短信验证码发送失败,请重新发送</font>");}else if(data == 2){$("#jbPhoneTip").html("<font color='red'>× 该手机号码今天发送验证码过多</font>");}}});}}else{$("#jbPhoneTip").html("<font color='red'>× 手机号码不能为空</font>");}
}//timer处理函数
function SetRemainTime() {if (curCount == 0) {                window.clearInterval(InterValObj);// 停止计时器$("#btnSendCode").removeAttr("disabled");// 启用按钮$("#btnSendCode").val("重新发送验证码");code = ""; // 清除验证码。如果不清除,过时间后,输入收到的验证码依然有效}else {curCount--;$("#btnSendCode").val("请在" + curCount + "秒内输入验证码");}
}$(document).ready(function() {$("#SmsCheckCode").blur(function() {var SmsCheckCodeVal = $("#SmsCheckCode").val();// 向后台发送处理数据$.ajax({url : "UserAction_checkCode.action", data : {SmsCheckCode : SmsCheckCodeVal}, type : "POST", dataType : "text", success : function(data) {data = parseInt(data, 10);if (data == 1) {$("#SmsCheckCodeTip").html("<font color='#339933'>√ 短信验证码正确,请继续</font>");} else {$("#SmsCheckCodeTip").html("<font color='red'>× 短信验证码有误,请核实后重新填写</font>");}}});});
});


四:验证码用户名和手机号码的js:register.js

//去掉前后空格
function trim(str) {var strnew = str.replace(/^\s*|\s*$/g, "");return strnew;
}
//用户名
function checkusername() {var username = document.form1.username.value;if (username == "" || !isNaN(username.charAt(0))) {document.getElementById("usernameTip").innerHTML = "<font color='red'>× 首字母不能为数字或者用户名不能为空</font>";return false;} else if (username.length < 6 || username.length > 30) {document.getElementById("usernameTip").innerHTML = "<font color='red'>× 用户名长度为6-30位字符</font>";return false;} else {document.getElementById("usernameTip").innerHTML = "<font color='#339933'>√ 用户名合格</font>";// 向后台发送处理数据$.ajax({url : "UserAction_checkUserName.action",// 目标地址data : {username : username}, // 目标参数type : "POST", // 用POST方式传输dataType : "text", // 数据格式:textsuccess : function(data) {data = parseInt(data, 10);if (data != 0) {$("#usernameTip").html("<font color='red'>× 该用户名已经被注册,请重新输入</font>");} else {$("#usernameTip").html("<font color='#339933'>√ 该用户名可以注册,输入正确</font>");}}});return true;}
}
// 登录密码
function checkpassword() {var password = document.form1.password.value;if (password.length < 6 || password.length > 30) {document.getElementById("passwordTip").innerHTML = "<font color='red'>× 密码长度不能小于6位,大于30位</font>";return false;} else if (!isNaN(password)) {document.getElementById("passwordTip").innerHTML = "<font color='red'>× 密码不能全是数字</font>";return false;} else {document.getElementById("passwordTip").innerHTML = "<font color='#339933'>√ 密码合格</font>";return true;}
}
// 确认密码
function checkpasswrodb() {var password = document.form1.password.value;var passwordRepeat = document.form1.passwordRepeat.value;if (trim(password) != trim(passwordRepeat)) {document.getElementById("passwordRepeatTip").innerHTML = "<font color='red'>× 两次密码输入必须一致</font>";return false;} else {document.getElementById("passwordRepeatTip").innerHTML = "<font color='#339933'>√ 密码输入一致</font>";return true;}
}
// 姓名
function checknickname() {var nickname = document.form1.nickname.value;if (trim(nickname) == "") {document.getElementById("nicknameTip").innerHTML = "<font color='red'>× 姓名不能为空</font>";return false;} else {document.getElementById("nicknameTip").innerHTML = "<font color='#339933'>√ 姓名输入正确</font>";return true;}
}
// 联系手机(ajax验证手机号码是否已经存在)
function checkjbPhone() {var jbPhone = document.form1.jbPhone.value;var re= /(^1[3|5|8][0-9]{9}$)/;if (trim(jbPhone) == "") {document.getElementById("jbPhoneTip").innerHTML = "<font color='red'>× 手机号码不能为空</font>";return false;} else if(trim(jbPhone) != ""){if(!re.test(jbPhone)){document.getElementById("jbPhoneTip").innerHTML = "<font color='red'>× 请输入有效的手机号码</font>";return false;}else{document.getElementById("jbPhoneTip").innerHTML = "<font color='#339933'>√ 手机号码输入正确</font>";// 向后台发送处理数据$.ajax({url : "UserAction_checkPhone.action",// 目标地址data : {jbPhone : jbPhone}, // 目标参数type : "POST", // 用POST方式传输dataType : "text", // 数据格式:textsuccess : function(data) {data = parseInt(data, 10);if (data != 0) {$("#jbPhoneTip").html("<font color='red'>× 该手机号码已经被注册,请重新输入</font>");} else {$("#jbPhoneTip").html("<font color='#339933'>√ 该手机号码可以注册,输入正确</font>");}}});return true;}}}
// 证件号码
function checkjbCredentialsCode() {var jbCredentialsCode = document.form1.jbCredentialsCode.value;var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if (trim(jbCredentialsCode) == "") {document.getElementById("jbCredentialsCodeTip").innerHTML = "<font color='red'>× 证件号码不能为空</font>";return false;} else if(trim(jbCredentialsCode) != ""){if(!reg.test(jbCredentialsCode)){document.getElementById("jbCredentialsCodeTip").innerHTML = "<font color='red'>× 请输入合法的证件号码</font>";return false;}else{document.getElementById("jbCredentialsCodeTip").innerHTML = "<font color='#339933'>√ 证件号码输入正确</font>";// 向后台发送处理数据$.ajax({url : "UserAction_checkCredentialsCode.action",// 目标地址data : {jbCredentialsCode : jbCredentialsCode}, // 目标参数type : "POST", // 用POST方式传输dataType : "text", // 数据格式:textsuccess : function(data) {data = parseInt(data, 10);if (data != 0) {$("#jbCredentialsCodeTip").html("<font color='red'>× 该证件号码已经被注册,请重新输入</font>");} else {$("#jbCredentialsCodeTip").html("<font color='#339933'>√ 该证件号码可以注册,输入正确</font>");}}});return true;}}
}
// 所在地区
function checkjbSourceArea() {var jbSourceArea = document.form1.jbSourceArea.value;if (trim(jbSourceArea) == "") {document.getElementById("jbSourceAreaTip").innerHTML = "<font color='red'>× 请选择所在地区</font>";return false;} else {document.getElementById("jbSourceAreaTip").innerHTML = "<font color='#339933'>√ 所在地区选择正确</font>";return true;}
}
// 验证码
function checkNumber() {var checkNum = document.form1.checkNum.value;if (trim(checkNum) == "") {document.getElementById("checkNumTip").innerHTML = "<font color='red'>× 验证码不能为空</font>";return false;} else {document.getElementById("checkNumTip").innerHTML = "<font color='#339933'>√ 验证码合格</font>";// 向后台发送处理数据$.ajax({url : "UserAction_checkNum.action",// 目标地址data : {checkNum : checkNum}, // 目标参数type : "POST", // 用POST方式传输dataType : "text", // 数据格式:textsuccess : function(data) {data = parseInt(data, 10);if (data != 0) {$("#checkNumTip").html("<font color='red'>× 验证码错误</font>");} else {$("#checkNumTip").html("<font color='#339933'>√ 验证码正确</font>");}}});return true;}
}


五:后台action的代码:UserAction.java(这里只是调用了我们的第三方给提供的客户端代码的发送短信的方法,如果是调用其他的短信平台,可以换成他们的发送短信的方法,这里只是给大家做个参考)

package cn.gov.csrc.base.systemmanager.action;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.security.authentication.encoding.MessageDigestPasswordEncoder;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;import cn.gov.csrc.base.action.BaseAction;
import cn.gov.csrc.base.log.service.LogService;
import cn.gov.csrc.base.report.util.CommonUtil;
import cn.gov.csrc.base.report.util.Env;
import cn.gov.csrc.base.systemmanager.model.Count;
import cn.gov.csrc.base.systemmanager.model.User;
import cn.gov.csrc.base.systemmanager.service.CountService;
import cn.gov.csrc.base.systemmanager.service.UserService;
import cn.gov.csrc.base.util.WebContextUtil;import com.sms.webservice.client.SmsReturnObj;
import com.sms.webservice.client.SmsWebClient;
/*** File: UserAction.java * Author: jiangsai * Version: 1.1 * Date: 04/17/2013 * Modify:* Description:用户 * Copyright csrc*/
@Controller()
@Scope("prototype")
@Results({@Result(name = "success", location = "/statics/report.jsp"),@Result(name = "modifyPassword", location = "/statics/modifyPassword.jsp")})
public class UserAction extends BaseAction<User> {private static final long serialVersionUID = 1214696686677691191L;private static Logger log = Logger.getLogger(UserAction.class);private static final String url = Env.getInstance().getProperty("url");private static final String userName = Env.getInstance().getProperty("username");private static final String passWord = Env.getInstance().getProperty("password");private Integer id;private String username;// 用户名private String password;// 密码private String passwordRepeat;// 确认密码private String jbPhone;//手机号码private String jbCredentialsCode;//身份证号码private String checkNum;//图片验证码private String newPassword;private String confirmPassword;private Integer[] ownRoleIds;private UserService userService;private CountService countService;private LogService logService;private Count count = new Count();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPasswordRepeat() {return passwordRepeat;}public void setPasswordRepeat(String passwordRepeat) {this.passwordRepeat = passwordRepeat;}public String getJbPhone() {return jbPhone;}public void setJbPhone(String jbPhone) {this.jbPhone = jbPhone;}public String getJbCredentialsCode() {return jbCredentialsCode;}public void setJbCredentialsCode(String jbCredentialsCode) {this.jbCredentialsCode = jbCredentialsCode;}public String getCheckNum() {return checkNum;}public void setCheckNum(String checkNum) {this.checkNum = checkNum;}public Integer[] getOwnRoleIds() {return ownRoleIds;}public void setOwnRoleIds(Integer[] ownRoleIds) {this.ownRoleIds = ownRoleIds;}public String getNewPassword() {return newPassword;}public void setNewPassword(String newPassword) {this.newPassword = newPassword;}public String getConfirmPassword() {return confirmPassword;}public void setConfirmPassword(String confirmPassword) {this.confirmPassword = confirmPassword;}@Resourcepublic void setUserService(UserService userService) {this.userService = userService;}public UserService getUserService() {return userService;}@Resourcepublic void setCountService(CountService countService) {this.countService = countService;}public CountService getCountService() {return countService;}public LogService getLogService() {return logService;}@Resourcepublic void setLogService(LogService logService) {this.logService = logService;}public Count getCount() {return count;}public void setCount(Count count) {this.count = count;}public void prepareToUpdatePage() {model = userService.getEntity(id);}/*** 用户登录* * @return success*/@Action(value = "UserAction_login")public String login() {Object u = SecurityContextHolder.getContext().getAuthentication().getPrincipal();if (u instanceof User && u != null) {WebContextUtil.getSession().setAttribute("user", u);User user = (User)u;//使用数据库表TBL_BASE_LOG添加用户登录的日志信息logService.saveTblBaseLog(WebContextUtil.getRequest(),"当前操作人【"+user.getNickname()+"】登录系统");} else {// 防止绕过登陆页面直接执行Actionreturn "login";}return SUCCESS;}/*** 用户密码更新*/@Action(value = "UserAction_updateUser")public String updateUser() {if (!newPassword.equals(confirmPassword)) {this.setMessage("新密码与确认密码不一致!");return "modifyPassword";}User u = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder("md5");String psw = encoder.encodePassword(newPassword, null);userService.modifyPassword(u, psw);this.setMessage("保存成功!");return "modifyPassword";}/*** 验证用户名是否存在* * @throws Exception*/@Action(value = "UserAction_checkUserName")public void checkUserName(){String result = "0";try {List<User> list = userService.findUserByUserName(username);if(list != null && list.size() > 0){result = "1";}else{result = "0";}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());} catch (IOException e) {throw new RuntimeException("验证身份证号码出错", e);}}/*** 验证原始密码是否正确* * @throws Exception*/@Action(value = "UserAction_checkPassWord")public void checkPassWord() throws Exception {String result = "0";MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder("md5");String pwd = encoder.encodePassword(password, null);List<User> user = userService.findUserByPassWord(pwd);if (user != null && user.size() > 0) {result = "1";}else{result = "0";}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());}/*** 验证手机号码是否存在*/@Action(value = "UserAction_checkPhone")public void checkPhone(){String result = "0";try {List<User> list = userService.findUserByPhone(jbPhone);if(list != null && list.size() > 0){result = "1";}else{result = "0";}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());} catch (IOException e) {throw new RuntimeException("验证手机号码出错", e);}}/*** 验证身份证号码是否存在*/@Action(value = "UserAction_checkCredentialsCode")public void checkCredentialsCode(){String result = "0";try {List<User> list = userService.findUserByCredentialsCode(jbCredentialsCode);if(list != null && list.size() > 0){result = "1";}else{result = "0";}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());} catch (IOException e) {throw new RuntimeException("验证身份证号码出错", e);}}/*** 验证验证码是否正确*/@Action(value = "UserAction_checkNum")public void checkNum(){try {String result = "0";String check_number_key = (String)WebContextUtil.getSession().getAttribute("CHECK_NUMBER_KEY");if(checkNum != check_number_key && !checkNum.equals(check_number_key)){result = "1";}else{result = "0";}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());} catch (IOException e) {throw new RuntimeException("验证验证码出错", e);}}/*** 验证短信验证码是否正确* * @throws Exception*/@Action(value = "UserAction_checkCode")public void checkCode() throws Exception{String result = "0";/** 获取手动输入的手机短信验证码 */String SmsCheckCode = WebContextUtil.getRequest().getParameter("SmsCheckCode");/** 获取session中存放的手机短信验证码 */String code = (String) WebContextUtil.getSession().getAttribute("code");try {if(SmsCheckCode != code && !SmsCheckCode.equals(code)){result = "0";}else{result = "1";}} catch (Exception e) {throw new RuntimeException("短信验证失败", e);}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());}/*** 验证手机短信是否发送成功* * @throws Exception*/@Action(value = "UserAction_sms")public void sms() throws Exception {String result = "0";/** 手机号码 */String jbPhone = WebContextUtil.getRequest().getParameter("jbPhone");/** 短信验证码 */String code = WebContextUtil.getRequest().getParameter("code");/** 短信验证码存入session(session的默认失效时间30分钟) */WebContextUtil.getSession().setAttribute("code", code);/** 如何初始化失败返回 */if(!initClient()) {return;}/** 单个手机号发送短信的方法的参数准备 */// 手机号码String mobilephone = jbPhone;// 短信内容+随机生成的6位短信验证码String content = "根据中国证监会举报中心委托,特向您发送此条短信。您的注册验证码为:" + code;// 操作用户的IDInteger operId = Integer.parseInt(Env.getInstance().getProperty("operId"));// 定时发送的的发送时间(缺省为空,如果即时发送,填空)String tosend_time = "";// 应用系统的短信ID,用户查询该短信的状态报告(缺省为0,即不需查询短信的状态报告)int sms_id = 0;// 黑名单过滤(0:不需要黑名单过滤,1:需要黑名单过滤,缺省为0)short backlist_filter = 0;// 禁止语过滤(0:不需要禁止语过滤,1:需要禁止语过滤,缺省为0)short fbdword_filter = 0;// 优先级(值越大优先级越高,0:普通,1,:优先,2:最高,缺省为0)short priority = 0;// 短信有效时间(格式为:YYYY-MM-DD HH:mm:ss目前为空)String valid_time = "";/** 发送短信之前先统计一个已经发送的短信条数 */int messageCount = countService.findAllRecord(mobilephone);log.info("已发短信条数为:" +messageCount);if(messageCount < 5){/** 单个手机号发送短信 */if (!sendMessage(mobilephone, content, operId, tosend_time, sms_id,backlist_filter, fbdword_filter, priority, valid_time)) {result = "0";// 失败} else {result = "1";// 成功/** 发送一条短信,记录一条短信记录,为了方便之后的统计短信发送次数 */count.setPhone(mobilephone);// 手机号码count.setCaptcha(code);// 短信验证码count.setSendTime(CommonUtil.getNowDate());// 短信发送时间if(count != null){countService.saveEntity(count);log.info("短信验证码发送记录保存成功!");}}}else{result = "2";//一个手机号码最多发送5条短信验证码log.info("该手机号码今天发送验证码过多");}HttpServletResponse response = WebContextUtil.getResponse();response.setContentType("application/json;charset=UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();out.write(result.toString());}/*** WebService客户端初始化* */public static boolean initClient() {/*** 判断客户端是否已经初始化*/if (!SmsWebClient.enable()) {int ret = 0;try {ret = SmsWebClient.init(url, userName, passWord);if (ret == -1 || !SmsWebClient.enable()) {log.info("短信平台接口初始化失败!");return false;}log.info("短信平台接口初始化成功!" + ret + "-----");} catch (Exception ex) {ex.printStackTrace();log.info("短信平台接口初始化过程中异常!");}}return true;}/*** 单个手机号码发送* * @param mobilephone*            手机号* @param content*            短信内容* @param operId*            操作用户的ID* @param tosend_time*            定时发送的发送时间* @param sms_id*            应用系统的短信ID* @param backlist_filter*            黑名单过滤* @param fbdword_filter*            禁止语过滤* @param priority*            优先级* @param valid_time*            短信有效时间*/public static boolean sendMessage(java.lang.String mobilephone,java.lang.String content, int operId, java.lang.String tosend_time,int sms_id, short backlist_filter, short fbdword_filter,short priority, java.lang.String valid_time) {// 单个手机号码发送try {SmsReturnObj retObj = SmsWebClient.webSendMessage(mobilephone,content, operId, tosend_time, sms_id, backlist_filter,fbdword_filter, priority, valid_time);if (retObj.getReturnCode() != 1) {log.info("短信发送失败,原因为:" + retObj.getReturnMsg());return false;} else {log.info("短信发送成功!返回结果为:" + retObj.getReturnMsg());return true;}} catch (Exception ex) {ex.printStackTrace();log.info("短信发送过程发生异常!");}return true;}}


六:具体的短信接口demo到这里下,这里你下载了也不能成功的发送短信,因为你必须要短信平台商给你提供:url,userName,passWord,operId,以及短信平台商还要绑定你的外网ip地址,这样才能真正的发送短信。

Demo下载链接:http://pan.baidu.com/s/1qWt1Qdm


原文:http://www.zuidaima.com/share/1881657001233408.htm



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中select的用法_mybaties中select用法,以及常用增删改查

查询语句是使用 MyBatis 时最常用的元素之一select元素配置细节如下属性描述取值默认id在这个模式下唯一的标识符&#xff0c;可被其它语句引用parameterType传给此语句的参数的完整类名或别名resultType语句返回值类型的整类名或别名。注意&#xff0c;如果是集合&#xff0c;…

Js获取短信验证码前段效果

一&#xff1a;先上效果图&#xff1a; 二&#xff1a;源代码文件&#xff1a;reg.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http:…

java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

Java 基础语法一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的…

java拉丁正方形_LeetCode JAVA解题---824. 山羊拉丁文

LeetCode 题库 全 JAVA 解题824. 山羊拉丁文原题回顾&#xff1a;给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下&#xff1a;如果单词以元音开头(a, …

opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果

本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下一、马赛克效果马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替&#xff0c;这样可以模糊细节&#xff0c;但是可…

微信端php 开发技术要求,微信第三方平台开发详解——PHP版

申请第三方平台&#xff0c;这个很简单直接按照提示填写&#xff0c;下面的授权事件接收URL中获取的component_verify_ticket是会过期的&#xff0c;所以不要只获取一次&#xff0c;缓存起来每10分钟会发送一次&#xff0c;每1小时会更新一次。附上我的获取component_verify_ti…

刷题神器怎么导入java,怎么导题库_有没有比较好的可以自己导入题库进行模拟考试练习的软件_淘题吧...

① 本人有一题库&#xff0c;怎么把里面的试题全部导出题库都加密了&#xff0c;没有导出功能。只能固定抽题后&#xff0c;整理出来。② 在线考试系统题库怎么导入数据库优考试的考试系统导入题库是用word和excel的模板去编辑试题&#xff0c;再进行导入③ 如何导出机考app题库…

Java读取指定目录下的所有文件名

1.效果图&#xff1a;在控制台输出所有的文件的文件名如下&#xff1a; 2.FileUtil.java: package cn.gov.csrc.base.report.util;import java.io.File; import java.util.ArrayList;public class FileUtil {/*** 获取指定目录下的所有文件名* * param obj* return*/public sta…

php min命令,php min函数怎么用?

php min函数用于返回一个数组中的最小值&#xff0c;或者几个指定值中的最小值&#xff0c;其语法是min(array_values)&#xff0c;参数array_values必需&#xff0c;指规定一个包含值的数组。php min函数怎么用&#xff1f;定义和用法min() 函数返回一个数组中的最小值&#x…

php协程和goroutine,浅谈协程和Go语言的Goroutine

0x00.前言前面写了一篇今天来学习Go语言的Goroutine机制&#xff0c;这也可能是Go语言最为吸引人的特性了&#xff0c;理解它对于掌握Go语言大有裨益&#xff0c;话不多说开始吧&#xff01;通过本文你将了解到以下内容&#xff1a;什么是协程以及横向对比优势Go语言的Goroutin…

Java实现:月,日,年,周,访问量统计

一&#xff1a;工程截图&#xff1a; 二&#xff1a;运行效果图&#xff1a; 三&#xff1a;CountObjectInfo.java: package cn.csrc.base.count;import java.util.Date;public class CountObjectInfo {// 总访问量合计protected int totalCount 0;// 日访问量protected int d…

JavaMelody开源系统性能监控软件:

一&#xff1a;从网上搜索&#xff0c;发现 javamelody 监控web应用程序不错。 JavaMelody能够在QA和实际运行生产环境监测Java或Java EE应用程序服务器。并以图表的形式显示&#xff1a;Java内存和Java CPU使用情况&#xff0c;用户Session数量&#xff0c;JDBC连接数&#x…

java zoneoffset,java - 如何在java8中获取默认的ZoneOffset? - SO中文参考 - www.soinside.com...

tl;drOffsetDateTime.now().getOffset()但您可能应该使用时区而不是仅仅偏离UTC。ZoneId.systemDefault()Offset versus Time Zoneoffset-from-UTC只是一小时&#xff0c;几分钟和几秒钟 - 仅此而已。time zone是特定地区人民使用的偏移的过去&#xff0c;现在和未来变化的历史…

php声波模拟开门,关于 php使用扩展控制树莓派io 驱动超声波测距

经过昨天一下午&#xff0c;终于写好了基于只需要安装完毕&#xff0c;就可以调用函数了&#xff1a;<?php /*** Created by PhpStorm.* User: tioncico* Date: 19-7-6* Time: 下午4:45*/define(PI_TRIG,0);define(PI_ECHO,1);if (wiringPiSetup()false){echo "初始化…

Java和poi导出excel报表

一&#xff1a;poi jar下载地址&#xff1a;点击打开链接&#xff1a; 二&#xff1a;工程截图&#xff1a; 三&#xff1a;运行效果截图&#xff1a; 四&#xff1a;源代码&#xff1a; Student.java: package com.poi.bean;import java.util.Date;public class Student {pri…

sh.k7p.work/index.php,Laowang's Blogs

OpenDayLight(硼Boron版本)实战开发入门OpenDayLight[1](简写为ODL)的硼Boron(0.5.0)版本于2016-09-16 这几天刚刚发布。作为一款开源SDN网络控制器&#xff0c;依托于强大的社区支持以及丰富的功能特性&#xff0c;ODL成为了目前主流的SDN网络控制器开发平台。不仅为开发者提供…

Java和iText导出pdf文档

一&#xff1a;工程截图&#xff1a; 二&#xff1a;项目运行截图&#xff1a; 三&#xff1a;源代码&#xff1a; Book.java package com.iText.bean;public class Book {private int bookId;// 图书编号private String name;// 图书名称private String author;// 图书作者pr…

linux多进程原理,Linux进程调度

极简模式假设我的系统只有一种调度算法cfs那么有个调度的队列 cfs_rq所有running的进程都会 进入这个队列&#xff0c;不在running 或者其他情况会出队列&#xff0c;ok。则假设队列控制的算法有以下。cfs_rq_enqueuecfs_rq_dequeuecfs_rq_pick所操作的是进程描述符 task_struc…

openwrt使用linux内核版本,降低OpenWRT的Linux内核版本

不久前&#xff0c;为了移植某驱动程序&#xff0c;笔者可谓绞尽脑汁&#xff0c;在4.1内核版本上&#xff0c;尝试了很多次都没能成功&#xff0c;后来仔细分析&#xff0c;才知道是内核版本过高导致的&#xff0c;本文给出降低内核版本的方法&#xff0c;具体编译环境的搭建&…

linux天气软件,类似智能手机!Linux中安装Conky天气插件

如今&#xff0c;智能手机中很多都安装相匹配外观的天气小插件&#xff0c;而对于喜欢操作系统平台的用户而言&#xff0c;可以在你的Linux桌面中拥有像智能手机一样的天气外观。通过Flair Weather Conky可以将使用一个GUI工具Conky Manager在Linux中轻松地管理Conky。这里介绍…