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; //验证码失效了
}
}
