PHP實現簡訊驗證碼
阿新 • • 發佈:2019-02-17
手機驗證碼流程:
獲取手機驗證碼事件:正則驗證手機號,將手機號碼和驗證碼作為引數非同步訪問手機驗證碼ajax頁面
手機驗證碼ajax頁面:驗證驗證碼,生成手機驗證碼,生成流水號,引用介面頁面傳送驗證碼,如果成功則將驗證碼資訊寫入資料庫
註冊按鈕事件:將手機號和手機驗證碼作為引數傳入註冊ajax頁面
註冊ajax頁面:判斷手機驗證碼是否正確,判斷會員是否重複,將使用者資訊寫入資料庫
總之,驗證完驗證碼就傳送手機驗證碼,之後只驗證手機驗證碼
//手機驗證碼ajax頁面 if($p['act']=="telcode"){ //驗證驗證碼 $code = trim($p['code']); if($code!=$_SESSION["login_check_num"]){ echo "codeHad"; }else{ //手機號 $tel = trim($p['tel']); //生成手機驗證碼 $code = ""; for($i=0;$i<4;$i++){ $code .= rand(0,9); } //流水號 list($usec, $sec) = explode(" ", microtime()); $time = (float)$usec + (float)$sec; //傳送驗證碼 $sendSms->SpCode = '';//企業編號 $sendSms->LoginName = '';//使用者名稱稱 $sendSms->Password = '';//使用者密碼 $sendSms->MessageContent = '您的驗證碼為'.$code;//簡訊內容 $sendSms->UserNumber = $tel;//手機號碼 $sendSms->SerialNumber = $time;//回執流水號,時間格式精確到毫秒 $sendSms->ScheduleTime = '';//空為立即傳送 $sendSms->ExtendAccessNum = '';//檢測方式引數 $res = $sendSms->send();//send方法,返回布林值 //如果傳送成功則寫入資料庫 if($res){ $sql = "INSERT INTO #__telcode SET tel = '$tel', code = '$code', time = '$time'"; $db_my->query ($sql); echo 'success'; }else{ echo 'smsHad'; } return; } }
//註冊ajax頁面 if($p['act']=="reg_oa"){ $username=trim($p['username']); $userpwd=trim($p['password']); $reg_rand = trim($p['reg_rand']); $group_id=trim($p['group_id']); $tel=trim($p['tel']); //手機號碼 $reg_tel = trim($p['reg_tel']);//獲取手機驗證碼 $uuid=str_replace('{','',guid()); $uuid=str_replace('}','',$uuid); $uuid=str_replace('-','',$uuid); $memberoacunzai=$db_my->get_row("select * from t_s_base_user WHERE username='".$username."'"); //判斷手機驗證碼是否正確 $telcodecheck=$db_my->get_row("select * from #__telcode WHERE tel='".$tel."' order by id desc limit 1"); $telcode = $telcodecheck->code; if($reg_rand!=$_SESSION["login_check_num"]){ echo "codeHad"; } elseif ($telcode!=$reg_tel){ echo "telcodeHad"; } elseif (count($memberoacunzai) == 1){ echo "nameHad"; } else{ $sql = "INSERT INTO t_s_base_user SET ID = '$uuid', username = '$username', usertype = '$group_id', password = '".md5($userpwd)."'"; $db_my->query ($sql); $memberoa=$db_my->get_row("select * from t_s_base_user WHERE username='".$username."'"); $sql = "SELECT * FROM pms_owner_info WHERE userid = '".$memberoa->ID."'"; $memberoa_o = $db_my->get_row($sql); //記錄登入 ///登入的時候判斷商城會員表是否有該會員記錄,沒有則寫入一條記錄 $membercunzai=$db_my->get_row("select * from #__member WHERE userid='".$memberoa->ID."'"); if(count($membercunzai)==1) { $_SESSION['memberoa'] = $memberoa; $_SESSION['memberauth_id'] = $membercunzai->uid; $_SESSION['member'] = $membercunzai; } else{ $sql = "INSERT INTO #__member SET uid = NULL, username = '$username', group_id = '".$memberoa->usertype ."', realname = '".$memberoa_o->cowername."', password = '".md5($userpwd)."', email = '$email', tel = '".$tel ."', userid = '".$memberoa->ID."', reg_ip = '" . remote_addr() . "', reg_time = UNIX_TIMESTAMP() "; $db_my->query ($sql); //註冊會員,發放100積分。 //更新會員帳號當前積分 //reg_integral($username,100); $_SESSION['memberoa'] = $memberoa; $membercunzai=$db_my->get_row("select * from #__member WHERE userid='".$memberoa->ID."'"); $_SESSION['memberauth_id'] = $membercunzai->uid; $_SESSION['member'] = $membercunzai; } echo "success"; } return; }
//timer處理方法 var InterValObj; //timer變數 var count = 10; //間隔時間 var curCount;//當前剩餘秒數 function SetRemainTime() { if (curCount == 0) { window.clearInterval(InterValObj);//停止計時器 $("#telreg").removeAttr("disabled");//啟用按鈕 $("#telreg").val("重新發送驗證碼"); } else { curCount--; $("#telreg").val("請輸入驗證碼" + curCount); } } //獲取手機驗證碼事件 function gettelcode(){ //獲取簡訊驗證碼按鈕事件:驗證驗證碼,驗證手機號碼,手機號作為引數訪問介面頁面,非同步將手機號和驗證碼存入資料庫中 var $tel=$("#tel").val(); var $code=$("#reg_rand").val(); //驗證手機號碼 if ($.trim($tel)==''){ showtip("請輸入手機號!"); $("#tel").focus(); return false; } var TelFont= /^1[3|4|5|8][0-9]\d{4,8}$/; if($.trim($tel)!=''&&!TelFont.test($.trim($tel))){ showtip("手機號碼格式錯誤,請重新輸入!"); $("#tel").focus(); return false; } //手機號碼和驗證碼作為引數訪問ajax頁面 $.ajax({ type: "POST", url: ajaxurl+"ajax.php", data: "act=telcode&tel="+$tel+"&code="+$code, success: function(msg){ alert(msg); if(msg.replace(/[\r\n]/g,'')=='codeHad')showtip('驗證碼錯誤!'); if(msg.replace(/[\r\n]/g,'')=='smsHad')showtip('驗證碼傳送失敗!'); if(msg.replace(/[\r\n]/g,'')=='success'){ showtip('驗證碼傳送成功!'); //成功傳送之後設定間隔 curCount = count; $("#telreg").attr("disabled", "true"); $("#telreg").val("請在" + curCount + "秒內輸入驗證碼"); InterValObj = window.setInterval("SetRemainTime()", 1000); //啟動計時器,1秒執行一次 } } }); } //註冊按鈕事件 function checkreg_oa() { var $username=$("#username").val(); var $password =$("#password").val(); var $password1 =$("#password1").val(); var $reg_rand =$("#reg_rand").val(); var $group_id =$("#group_id").val(); var $url =$("#url").val(); var $tel = $("#tel").val();//手機號碼 var $reg_tel = $("#reg_tel").val();//手機驗證碼 if ($.trim($username)==''){ showtip("請輸入您的註冊賬號!"); $("#username").focus(); return false; } if(getByteLen($.trim($username))<4 || getByteLen($.trim($username))>20) { showtip("註冊帳號格式錯誤!"); $("#username").focus(); return false; } if ($.trim($password)==''){ showtip("請輸入密碼!"); $("#password").focus(); return false; } if ($.trim($password1)==''){ showtip("請確認密碼!"); $("#password1").focus(); return false; } if ($.trim($password1)!=$.trim($password)){ showtip("兩次輸入的密碼不一致,請重新輸入!"); $("#password1").focus(); return false; } if ($.trim($reg_rand)==''){ showtip("請輸入驗證碼!"); $("#reg_rand").focus(); return false; } if ($.trim($tel)==''){ showtip("請輸入手機號!"); $("#tel").focus(); return false; } if ($.trim($reg_tel)==''){ showtip("請輸入您手機上的驗證碼!"); $("#reg_tel").focus(); return false; } //傳入手機驗證碼reg_tel手機號tel $.ajax({ type: "POST", url: ajaxurl+"ajax.php", data: "act=reg_oa&tel=" + $tel + "&username=" + $username + "®_tel=" + $reg_tel + "&group_id=" + $group_id + "&password=" + $password +"®_rand=" + $reg_rand +"&time="+new Date().toString(), success: function (msg) { alert(msg); if(msg.replace(/[\r\n]/g,'')=='telcodeHad')showtip('手機驗證碼錯誤!'); if(msg.replace(/[\r\n]/g,'')=='nameHad')showtip('使用者名稱已經存在!'); if(msg.replace(/[\r\n]/g,'')=='success'){showtip('註冊成功!');window.location.href=$url;}// } }); }
//介面頁面
<?php
/**
* HTTP介面傳送簡訊,引數說明見文件,需要安裝CURL擴充套件
*
* 使用示例:
* $sendSms = new SendSmsHttp();
* $sendSms->SpCode = '123456';
* $sendSms->LoginName = 'abc123';
* $sendSms->Password = '123abc';
* $sendSms->MessageContent = '測試簡訊';
* $sendSms->UserNumber = '15012345678,13812345678';
* $sendSms->SerialNumber = '';
* $sendSms->ScheduleTime = '';
* $sendSms->ExtendAccessNum = '';
* $sendSms->f = '';
* $res = $sendSms->send();
* echo $res ? '傳送成功' : $sendSms->errorMsg;
*
*/
class SendSmsHttp {
private $_apiUrl = 'http://gd.ums86.com:8899/sms/Api/Send.do'; // 傳送簡訊介面地址
public $SpCode;
public $LoginName;
public $Password;
public $MessageContent;
public $UserNumber;
public $SerialNumber;
public $ScheduleTime;
public $ExtendAccessNum;
public $f;
public $errorMsg;
/**
* 傳送簡訊
* @return boolean
*/
public function send() {
$params = array(
"SpCode" => $this->SpCode,
"LoginName" => $this->LoginName,
"Password" => $this->Password,
"MessageContent" => iconv("UTF-8", "GB2312//IGNORE", $this->MessageContent),
"UserNumber" => $this->UserNumber,
"SerialNumber" => $this->SerialNumber,
"ScheduleTime" => $this->ScheduleTime,
"ExtendAccessNum" => $this->ExtendAccessNum,
"f" => $this->f,
);
$data = http_build_query($params);
$res = iconv('GB2312', 'UTF-8//IGNORE', $this->_httpClient($data));
$resArr = array();
parse_str($res, $resArr);
if (!empty($resArr) && $resArr["result"] == 0) return true;
else {
if (empty($this->errorMsg)) $this->errorMsg = isset($resArr["description"]) ? $resArr["description"] : '未知錯誤';
return false;
}
}
/**
* POST方式訪問介面
* @param string $data
* @return mixed
*/
private function _httpClient($data) {
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$this->_apiUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$res = curl_exec($ch);
curl_close($ch);
return $res;
} catch (Exception $e) {
$this->errorMsg = $e->getMessage();
return false;
}
}
}
$sendSms = new SendSmsHttp;