眾所周知在前段的工作中註冊信息或獲取當前手機號信息等需求,我們基本上都要涉及到手機號驗證碼,在網路上搜索的案例雜亂無章,用的時候全是坑,真心不想用了,然後自己寫了一個獲取手機驗證碼的倒計時效果。有需求的伙伴們可以看看怎麼實現的。 如何獲取手機驗證碼? 小月不知道大家是利用什麼平臺去獲取驗證碼的,但是 ...
眾所周知在前段的工作中註冊信息或獲取當前手機號信息等需求,我們基本上都要涉及到手機號驗證碼,在網路上搜索的案例雜亂無章,用的時候全是坑,真心不想用了,然後自己寫了一個獲取手機驗證碼的倒計時效果。有需求的伙伴們可以看看怎麼實現的。
如何獲取手機驗證碼?
小月不知道大家是利用什麼平臺去獲取驗證碼的,但是告訴大家我是在哪個平臺獲取的。
LeanCloud :https://leancloud.cn/
文檔:https://leancloud.cn/docs/sms_guide-js.html
在這個平臺首先去要註冊一個賬號,在設置裡面設置自己的信息按照文檔去操作就可以了這裡不多說了,大部分是後臺去操作些介面的,我們前端有能力的可以自己去嘗試用php去寫介面。(懶惰的我是不會寫。)
一般是兩個介面:
- 發送驗證請求(這樣你的手機會受到簡訊驗證哦)
- 返回數據驗證手機號和驗證是否一致
根據後臺攻城獅的介面去實現吧。
前端頁面的工作
下麵這段代碼就是上圖所示的頁面
<div class="pop"> <div class="con"> <span class="close"><img src="img/close.png"></span> <div class="page1"> <p class="info"> <span class="title">手機號:</span> <input type="tel" class="tel" id="mobile" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" required="" placeholder="請輸入您的手機號"> </p> <p class="info"> <span class="title">驗證碼:</span> <input type="tel" class="code" placeholder="輸入驗證碼"> <span class="code1">獲取驗證碼</span> </p> <div class="demand demand2" style="width: 70%; margin-top: 20px;">提交</div> </div> <div class="page2"> <p class="p1">提交成功</p> <p class="p2">我們將在索要成功後</p> <p class="p2">第一時間通知您!</p> <div class="demand demand3" style="width: 80%; margin-top: 20px; margin-bottom: 10px;">朕知道了</div> </div> </div> </div>
校驗手機號是否正確
//校驗手機號 //頁面的input寫的正則下麵直接調用方法就可以的 jQuery.extend({ checkmobileNo: function(str) { var re =/^1[3|7|5|8]\d{9}$/; if (re.test(str)) { return true; } else { return false; } } });
JS/JQ部分處理髮送簡訊驗證請求
//發送驗證碼給手機
$.ajax({ type: 'GET', url:"你們後臺提供的介面" + mobile, //即上面的介面1 success: function(data, status) { if (data.errcode==0) { alert("已發送"); $(".code1").attr("disabled", "disabled"); $(".code1").css("background-color", "#b4b2b3"); //下麵就是實現倒計時的效果代碼 var d = new Date(); d.setSeconds(d.getSeconds() + 59); var m = d.getMonth() + 1; var time = d.getFullYear() + '-' + m + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); var id = ".code1"; var end_time = new Date(Date.parse(time.replace(/-/g, "/"))).getTime(), //月份是實際月份-1 sys_second = (end_time - new Date().getTime()) / 1000; var timer = setInterval(function() { if (sys_second > 1) { sys_second -= 1; var day = Math.floor((sys_second / 3600) / 24); var hour = Math.floor((sys_second / 3600) % 24); var minute = Math.floor((sys_second / 60) % 60); var second = Math.floor(sys_second % 60); var time_text = ''; if (day > 0) { time_text += day + '天'; } if (hour > 0) { if (hour < 10) { hour = '0' + hour; } time_text += hour + '小時'; } if (minute > 0) { if (minute < 10) { minute = '0' + minute; } time_text += minute + '分'; } if (second > 0) { if (second < 10) { second = '0' + second; } time_text += second + '秒'; } $(id).text(time_text); } else { clearInterval(timer); $(".code1").attr("disabled", false); $(".code1").text('獲取驗證碼'); $(".code1").css("background-color", "#f67a62"); } }, 1000); }else{ alert("發送失敗,請再試一次。"); } }, error: function(data, status) { alert(status); } }); });
向伺服器提交信息
//驗證驗證碼和手機發送的驗證碼是否一致 $.ajax({ type: 'GET', url: "介面2", success: function(data, status) { if (data.errcode==0) { //向伺服器提交信息 $.ajax({ type: 'POST', url: "向伺服器提交你們索要填寫的信息介面", data: JSON.stringify({ //data這裡看你們的需求根據介面的數據去寫 "project_id": pid, "phone": mobile, "device":d }), success: function(data, status) { if (data.errcode==0) { $('.page1').hide(); $('.page2').show(); }else{ alert("提交失敗,請在嘗試一次!"); } }, error: function(data, status) { alert(data.errMsg); } }); }else{ alert("驗證碼不正確!"); } }, error: function(data, status) { alert(status); } }); });
終於寫完了,大家有需求的自己嘗試一下吧。有疑問的可以來問小月,想要案例源碼的找小月來要把,DEMO 打開後請加QQ群在群文件可以自行下載哦!