当前位置:首页 > 技术教程 > 脚本编程 > 正文内容

php原生代码实现短信验证码注册业务,流程详解附demo

atao4年前 (2020-10-04)脚本编程2594

业务流程:

  1. 用户在前端输入手机号后发送验证码请求,并发送到php处理页。

  2. php处理页收到手机号,生成验证码并调用短信平台。

  3. 短信平台采用API对接,并发送验证码

  4. 用户收到验证码,并提交注册

  5. php处理页收到验证码并校验验证码是否正确。

  6. 验证码正确,注册完成/否则注册失败

整体思路是比较简单的,而且比较适合入门不久的程序猿参考,看这不会像百度上其他的那些代码写的乱七八糟的。一共两个文件,一个html表单页面另一个是PHP的处理页面,纯学习项目 如果有线上需求请重新整理代码。下面开始上代码,一看就懂了。

注意:demo里没有加手机号的正则验证!!

image.png

根目录

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



扫描二维码推送至手机访问。

版权声明:本文由武景涛的博客发布,如需转载请注明出处。

本文链接:http://www.yizhanhongtu.cn/post/18.html

分享给朋友:

相关文章

PHP实现发送微信模板消息(公众号版),附类文件

PHP实现发送微信模板消息(公众号版),附类文件

以下为开发步骤:1.微信公众号为服务号且开通微信认证(其他类型账号不能发送)2.ip白名单设置你的服务器ip(用于获取access_token)3.网页授权你的域名(用于获取用户的openid)4.开...

免费接入微信登录接口获取openid(无须申请,直接调用)

免费接入微信登录接口获取openid(无须申请,直接调用)

简介免费接入微信登录接口获取openid(无须申请,直接调用,适合web、pc、手机端,全平台兼容)无缝衔接微信获取openid、微信头像地址、微信昵称信息拿到openid之后,就可以自行操作更多身份...

php导出excel中数字会自动转换为科学计数法解决办法

php导出excel中数字会自动转换为科学计数法解决办法

原因:凡数字超过11位数,Excel 表格就会用科学记数法显示。如果要输入超过11位的数,得把单元格设为文本形式或在输入数字前先输入一个英文单引号(')或者加入制表符。数据导出不转换科学计数法...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。