php原生代码实现短信验证码注册业务,流程详解附demo
业务流程:
用户在前端输入手机号后发送验证码请求,并发送到php处理页。
php处理页收到手机号,生成验证码并调用短信平台。
短信平台采用API对接,并发送验证码
用户收到验证码,并提交注册
php处理页收到验证码并校验验证码是否正确。
验证码正确,注册完成/否则注册失败
整体思路是比较简单的,而且比较适合入门不久的程序猿参考,看这不会像百度上其他的那些代码写的乱七八糟的。一共两个文件,一个html表单页面另一个是PHP的处理页面,纯学习项目 如果有线上需求请重新整理代码。下面开始上代码,一看就懂了。
注意:demo里没有加手机号的正则验证!!
根目录
-user
-reg.html
-include
-active.php
reg.html页面(需要引入jq库)
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script type="text/javascript" src="js/jquery.min.js"></script> <title>Document</title> </head> <body> 手机号:<input type="text" name="tel" id="tel"><button type="button" id="HQ">获取验证码</button><br> 验证码:<input type="text" name="code" id="code"><br> <button ID="TiJiao">提交注册</button> <script> $("#HQ").click(function () { var tel = $("#tel").val(); $.post("../include/active.php",{act:'UserLoginCode',tel:tel},function (data) { }) }); $("#TiJiao").click(function () { var tel = $("#tel").val(); var code = $("#code").val(); if(tel=='' || code==''){ alert("手机号和验证码不能为空!"); }else{ $.post("../include/active.php",{act:'UserLogin',tel:tel,code:code},function (data) { if(data==1){ alert("验证成功"); }else if(data==2){ alert("验证码错误"); }else if(data==3){ alert("验证码已失效"); }else{ alert("网络波动"); } }) } }) </script> </body> </html>
active.php页面,短信验证码基于阿里云平台API,点击这里跳转
<?php session_start(); $act = isset($_POST['act'])?$_POST['act']:''; if($act=='UserLoginCode'){ $tel = isset($_POST['tel'])?$_POST['tel']:''; //接收到reg页传来的手机号 $code = mt_rand(000000,999999); //生成一个6位的验证码 $_SESSION['code'] = $code; //把验证码存进session中 $_SESSION['time'] = time()+180; //验证码有效期为3分钟 //短信验证码开始,以下代码为官方demo,来自阿里云 $host = "https://smssend.shumaidata.com"; $path = "/sms/send"; $method = "POST"; $appcode = "阿里云的appcode码"; $headers = array(); array_push($headers, "Authorization:APPCODE " . $appcode); $querys = "receive={$tel}&tag={$code}&templateId=M09DD535F4"; $bodys = ""; $url = $host . $path . "?" . $querys; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //设定返回信息中是否包含响应信息头,启用时会将头文件的信息作为数据流输出,true 表示输出信息头, false表示不输出信息头 //如果需要将字符串转成json,请将 CURLOPT_HEADER 设置成 false curl_setopt($curl, CURLOPT_HEADER, true); if (1 == strpos("$".$host, "https://")) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } } if($act=='UserLogin'){ if($_SESSION['time'] >= time()){ //判断验证码的时间是都大于当前时间 $code = isset($_POST['code'])?$_POST['code']:''; //接到reg页面传来的验证码 if($code == $_SESSION['code']){ //验证码进行比对 echo 1; //验证成功 }else{ echo 2; //验证码错误 } }else{ //验证码的时间大于当前时间,代表失效了 unset($_SESSION['code']); echo 3; //验证码失效了 } }