1. 程式人生 > >PHP 短信驗證碼功能

PHP 短信驗證碼功能

短信發送 lse gin return name 當前 phpstorm ++ 數據

技術分享圖片

現在網站在建設網站時為了保證用戶信息的真實性,往往會選擇發短信給用戶手機發驗證碼信息,只有通過驗證的用戶才可以註冊,這樣既保證了用戶的聯系信息資料的100%的準確性,也為用戶提供了一種最方便快捷的註冊方式 。

那麽我們今天就來說一下 短信發送原理, 如下圖

技術分享圖片

工作開發流程:
 第一、實現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裏面的一些方法,你在第三方的短信驗證碼服務商提供的實例代碼裏面都可以看到,功能基本都是大同小異的,所以我們就實現一個屬於自己的發送消息類,比較簡單.

最後,我們就實現了一個屬於自己的短信驗證碼發送功能
技術分享圖片
那麽最後,你學會了嗎?

PHP 短信驗證碼功能