返回

PHP实现短信验证的流程--华信短信平台

发布者: 发布时间:2018-01-29 点击次数:

PHP实现手机验证码验证的流程:


获取手机验证码事件:正则验证手机号,将手机号码和验证码作为参数异步访问手机验证码ajax页面

手机验证码ajax页面:验证验证码,生成手机验证码,生成流水号,引用接口页面发送验证码,如果成功则将验证码信息写入数据库

注册按钮事件:将手机号和手机验证码作为参数传入注册ajax页面

注册ajax页面:判断手机验证码是否正确,判断会员是否重复,将用户信息写入数据库

总之,验证完验证码就发送手机验证码,之后只验证手机验证码


华信PHP短信验证码接口示例文档可点击此处下载



[php] view plain 
  1. //手机验证码ajax页面  
  2. if($p['act']=="telcode"){  
  3.     //验证验证码  
  4.     $code = trim($p['code']);  
  5.     if($code!=$_SESSION["login_check_num"]){  
  6.         echo "codeHad";  
  7.     }else{  
  8.       
  9.         //手机号  
  10.         $tel = trim($p['tel']);  
  11.           
  12.         //生成手机验证码  
  13.         $code = "";  
  14.         for($i=0;$i<4;$i++){  
  15.             $code .= rand(0,9);  
  16.         }  
  17.           
  18.         //流水号  
  19.         list($usec$sec) = explode(" ", microtime());  
  20.         $time = (float)$usec + (float)$sec;  
  21.                    
  22.         //发送验证码  
  23.         $sendSms->SpCode = '';//企业编号  
  24.         $sendSms->LoginName = '';//用户名称  
  25.         $sendSms->Password = '';//用户密码  
  26.         $sendSms->MessageContent = '您的验证码为'.$code;//短信内容  
  27.         $sendSms->UserNumber = $tel;//手机号码  
  28.         $sendSms->SerialNumber = $time;//回执流水号,时间格式精确到毫秒  
  29.         $sendSms->ScheduleTime = '';//空为立即发送  
  30.         $sendSms->ExtendAccessNum = '';//检测方式参数  
  31.         $res = $sendSms->send();//send方法,返回布尔值  
  32.         //如果发送成功则写入数据库  
  33.         if($res){  
  34.             $sql = "INSERT INTO #__telcode  
  35.             SET tel = '$tel',  
  36.             code = '$code',  
  37.             time = '$time'";  
  38.             $db_my->query ($sql);  
  39.             echo 'success';  
  40.         }else{  
  41.             echo 'smsHad';  
  42.         }  
  43.                
  44.         return;  
  45.     }  
  46. }  


[php] view plain copy
  1. //注册ajax页面  
  2. if($p['act']=="reg_oa"){  
  3.         $username=trim($p['username']);  
  4.         $userpwd=trim($p['password']);  
  5.         $reg_rand = trim($p['reg_rand']);   
  6.         $group_id=trim($p['group_id']);   
  7.         $tel=trim($p['tel']); //手机号码  
  8.         $reg_tel = trim($p['reg_tel']);//获取手机验证码  
  9.         $uuid=str_replace('{','',guid());  
  10.         $uuid=str_replace('}','',$uuid);  
  11.         $uuid=str_replace('-','',$uuid);  
  12.                   
  13.         $memberoacunzai=$db_my->get_row("select * from  t_s_base_user WHERE username='".$username."'");  
  14.         //判断手机验证码是否正确  
  15.         $telcodecheck=$db_my->get_row("select * from #__telcode WHERE tel='".$tel."' order by id desc limit 1");  
  16.         $telcode = $telcodecheck->code;  
  17.           
  18.         if($reg_rand!=$_SESSION["login_check_num"]){  
  19.         echo "codeHad";  
  20.         }         
  21.         elseif ($telcode!=$reg_tel){  
  22.         echo "telcodeHad";  
  23.         }  
  24.         elseif (count($memberoacunzai) == 1){  
  25.         echo "nameHad";  
  26.         }  
  27.           
  28.         else{  
  29.           
  30.            $sql = "INSERT INTO t_s_base_user  
  31.                         SET ID = '$uuid',  
  32.                             username = '$username',  
  33.                             usertype  = '$group_id',  
  34.                             password = '".md5($userpwd)."'";  
  35.             $db_my->query ($sql);  
  36.           
  37.             $memberoa=$db_my->get_row("select * from  t_s_base_user WHERE username='".$username."'");  
  38.    
  39.             $sql = "SELECT * FROM pms_owner_info WHERE userid = '".$memberoa->ID."'";  
  40.             $memberoa_o = $db_my->get_row($sql);  
  41.   
  42.               //记录登录  
  43.           
  44.               ///登录的时候判断商城会员表是否有该会员记录,没有则写入一条记录  
  45.               $membercunzai=$db_my->get_row("select * from  #__member WHERE userid='".$memberoa->ID."'");  
  46.                              
  47.               if(count($membercunzai)==1)  
  48.               {  
  49.               $_SESSION['memberoa'] = $memberoa;  
  50.               $_SESSION['memberauth_id'] = $membercunzai->uid;  
  51.               $_SESSION['member'] = $membercunzai;  
  52.               }  
  53.               else{  
  54.               $sql = "INSERT INTO #__member  
  55.                       SET uid = NULL,  
  56.                           username = '$username',  
  57.                           group_id = '".$memberoa->usertype ."',  
  58.                           realname = '".$memberoa_o->cowername."',  
  59.                           password = '".md5($userpwd)."',  
  60.                           email = '$email',  
  61.                           tel = '".$tel ."',  
  62.                           userid = '".$memberoa->ID."',  
  63.                           reg_ip = '" . remote_addr() . "',  
  64.                           reg_time = UNIX_TIMESTAMP() ";  
  65.               $db_my->query ($sql);  
  66.                              
  67.              //注册会员,发放100积分。  
  68.             //更新会员帐号当前积分  
  69.              //reg_integral($username,100);  
  70.   
  71.                 
  72.                 
  73.               $_SESSION['memberoa'] = $memberoa;  
  74.               $membercunzai=$db_my->get_row("select * from  #__member WHERE userid='".$memberoa->ID."'");  
  75.               $_SESSION['memberauth_id'] = $membercunzai->uid;  
  76.               $_SESSION['member'] = $membercunzai;  
  77.                 
  78.               }    
  79.              echo "success";  
  80.         }  
  81.           
  82.         return;  
  83. }  

[javascript] view plain copy
  1. //timer处理方法  
  2. var InterValObj; //timer变量  
  3. var count = 10; //间隔时间  
  4. var curCount;//当前剩余秒数  
  5. function SetRemainTime() {  
  6.     if (curCount == 0) {                  
  7.         window.clearInterval(InterValObj);//停止计时器  
  8.         $("#telreg").removeAttr("disabled");//启用按钮  
  9.         $("#telreg").val("重新发送验证码");  
  10.     }  
  11.     else {  
  12.         curCount--;  
  13.         $("#telreg").val("请输入验证码" + curCount);  
  14.     }  
  15. }  
  16.   
  17.   
  18. //获取手机验证码事件  
  19. function gettelcode(){  
  20.            
  21.     //获取短信验证码按钮事件:验证验证码,验证手机号码,手机号作为参数访问接口页面,异步将手机号和验证码存入数据库中  
  22.     var $tel=$("#tel").val();  
  23.     var $code=$("#reg_rand").val();  
  24.       
  25.     //验证手机号码  
  26.     if ($.trim($tel)==''){  
  27.         showtip("请输入手机号!");  
  28.         $("#tel").focus();  
  29.         return false;  
  30.     }  
  31.     var TelFont= /^1[3|4|5|8][0-9]\d{4,8}$/;  
  32.     if($.trim($tel)!=''&&!TelFont.test($.trim($tel))){  
  33.         showtip("手机号码格式错误,请重新输入!");  
  34.         $("#tel").focus();  
  35.         return false;  
  36.     }  
  37.     
  38. //手机号码和验证码作为参数访问ajax页面  
  39.     $.ajax({  
  40.         type: "POST",  
  41.         url: ajaxurl+"ajax.php",  
  42.         data: "act=telcode&tel="+$tel+"&code="+$code,  
  43.         success: function(msg){  
  44.                 alert(msg);  
  45.                 if(msg.replace(/[\r\n]/g,'')=='codeHad')showtip('验证码错误!');  
  46.                 if(msg.replace(/[\r\n]/g,'')=='smsHad')showtip('验证码发送失败!');  
  47.                 if(msg.replace(/[\r\n]/g,'')=='success'){  
  48.                 showtip('验证码发送成功!');  
  49.                 //成功发送之后设置间隔  
  50.                 curCount = count;  
  51.                 $("#telreg").attr("disabled""true");  
  52.                 $("#telreg").val("请在" + curCount + "秒内输入验证码");  
  53.                 InterValObj = window.setInterval("SetRemainTime()", 1000); //启动计时器,1秒执行一次  
  54.                 }  
  55.             }  
  56.               
  57.     });        
  58.       
  59. }  
  60.   
  61.   
  62. //注册按钮事件  
  63. function checkreg_oa()   
  64. {    
  65.     var $username=$("#username").val();  
  66.     var $password =$("#password").val();  
  67.     var $password1 =$("#password1").val();  
  68.     var $reg_rand =$("#reg_rand").val();  
  69.     var $group_id =$("#group_id").val();  
  70.     var $url =$("#url").val();  
  71.     var $tel = $("#tel").val();//手机号码  
  72.     var $reg_tel = $("#reg_tel").val();//手机验证码  
  73.   
  74.         if ($.trim($username)==''){  
  75.         showtip("请输入您的注册账号!");  
  76.         $("#username").focus();  
  77.         return false;  
  78.         }  
  79.           
  80.         if(getByteLen($.trim($username))<4 || getByteLen($.trim($username))>20)  
  81.         {  
  82.         showtip("注册帐号格式错误!");  
  83.         $("#username").focus();  
  84.         return false;  
  85.         }  
  86.           
  87.         if ($.trim($password)==''){  
  88.         showtip("请输入密码!");  
  89.         $("#password").focus();  
  90.         return false;  
  91.         }  
  92.                   
  93.         if ($.trim($password1)==''){  
  94.         showtip("请确认密码!");  
  95.         $("#password1").focus();  
  96.         return false;  
  97.         }  
  98.           
  99.         if ($.trim($password1)!=$.trim($password)){  
  100.         showtip("两次输入的密码不一致,请重新输入!");  
  101.         $("#password1").focus();  
  102.         return false;  
  103.         }  
  104.           
  105.         if ($.trim($reg_rand)==''){  
  106.         showtip("请输入验证码!");  
  107.         $("#reg_rand").focus();  
  108.         return false;  
  109.         }  
  110.           
  111.         if ($.trim($tel)==''){  
  112.         showtip("请输入手机号!");  
  113.         $("#tel").focus();  
  114.         return false;  
  115.         }  
  116.           
  117.         if ($.trim($reg_tel)==''){  
  118.         showtip("请输入您手机上的验证码!");  
  119.         $("#reg_tel").focus();  
  120.         return false;  
  121.         }  
  122.           
  123.      //传入手机验证码reg_tel手机号tel  
  124.     $.ajax({  
  125.         type: "POST",  
  126.         url: ajaxurl+"ajax.php",  
  127.         data: "act=reg_oa&tel=" + $tel + "&username=" + $username + "&reg_tel=" + $reg_tel + "&group_id=" + $group_id + "&password=" + $password +"&reg_rand=" + $reg_rand +"&time="+new Date().toString(),  
  128.         success: function (msg) {  
  129.             alert(msg);  
  130.             if(msg.replace(/[\r\n]/g,'')=='telcodeHad')showtip('手机验证码错误!');  
  131.             if(msg.replace(/[\r\n]/g,'')=='nameHad')showtip('用户名已经存在!');  
  132.             if(msg.replace(/[\r\n]/g,'')=='success'){showtip('注册成功!');window.location.href=$url;}//  
  133.         }  
  134.     });  
  135. }  


[php] view plain
  1. //接口页面  
  2. <?php  
  3. /** 
  4.  * HTTPS接口发送短信,参数说明见文档,需要安装CURL扩展 
  5.  *  
  6.  * 使用示例: 
  7.  * $sendSms = new SendSmsHttp(); 
  8.  * $sendSms->SpCode = '123456'; 
  9.  * $sendSms->LoginName = 'abc123'; 
  10.  * $sendSms->Password = '123abc'; 
  11.  * $sendSms->MessageContent = '测试短信'; 
  12.  * $sendSms->UserNumber = '15012345678,13812345678'; 
  13.  * $sendSms->SerialNumber = ''; 
  14.  * $sendSms->ScheduleTime = ''; 
  15.  * $sendSms->ExtendAccessNum = ''; 
  16.  * $sendSms->f = ''; 
  17.  * $res = $sendSms->send(); 
  18.  * echo $res ? '发送成功' : $sendSms->errorMsg; 
  19.  *  
  20.  */  
  21. class SendSmsHttp {  
  22.     private $_apiUrl = 'http://114.113.154.5/sms.aspx?action=send&userid={$userid}&account={$account}&password={$password}&mobile={$mobile}&content={$content}&sendTime='; // 发送短信接口地址  
  23.     public $SpCode;  
  24.     public $LoginName;  
  25.     public $Password;  
  26.     public $MessageContent;  
  27.     public $UserNumber;  
  28.     public $SerialNumber;  
  29.     public $ScheduleTime;  
  30.     public $ExtendAccessNum;  
  31.     public $f;  
  32.     public $errorMsg;  
  33.       
  34.     /** 
  35.      * 发送短信 
  36.      * @return boolean 
  37.      */  
  38.     public function send() {  
  39.         $params = array(  
  40.                 "SpCode" => $this->SpCode,  
  41.                 "LoginName" => $this->LoginName,  
  42.                 "Password" => $this->Password,  
  43.                 "MessageContent" => iconv("UTF-8""GB2312//IGNORE"$this->MessageContent),  
  44.                 "UserNumber" => $this->UserNumber,  
  45.                 "SerialNumber" => $this->SerialNumber,  
  46.                 "ScheduleTime" => $this->ScheduleTime,  
  47.                 "ExtendAccessNum" => $this->ExtendAccessNum,  
  48.                 "f" => $this->f,  
  49.         );  
  50.         $data = http_build_query($params);  
  51.         $res = iconv('GB2312''UTF-8//IGNORE'$this->_httpClient($data));  
  52.         $resArr = array();  
  53.         parse_str($res$resArr);  
  54.       
  55.         if (!empty($resArr) && $resArr["result"] == 0) return true;  
  56.         else {  
  57.             if (empty($this->errorMsg)) $this->errorMsg = isset($resArr["description"]) ? $resArr["description"] : '未知错误';  
  58.             return false;  
  59.         }  
  60.     }  
  61.       
  62.       
  63.     /** 
  64.      * POST方式访问接口 
  65.      * @param string $data 
  66.      * @return mixed 
  67.      */  
  68.     private function _httpClient($data) {  
  69.         try {  
  70.             $ch = curl_init();  
  71.             curl_setopt($ch, CURLOPT_URL,$this->_apiUrl);  
  72.             curl_setopt($ch, CURLOPT_HEADER, 0);  
  73.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  74.             curl_setopt($ch, CURLOPT_POST, 1);  
  75.             curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
  76.             $res = curl_exec($ch);  
  77.             curl_close($ch);  
  78.             return $res;  
  79.         } catch (Exception $e) {  
  80.             $this->errorMsg = $e->getMessage();  
  81.             return false;  
  82.         }  
  83.     }        
  84. }  
  85. $sendSms = new SendSmsHttp;  
客服电话:400-8828-300
微信公众二维码