主要参数:
appid
appkey
短信签名
模板id
1. 发短信工具类
public class SmsUtil {
static final int appid = 12345;
static final String appkey = "";
// 短信模板ID,需要在短信应用中申请
static int templateId = 123456; // NOTE: 这里的模板ID`7839`只是一个示例,真实的模板ID需要在短信控制台中申请
//templateId7839对应的内容是"您的验证码是: {1}"
// 签名
static String smsSign = "中国移动"; // NOTE: 这里的签名"腾讯云"只是一个示例,真实的签名需要在短信控制台中申请,另外签名参数使用的是`签名内容`,而不是`签名ID`
/***
* 发送验证码
* @param phone 手机号
* @param smsCode 验证码
* @return
*/
public static boolean sendSms(String phone,String smsCode) {
try {
String[] params = {smsCode};//数组具体的元素个数和模板中变量个数必须一致,例如事例中templateId:5678对应一个变量,参数数组中元素个数也必须是一个
SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
SmsSingleSenderResult result = ssender.sendWithParam("86", phone,templateId, params, "", "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信
System.out.println(result);
JSONObject json = new JSONObject(result.toString());
if(json.has("errmsg") && "OK".equals(json.getString("errmsg")))
return true;
} catch (HTTPException e) {
// HTTP响应码错误
e.printStackTrace();
} catch (JSONException e) {
// json解析错误
e.printStackTrace();
} catch (IOException e) {
// 网络IO错误
e.printStackTrace();
}
return false;
}
}
2. controller
@RequestMapping(value = "/sendDynamicCode")
@ResponseBody
public JSONObject sendSms(HttpSession session, Model model,String phone) {
//生成6位验证码
String dynamicCode = String.valueOf(new Random().nextInt(899999) + 100000);
boolean sendSms = SmsUtil.sendSms(phone, dynamicCode);
if(sendSms == true) {
//消息发送成功后,把动态码返回给页面做校验。
JSONObject json = new JSONObject();
json.put("dynamicCode", dynamicCode);
json.put("msg", "发送成功");
json.put("createTime", System.currentTimeMillis());
System.out.println(json.getString("dynamicCode"));
return json;
}else {
//消息发送失败
JSONObject json2 = new JSONObject();
//json2.put("dynamicCode", dynamicCode);
json2.put("msg", "发送失败");
//json2.put("createTime", System.currentTimeMillis());
System.out.println(json2.getString("msg"));
return json2;
}
}
3.页面参考
<a id="get-dynamic-code" class="get-dynamic-code">获取动态码</a>
<style type="text/css">
.get-dynamic-code {
float: right;
width: 100px;
height: 38px;
line-height: 40px;
font-size: 18px;
text-align: center;
padding-top: 1px;
padding-bottom: 4px;
background-color: #75ceff;
cursor: pointer;
color: #fff;
}
</style>
//发送动态码
$("#get-dynamic-code").on("click", function(){
var phone = $("#phone").val();
$.ajax({
type: "POST",
async : true,
data: {"phone":phone},
url:"<%=context%>/sendDynamicCode",
dataType: "json",
success: function (data) {
//后端生成的验证码
dynamicCode2 = data.dynamicCode;
var msg = data.msg;
//alert(msg);
alert(dynamicCode2);
/* var jsonData = $.parseJSON(JSON.stringify(data));
if (jsonData.status == 0) {
//alert("发送成功");
} else if (jsonData.status == 1) {
//alert("发送失败");
} */
}
});
})
//后端生成的动态码
var dynamicCode2;
$('#loginBtn').click(function(){
checkLogin();
});
function checkLogin(){
var dynamicCode=$('#dynamic-code').val();
if(dynamicCode.length==0){
alert("请输入手机动态码!");
return ;
}
// 检查验证码
//输入的动态码
var inputCode = $("#dynamic-code").val();
if(inputCode != dynamicCode2){
alert("动态码错误!")
$("#dynamic-code").val("");
}
}