问题一:我现在点击获取手机验证码,虽然现实正在发送 但是手机接收不到验证码

我试了很多 也不知道哪的问题

我们使用的是榛子云短信平台, 官网地址:http://smsow.zhenzikj.com

已经解决
——————————————————————————————
问题二: 为什么我点击获取验证码 没有显示秒数

已经解决
——————————————————————————————

问题三:读完秒数之后,点击重新获取短信验证码没有反应?
问题四:大佬帮我看看 :以先把短信验证码存session,然后前端输入验证码之后,去后台跟session里的值比较 写的代码对不?

页面:

 <form id="FormContact" method="post" action="verify_code"><!-- 联系方式 --><div class="form-wrap contact-info" id="FormWrapContact"><div class="field-wrap" data-field="mobile" style="position:relative;z-index:100;"><label class="short">手机号:</label><span class="field"><span class="ui-text"><input name="mobile" value="" type="mobile" placeholder="请输入您的手机号码" data-format="number" /></span><span class="error"></span></span></div><div class="field-wrap" data-field="mobile" style="position:relative;z-index:100;"><label class="short">验证码:</label><span class="field"><input class="ui-text short" type="text" name="verify_code" maxlength="4" ><span class="error" style="display: inline;"></span></span><span class="field vcode" data-type="vcode"><img  width="120" id="verify_code_img" height="32" src="/getImg" onclick="javascript:changeImg()"><a href="#" class="doc-color-link desc" onclick="javascript:changeImg()" >看不清,换一个?</a></span></div><div class="field-wrap" data-field="mobile" style="position:relative;z-index:100;"><label class="short">短信验证码:</label><span class="field"><span class="get-mvcode"><input class="ui-text short" type="text" name="sms_vcode" length="6" data-format="number" maxlength="6" /><input id="sendSms" class="ui-btn gray" type="button" name="getMvcode" value="点击获取" /></span><div class="error"></div><span class="info" style="display:none;">请将收到短信中的6位数字填入框内</span></span></div><div class="field-wrap" style="z-index:8;"><label class="short"></label><span class="field"><input class="ui-btn green long" name="contactPost" type="button" value="登录" /></span><div style="padding-top: 37.5px;text-align: left;margin-left: 102.6px;"><span class="info" style="margin-top:5px;margin-left:-3px;"><span class="doc-color-micro"><input style="margin-right: 5px;position:relative;top:-2px;" type="checkbox" checked disabled />同意<a class="doc-color-micro" style="margin-left: 5px;text-decoration: underline;" href="http://www.rong360.com/static/main/protocal/networkUser.html" target="_blank">融360服务条款</a></span></span></div></div></div></form>

js

<!-- 触发JS刷新  切换图片-->
<script type="text/javascript">function changeImg(){var img = document.getElementById("verify_code_img");img.src = "/getImg?date=" + new Date();}</script><!-- 发送短信验证码--><script type="text/javascript">$('#sendSms').bind('click',function(){var mobile = $("input[name='mobile']").val();//手机号var verifyCode = $("input[name='verify_code']");//手机验证码var vcode = verifyCode.val();//验证码var me = $(this);if(mobile.length != 11){$("input[name='mobile']").parentsUntil('.form-wrap','.field-wrap').find('.error').html('手机号码错误').show();return;}if(vcode.length < 4){$(verifyCode).parentsUntil('.form-wrap','.field-wrap').find('.error').html('验证码错误').show();return;}if($('[name="getMvcode"]').hasClass("doing")){return;}$('[name="getMvcode"]').addClass("doing").val('正在发送');$.ajax({url : '/sendSms',data: data,type: 'POST',dataType: 'json',success:function(data){if(data.code == 0){countdownHandler();}else{$("input[name='sms_vcode']").val('').parentsUntil('.form-wrap','.field-wrap').find('.error').html(data.message).show();var img_url = $('#verify_code_img').attr('src');$('#verify_code_img').attr('src',img_url+'1');$('[name="getMvcode"]').removeClass("doing");$('#sendSms').val("点击获取");}}});//短信验证码倒计时function  countdownHandler(){var $button = $("#sendSms");var number = 60;var countdown = function(){if (number == 0) {$button.attr("disabled",false);$button.html("发送验证码");number = 60;return;} else {$button.attr("disabled",true);$button.html(number + "秒 重新发送");number--;}setTimeout(countdown,1000);}setTimeout(countdown,1000);}});<!-- 提交 -->$('input[name="contactPost"]').click('click',function() {var mobile = $("input[name='mobile']").val();var smsCode = $("input[name='sms_vcode']").val();if (mobile.length != 11) {$("input[name='mobile']").parentsUntil('.form-wrap', '.field-wrap').find('.error').html('手机号码输入错误').show();return;}if (smsCode.length < 4) {$("input[name='sms_vcode']").parentsUntil('.form-wrap', '.field-wrap').find('.error').html('手机验证码错误').show();return;}$.ajax({url: "/register",async : true,type: "post",dataType: "text",data: data,success: function (data) {if(data == 'success'){alert("注册成功");return ;}alert(data);}});});</script>

MobilecodeController

package com.firstblood.financial.controller;import com.alibaba.fastjson.JSONObject;
import com.zhenzi.sms.ZhenziSmsClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Random;@Controller
public class MobilecodeController {/*** @param request* @param mobile* @return*/@PostMapping("/sendSms")public Object sendSms(HttpServletRequest request, String mobile) {try {JSONObject json = null;//生成6位验证码String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);//发送短信ZhenziSmsClient client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com", "100689", "9517cb5e-783c-4906-8d00-69ef22b5e891");String result = client.send(mobile, "您的验证码为:" + verifyCode + ",该码有效期为5分钟,该码只能使用一次!");json = JSONObject.parseObject(result);if (json.getIntValue("code") != 0) {//发送短信失败return "fail";}//将验证码存到session中,同时存入创建时间//以json存放,这里使用的是阿里的fastjsonHttpSession session = request.getSession();json = new JSONObject();json.put("verifyCode", verifyCode);json.put("createTime", System.currentTimeMillis());// 将认证码存入SESSIONrequest.getSession().setAttribute("verifyCode", json);return "success";} catch (Exception e) {e.printStackTrace();}return null;}}

效验验证码是否正确

package com.firstblood.financial.controller;import com.google.code.kaptcha.Constants;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.util.logging.Logger;@Controller
public class KaptchaController {private static  final transient Logger log = Logger.getLogger(String.valueOf(KaptchaController.class));/**** @param request 验证手机短信验证码在页面上与后台判断是否一致* @param kaptchaReceived* @return*/@PostMapping("/register")public String loginCheck(HttpServletRequest request,
//              @RequestParam(value = "username", required = true) String username,
//              @RequestParam(value = "password", required = true) String password,@RequestParam(value = "sms_vcode", required = true) String kaptchaReceived){//用户输入的验证码的值String kaptchaExpected = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);//校验验证码是否正确if (kaptchaReceived == null || !kaptchaReceived.equals(kaptchaExpected)) {log.info("验证码错了");return "kaptcha_error";//返回验证码错误}//校验用户名密码// ……// ……log.info("验证码对了");return "success"; //校验通过返回成功}}

解决方法1


把短信签名给删了, 就好使了

短信验证码实现流程

1、构造手机验证码,生成一个6位的随机数字串;
2、使用接口向短信平台发送手机号和验证码,然后短信平台再把验证码发送到制定手机号上
3、将手机号验证码、操作时间存入Session中,作为后面验证使用;
4、接收用户填写的验证码、手机号及其他注册数据;
5、对比提交的验证码与Session中的验证码是否一致,同时判断提交动作是否在有效期内;
6、验证码正确且在有效期内,请求通过,处理相应的业务。

如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口。

1. 安装sdk

下载地址: http://smsow.zhenzikj.com/doc/sdk.html

下载下来是jar文件,需要将jar发布到本地的maven仓库中, 在cmd环境下输入:

mvn install:install-file -DgroupId=com.zhenzi -DartifactId=sms -Dversion=1.0.0 -Dpackaging=jar -Dfile=/Users/Downloads/ZhenziSmsSDK.jar

注意:-Dfile是你本地下载的jar文件的路径,本例中使用的mac系统

接下来在pom.xml中引入项目:

<dependency><groupId>com.zhenzi</groupId><artifactId>sms</artifactId><version>1.0.0</version>
</dependency>

ok, sdk安装完毕,其实也挺简单的

2. 申请测试账号,获取appId、appSecret

测试账号需要人工申请,一般几分钟就可以申请下来。

使用测试账号登录管理后台获取appId、appSecret, 地址: http://sms.zhenzikj.com/zhenzisms_user

在"我的应用"->"详情"中打开:

3.用法

使用事先申请的AppId、AppSecret初始化ZhenziSmsClient:

ZhenziSmsClient client = new ZhenziSmsClient(appId, appSecret);

AppId、AppSecret是短信平台分配的

1)发送短信

String result = client.send("15811111111", "您的验证码为4534,有效时间为5分钟");

send方法用于单条发送短信

参数1:接收者手机号码,参数2:短信内容

返回结果是json格式的字符串, code: 发送状态,0为成功。非0为发送失败,可从data中查看错误信息

         {"code":0,"data":"发送成功"}

错误代码表

错误码 原因 解决方案
100 参数格式错误 检查请求参数是否为空, 或手机号码格式错误
101 短信内容超过1000字 短信内容过长,请筛检或分多次发送
105 appId错误或应用不存在 请联系工作人员申请应用或检查appId是否输入错误
106 应用被禁止 请联系工作人员查看原因
107 ip错误 如果设置了ip白名单,系统会检查请求服务器的ip地址,已确定是否为安全的来源访问
108 短信余额不足 需要到用户中心进行充值
109 今日发送超过限额 如果设置了日发送数量,则每个接收号码不得超过这个数量
110 应用秘钥(AppSecret)错误 检查AppSecret是否输入错误,或是否已在用户中心进行了秘钥重置
111 账号不存在 请联系工作人员申请账号
1000 系统位置错误 请联系工作人员或技术人员检查原因

SDK下载地址:http://smsow.zhenzikj.com/doc/sdk.html


测试成功

问题二解决

js代码改为:

<!-- 发送短信验证码--><script type="text/javascript">$('#sendSms1').bind('click',function(){var mobile = $("input[name='mobile']").val();//手机号var verifyCode = $("input[name='verify_code']");//手机验证码var vcode = verifyCode.val();//验证码var me = $(this);if(mobile.length != 11){$("input[name='mobile']").parentsUntil('.form-wrap','.field-wrap').find('.error').html('手机号码错误').show();return;}if(vcode.length < 4){$(verifyCode).parentsUntil('.form-wrap','.field-wrap').find('.error').html('验证码错误').show();return;}if($('[name="getMvcode"]').hasClass("doing")){return;}$('[name="getMvcode"]').addClass("doing").val('正在发送');$.ajax({url : '/sendSms',data: {mobile:mobile,verify_code:vcode},type: 'POST',dataType: 'text',async:false,success:(data)=>{console.log(`数据:${data}`);if(data==='success'){console.log(data);countdownHandler();}else{$("input[name='sms_vcode']").val('').parentsUntil('.form-wrap','.field-wrap').find('.error').html(data.message).show();var img_url = $('#verify_code_img').attr('src');$('#verify_code_img').attr('src',img_url+'1');$('[name="getMvcode"]').removeClass("doing");$('#sendSms1').val("点击获取");}}});//短信验证码倒计时function  countdownHandler(){var button = $("#sendSms1");var number = 60;var timeTask=setInterval(()=>{if(number===0){console.log(`来清计时器了,当前还剩${number}秒`);button.removeAttr("disabled");button.val("发送验证码");clearInterval(timeTask);}else{if(number>0){button.attr("disabled",true);button.val(number + "秒 重新发送");number--;}}},1000);}

返回值类型 不是json 而且 h5和jQuery 不能同时在一起 把$去掉

解决问题四

<!-- 发送短信验证码--><script type="text/javascript">$('#sendSms1').bind('click',function(){var mobile = $("input[name='mobile']").val();//手机号var verifyCode = $("input[name='verify_code']");//手机验证码var vcode = verifyCode.val();//验证码var me = $(this);if(mobile.length != 11){$("input[name='mobile']").parentsUntil('.form-wrap','.field-wrap').find('.error').html('手机号码错误').show();return;}if(vcode.length < 4){$(verifyCode).parentsUntil('.form-wrap','.field-wrap').find('.error').html('验证码错误').show();return;}$('[name="getMvcode"]').val('正在发送');$.ajax({url : '/sendSms',data: {mobile:mobile,verify_code:vcode},type: 'POST',dataType: 'text',async:false,success:(data)=>{console.log(`数据:${data}`);if(data==='success'){console.log(data);countdownHandler();}else{$("input[name='sms_vcode']").val('').parentsUntil('.form-wrap','.field-wrap').find('.error').html(data.message).show();var img_url = $('#verify_code_img').attr('src');$('#verify_code_img').attr('src',img_url+'1');$('[name="getMvcode"]').removeClass("doing");$('#sendSms1').val("点击获取");}}});//短信验证码倒计时function  countdownHandler(){var button = $("#sendSms1");var number = 60;var timeTask=setInterval(()=>{if(number===0){console.log(`来清计时器了,当前还剩${number}秒`);button.attr("disabled",false);button.val("发送验证码");clearInterval(timeTask);}else{if(number>0){button.attr("disabled",true);button.val(number + "秒 重新发送");number--;}}},1000);}

因为你已经将按钮弄成不可点击了,这个就没必要了

调试:

Microsoft Windows [版本 10.0.16299.125]
(c) 2017 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd DesktopC:\Users\Administrator\Desktop>echo 大大大 >> 1.4
拒绝访问。C:\Users\Administrator\Desktop>echo 大大大 >> 1.htmlC:\Users\Administrator\Desktop>echo <html><body><button disable>ss</button><body></html> >>2.html
此时不应有 <。C:\Users\Administrator\Desktop>echo "<html><body><button disable>ss</button><body></html>" >> 2.htmlC:\Users\Administrator\Desktop>echo "<html><body><button disable id='test'>ss</button><body></html>" >> 2.htmlC:\Users\Administrator\Desktop>

把这两个地方改了

Java中IDEA,Springboot实现手机获取验证码和倒计时相关推荐

  1. 倒计时到0停止,用在手机获取验证码的倒计时

    <input type="text" placeholder="填写验证码" class="check1 "/><butt ...

  2. java curl get_如何从Java中的curl get请求获取文件?

    我正在尝试使用API​​下载一些XBRL文件.为了做到这一点,我需要做一个卷曲的请求,就像这样:如何从Java中的curl get请求获取文件? curl -XGET http://distribut ...

  3. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值public static void testReflect(Object model) throws Exception{for (F ...

  4. springboot向手机发送验证码

    ** springboot向手机发送验证码 ** 1.在腾讯云里面申请短信签名,短信模板 在百度搜索腾讯云,进入到腾讯云里面,在产品里搜索短信 然后找到国内短信 创建签名和模板,创建签名可以用公众号. ...

  5. 实用技巧——获取验证码的倒计时

    实用技巧--获取验证码的倒计时 效果图 源码:GitHub CountDownTimer 创建对象,调用start的方法,开始倒计时 /*** 第一个参数:总时长(毫秒)* 第二个参数:多久执行一次回 ...

  6. 前端-uniapp开发app登录逻辑(人机验证以及手机获取验证码)

    1.逻辑梳理 跳转登录页面后,显示需要手机登录.填写手机号->点击获取验证码->弹出人机验证页面->拼图成功->请求后端接口给手机发验证码->获取验证码文字变成60s计时 ...

  7. 如何使用Java中的UTC或GMT获取当前日期和时间?

    当我创建一个新的Date对象时,它被初始化为当前时间,但是在本地时区. 如何获取格林尼治标准时间的当前日期和时间? #1楼 您可以直接使用 SimpleDateFormat dateFormatGmt ...

  8. Java中对接钉钉API获取数据流程

    场景 需要做后台管理系统,接入钉钉API获取人员.考勤.审批等相关数据. 实现 钉钉开放平台应用开发文档 https://developers.dingtalk.com/document/app 首先 ...

  9. 手机获取验证码的功能

    目标:注册新用户时有验证码功能,点击获取验证码按键,验证码会发送到手机上. 关键: 1.获取随机数: 2.将获取到的随机数保存并发送至手机. 思路:验证一般是为了防止用户恶意注册,所以不必写进将验证码 ...

最新文章

  1. python写入csv文件的几种方法
  2. uvalive5096(积分题)
  3. android文件加解密开发,Android文件加密解密的实现
  4. 01: 实现注册登录功能
  5. 乐刻运动 app android,乐刻运动
  6. spring mvc学习(16)Could not publish server configuration for Tomcat v8.0 Server at localhost.
  7. 【HDU - 6662】Acesrc and Travel(树形dp,博弈dp)
  8. (81)什么是原型验证?
  9. python考勤管理系统_python基础教程:face++与python实现人脸识别签到(考勤)功能...
  10. JZOJ5371 组合数问题
  11. quartus II 13.1 软件破解
  12. Java --人民币(RMB)小写/数字转换大写工具类
  13. Android 下拉刷新控件
  14. 对称矩形C语言,c语言编程求任意对称正定矩阵的逆。
  15. python---面向对象实例(烤地瓜、搬家具)
  16. 苏宁易购获得suning商品详情 API 返回值说明
  17. 查看google浏览器里的证书
  18. Java学习第一周(2.20~2.24)
  19. 【GoLang】Map的遍历
  20. 华证ESG评级数据2009-2022年:季度评级、年末评级、季度平均得分

热门文章

  1. Q102:光线追踪场景(4)——面朝大海
  2. 数据挖掘-二手车价格预测 Task02:数据分析
  3. 计算机专业岗位细分及学习必备清单
  4. 如何全面认识大数据分析的基础知识
  5. 物联网卡得持续增长对企业带来怎样的挑战
  6. 美赛整理之投影寻踪模型及其求解
  7. java内存映射缓存,java – 用于数据库实现的内存映射的MappedByteBuffer或直接ByteBuffer?...
  8. spring实现mqtt服务端_SpringBoot--实战开发--MQTT消息推送(六十)
  9. fckeditor php 不显示,PHP Fckeditor上传文件(或图片)中文显示为乱码的解决方法
  10. php 说说,PHP程序员:你过来,给我说说 $this,self,static 有什么区别?