我的qq 2038373094
1、借助第三方免费的sdk接口,下载java sdk
http://smsow.zhenzikj.com/doc/sdk.html
下载后的SDK只包含一个jar文件,并且不依赖任何其他jar包或文件,直接导入到工程中即可使用。
把下载结束的jar包导入工程中
2、还需要带入三个包:https://download.csdn.net/download/qq_37591637/11162911
commons-httpclient-3.1.jar
commons-logging-1.0.4.jar
codec-1.3.jar
3、查看自己的AppId、AppSecret,这个后面会用到
4、可以编辑短信模板,这样的好处不需要每次发送短信都要输入
思路:
1、前端用户填写手机号码,点击发送校验码,点击这个事件把手机号码通过ajax传给后台
2、后台随机生成一个校验码,把这个校验码通过短信接口发送给相应的手机用户
3、后台把校验码和当前的时间存储起来,当用户在前端页面填写校验码的时候,把两个值进行比较,把两个时间做差,5分钟之内或者半个小时之内;
jsp代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>手机获取校验码操作</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/regedit.js"></script>
</head>
<body>
<form>
<div>
手机号: <input type="text" id="number">
</div>
<div>
验证码: <input type="text" id="jym"><button type="button" onclick="getmess()">获取短信验证码</button>
</div>
<div><button type="button" class="sub-btn" onclick="check()">提交</button></div>
</form>
</body>
</html>
java后台代码
我采用的是ssh框架
package cn.com.service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import com.zhenzi.sms.ZhenziSmsClient;
@Repository(value="getMessage")
@Scope("prototype")
public class GetMessage {
private String tell;
public String getTell() {
return tell;
}
public void setTell(String tell) {
this.tell = tell;
}
public String sendSms() {
JSONObject json=null;
//生成6位验证码
String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);
//发送短信
ZhenziSmsClient client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com", "你的id", "你的密钥");
String result;
try {
result = client.send(tell, "在线心理测试平台,您的验证码为:" + verifyCode + ",该码有效期为5分钟,若非本人操作,请忽略这条信息");
json = JSONObject.fromObject(result);
} catch (Exception e1) {
e1.printStackTrace();
}
if(json.getInt("code") != 0){System.out.println("发送短信失败");}
//将验证码给前台做校验
HttpServletResponse response=ServletActionContext.getResponse();
JSONObject js=new JSONObject();
js.put("screct", verifyCode);
try {
response.getWriter().write(js.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
js代码
var jym;
var time;
function getmess(){
//1.获取手机号码
var tell=$("#number").val();
//开始ajax
$.ajax({
type : "post",
url : "http://localhost:8080/PsychoSys/sendmess.action",
dataType :"text",
data : {
tell : tell
},
success : function(ret) {
//关闭模态框
var jb= eval('(' + ret + ')');
//根据:分成前后两个,然后前面的校验码,后面的是时间,存储起来为全局变量
jym=jb.screct;
//获取当前的时间
time =new Date().getTime();
alert(jym);
},
})
//开始ajax
}
function check(){
var my=$("#jym").val();
var time1 =new Date().getTime();
var zc=(time1-time)/300000;
alert(zc);
if(my==jym&&zc<5){
alert("输入正确");
}else{
alert("输入错误");
}
}
不足之处
1、还有需要完善的地方,点击获取验证码,是1分钟才能点击一次的
2、点击验证码会有倒计时