2019-08-27

PHP之短信验证码功能

现在网站在建设网站时为了保证用户信息的真实性,往往会选择发短信给用户手机发验证码信息,只有通过验证的用户才可以注册,这样既保证了用户的联系信息资料的100%的准确性,也为用户提供了一种最方便快捷的注册方式 。

那么我们今天就来说一下 短信发送原理, 如下图

PHP之短信验证码功能

工作开发流程:

 第一、实现php手机短信验证功能的基本思路

  1、要找到短信服务提供商,接入短信服务

  2、在网站信息提交页面请求发送信息

  3、服务器向短信服务提供商通信,提交发送请求

4、短信服务提供商通过运营商将信息发送到用户的手机中

第二 :手机号码短信验证前台页面效果实现

<!DOCTYPE html>

<html lang="en">

<head>

    <title>郑州传智播客</title>

    <meta charset="UTF-8">

    <meta name="Author" content="PHP就业老师"/>

<style type="text/css">

    *{margin:0;padding:0;}

</style>

    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>

    <script type="text/javascript">

        var InterValObj; //timer变量,控制时间

        var count = 60; //间隔函数,1秒执行

        var curCount;//当前剩余秒数

        function codeRandom(chars) {

            var res="";

            for(var i=0;i<chars;i++){

                res += Math.floor(Math.random()*10);

            }

          return res;

        }

        //timer处理函数

        function SetRemainTime() {

            if (curCount == 0) {

                window.clearInterval(InterValObj);//停止计时器

                $("#sub").removeAttr("disabled");//启用按钮

                $("#sub").val("重新发送验证码");

                code = ""; //清除验证码。如果不清除,过时间后,输入收到的验证码依然有效

            }

            else {

                curCount--;

                $("#sub").val("请在" + curCount + "秒内输入验证码");

            }

        }

        //获取手机号码

  $(function () {

    $("#sub").click(function () {

        var phone=$("#phone").val(); //获取手机号码

        curCount = count;

        if(phone!=''){

            //验证手机有效性

            var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;

            if(!myreg.test($('#phone').val()))

            {

                alert('请输入有效的手机号码!');

                return false;

            }

            phone = $('#phone').val();

        //验证码(随机生成)

        var code= codeRandom(4);

            //设置button效果,开始计时

            $("#sub").attr("disabled", "true");

            $("#sub").val("请在" + curCount + "秒内输入验证码");

            InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次

      //发送数据到后台 通过Ajax

        $.ajax({

            //设置的参数

            type: "post",

            url: "data.php",

            data:{"code":code,"phone":phone},

            success:function (msg) {

                alert(msg);

            }

        });}else{

            alert('请填写手机号码');

        }

    });

  });

    </script>

</head>

<body>

<h1>PHP-短信验证码</h1>

手机验证码:<input type="text" name="phone" id="phone">

<input id="sub" type="button" value="发送验证码" />

</body>

</html>

第三、调用短信服务器短信接口

?php

/**

* Created by PhpStorm.

* User: Leo

* Date: 2017/8/30

* Time: 14:59

*/

//$_post

$phone= isset($_POST['phone'])?$_POST['phone']:'';

$code = isset($_POST['code'])?$_POST['code']:'';

require (dirname(__FILE__).'/config.php');

require (dirname(__FILE__).'/SendSMS.php');

//实例化短信发送类

$sms= new  SendSMS($options['account'],$options['password']);

$context='验证码'.$code;

$res=$sms->send($phone,$context);

if ($res){

  echo "成功";

}else{

    echo "失败";

因为我们为了代码的优雅,把代码分开来写. 方便以后重复使用.所以把发送短息具体封装了一个类.具体看代码:

<?php

/**

* Created by PhpStorm.

* User: Leo

* Date: 2017/8/30

* Time: 15:26

*/

/**

* 设置用户信息

*/

class SendSMS{

const SENDURL='http://gd.ums86.com:8899/sms/Api/Send.do';

    private $_un;

    private $_pw;

    function __construct($user,$pwd){

        $this->_un=$user;

        $this->_pw=$pwd;

    }

    function send($phone,$content,$isreport=0){

        //发送数据

        $data=array(

            'un'=>$this->_un,

            'pw'=>$this->_pw,

            'sm'=>$content,

            'da'=>$phone,

            'rd'=>$isreport,

            'rf'=>2,

            'tf'=>3,

            'dc'=>15,

        );

        $url=SendSMS::SENDURL.'?'.http_build_query($data);

        $this->curlGet($url);

    }

  public function curlGet($url){

    $ch= curl_init();

    curl_setopt($ch,CURLOPT_HEADER,0);

    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

    curl_setopt($ch,CURLOPT_URL,$url);

    $res=curl_exec($ch);

    curl_close($ch);

    return $res;

    }

}

在SendSMS里面的一些方法,你在第三方的短信验证码服务商提供的实例代码里面都可以看到,功能基本都是大同小异的,所以我们就实现一个属于自己的发送消息类,比较简单.

深圳网站建设www.sz886.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容