2019-08-27

PHP之短信驗(yàn)證碼功能

現(xiàn)在網(wǎng)站在建設(shè)網(wǎng)站時(shí)為了保證用戶信息的真實(shí)性,往往會(huì)選擇發(fā)短信給用戶手機(jī)發(fā)驗(yàn)證碼信息,只有通過(guò)驗(yàn)證的用戶才可以注冊(cè),這樣既保證了用戶的聯(lián)系信息資料的100%的準(zhǔn)確性,也為用戶提供了一種最方便快捷的注冊(cè)方式 。

那么我們今天就來(lái)說(shuō)一下 短信發(fā)送原理, 如下圖

PHP之短信驗(yàn)證碼功能

工作開(kāi)發(fā)流程:

 第一、實(shí)現(xiàn)php手機(jī)短信驗(yàn)證功能的基本思路

  1谆棺、要找到短信服務(wù)提供商,接入短信服務(wù)

  2罕袋、在網(wǎng)站信息提交頁(yè)面請(qǐng)求發(fā)送信息

  3改淑、服務(wù)器向短信服務(wù)提供商通信,提交發(fā)送請(qǐng)求

4浴讯、短信服務(wù)提供商通過(guò)運(yùn)營(yíng)商將信息發(fā)送到用戶的手機(jī)中

第二 :手機(jī)號(hào)碼短信驗(yàn)證前臺(tái)頁(yè)面效果實(shí)現(xiàn)

<!DOCTYPE html>

<html lang="en">

<head>

? ? <title>鄭州傳智播客</title>

? ? <meta charset="UTF-8">

? ? <meta name="Author" content="PHP就業(yè)老師"/>

<style type="text/css">

? ? *{margin:0;padding:0;}

</style>

? ? <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>

? ? <script type="text/javascript">

? ? ? ? var InterValObj; //timer變量朵夏,控制時(shí)間

? ? ? ? var count = 60; //間隔函數(shù),1秒執(zhí)行

? ? ? ? var curCount;//當(dāng)前剩余秒數(shù)

? ? ? ? function codeRandom(chars) {

? ? ? ? ? ? var res="";

? ? ? ? ? ? for(var i=0;i<chars;i++){

? ? ? ? ? ? ? ? res += Math.floor(Math.random()*10);

? ? ? ? ? ? }

? ? ? ? ? return res;

? ? ? ? }

? ? ? ? //timer處理函數(shù)

? ? ? ? function SetRemainTime() {

? ? ? ? ? ? if (curCount == 0) {

? ? ? ? ? ? ? ? window.clearInterval(InterValObj);//停止計(jì)時(shí)器

? ? ? ? ? ? ? ? $("#sub").removeAttr("disabled");//啟用按鈕

? ? ? ? ? ? ? ? $("#sub").val("重新發(fā)送驗(yàn)證碼");

? ? ? ? ? ? ? ? code = ""; //清除驗(yàn)證碼榆纽。如果不清除仰猖,過(guò)時(shí)間后,輸入收到的驗(yàn)證碼依然有效

? ? ? ? ? ? }

? ? ? ? ? ? else {

? ? ? ? ? ? ? ? curCount--;

? ? ? ? ? ? ? ? $("#sub").val("請(qǐng)?jiān)? + curCount + "秒內(nèi)輸入驗(yàn)證碼");

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? //獲取手機(jī)號(hào)碼

? $(function () {

? ? $("#sub").click(function () {

? ? ? ? var phone=$("#phone").val(); //獲取手機(jī)號(hào)碼

? ? ? ? curCount = count;

? ? ? ? if(phone!=''){

? ? ? ? ? ? //驗(yàn)證手機(jī)有效性

? ? ? ? ? ? var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;

? ? ? ? ? ? if(!myreg.test($('#phone').val()))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? alert('請(qǐng)輸入有效的手機(jī)號(hào)碼奈籽!');

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? phone = $('#phone').val();

? ? ? ? //驗(yàn)證碼(隨機(jī)生成)

? ? ? ? var code= codeRandom(4);

? ? ? ? ? ? //設(shè)置button效果饥侵,開(kāi)始計(jì)時(shí)

? ? ? ? ? ? $("#sub").attr("disabled", "true");

? ? ? ? ? ? $("#sub").val("請(qǐng)?jiān)? + curCount + "秒內(nèi)輸入驗(yàn)證碼");

? ? ? ? ? ? InterValObj = window.setInterval(SetRemainTime, 1000); //啟動(dòng)計(jì)時(shí)器,1秒執(zhí)行一次

? ? ? //發(fā)送數(shù)據(jù)到后臺(tái) 通過(guò)Ajax

? ? ? ? $.ajax({

? ? ? ? ? ? //設(shè)置的參數(shù)

? ? ? ? ? ? type: "post",

? ? ? ? ? ? url: "data.php",

? ? ? ? ? ? data:{"code":code,"phone":phone},

? ? ? ? ? ? success:function (msg) {

? ? ? ? ? ? ? ? alert(msg);

? ? ? ? ? ? }

? ? ? ? });}else{

? ? ? ? ? ? alert('請(qǐng)?zhí)顚?xiě)手機(jī)號(hào)碼');

? ? ? ? }

? ? });

? });

? ? </script>

</head>

<body>

<h1>PHP-短信驗(yàn)證碼</h1>

手機(jī)驗(yàn)證碼:<input type="text" name="phone" id="phone">

<input id="sub" type="button" value="發(fā)送驗(yàn)證碼" />

</body>

</html>

第三衣屏、調(diào)用短信服務(wù)器短信接口

?php

/**

* Created by PhpStorm.

* User: Leo

* Date: 2017/8/30

* Time: 14:59

*/

//$_post

$phone= isset($_POST['phone'])?$_POST['phone']:'';

$code = isset($_POST['code'])?$_POST['code']:'';

require (dirname(__FILE__).'/config.php');

require (dirname(__FILE__).'/SendSMS.php');

//實(shí)例化短信發(fā)送類

$sms= new? SendSMS($options['account'],$options['password']);

$context='驗(yàn)證碼'.$code;

$res=$sms->send($phone,$context);

if ($res){

? echo "成功";

}else{

? ? echo "失敗";

因?yàn)槲覀優(yōu)榱舜a的優(yōu)雅,把代碼分開(kāi)來(lái)寫(xiě). 方便以后重復(fù)使用.所以把發(fā)送短息具體封裝了一個(gè)類.具體看代碼:

<?php

/**

* Created by PhpStorm.

* User: Leo

* Date: 2017/8/30

* Time: 15:26

*/

/**

* 設(shè)置用戶信息

*/

class SendSMS{

const SENDURL='http://gd.ums86.com:8899/sms/Api/Send.do';

? ? private $_un;

? ? private $_pw;

? ? function __construct($user,$pwd){

? ? ? ? $this->_un=$user;

? ? ? ? $this->_pw=$pwd;

? ? }

? ? function send($phone,$content,$isreport=0){

? ? ? ? //發(fā)送數(shù)據(jù)

? ? ? ? $data=array(

? ? ? ? ? ? 'un'=>$this->_un,

? ? ? ? ? ? 'pw'=>$this->_pw,

? ? ? ? ? ? 'sm'=>$content,

? ? ? ? ? ? 'da'=>$phone,

? ? ? ? ? ? 'rd'=>$isreport,

? ? ? ? ? ? 'rf'=>2,

? ? ? ? ? ? 'tf'=>3,

? ? ? ? ? ? 'dc'=>15,

? ? ? ? );

? ? ? ? $url=SendSMS::SENDURL.'?'.http_build_query($data);

? ? ? ? $this->curlGet($url);

? ? }

? public function curlGet($url){

? ? $ch= curl_init();

? ? curl_setopt($ch,CURLOPT_HEADER,0);

? ? curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

? ? curl_setopt($ch,CURLOPT_URL,$url);

? ? $res=curl_exec($ch);

? ? curl_close($ch);

? ? return $res;

? ? }

}

在SendSMS里面的一些方法,你在第三方的短信驗(yàn)證碼服務(wù)商提供的實(shí)例代碼里面都可以看到,功能基本都是大同小異的,所以我們就實(shí)現(xiàn)一個(gè)屬于自己的發(fā)送消息類,比較簡(jiǎn)單.

深圳網(wǎng)站建設(shè)www.sz886.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躏升,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狼忱,更是在濱河造成了極大的恐慌膨疏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钻弄,死亡現(xiàn)場(chǎng)離奇詭異佃却,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)窘俺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)饲帅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事洒闸∪九鳎” “怎么了均芽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵丘逸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我掀宋,道長(zhǎng)深纲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任劲妙,我火速辦了婚禮湃鹊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镣奋。我一直安慰自己币呵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布侨颈。 她就那樣靜靜地躺著余赢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哈垢。 梳的紋絲不亂的頭發(fā)上妻柒,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音耘分,去河邊找鬼举塔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛求泰,可吹牛的內(nèi)容都是我干的央渣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渴频,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芽丹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枉氮,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤志衍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后聊替,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體楼肪,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年惹悄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了春叫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖暂殖,靈堂內(nèi)的尸體忽然破棺而出价匠,到底是詐尸還是另有隱情,我是刑警寧澤呛每,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布踩窖,位于F島的核電站,受9級(jí)特大地震影響晨横,放射性物質(zhì)發(fā)生泄漏洋腮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一手形、第九天 我趴在偏房一處隱蔽的房頂上張望啥供。 院中可真熱鬧,春花似錦库糠、人聲如沸伙狐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贷屎。三九已至,卻和暖如春黍判,著一層夾襖步出監(jiān)牢的瞬間豫尽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工顷帖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留美旧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓贬墩,卻偏偏與公主長(zhǎng)得像榴嗅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陶舞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355