php手机注册用户短信发送验证码,以及点击发送验证码的倒计时效果。

php手机注册发送短信,我们用的是阿里的短信服务,首先你要有阿里的账号,并开通了短信服务。可以单条计费也可以买套餐。

首先html部分我用的是bootstrap布的页面:

<html lang="en">
<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">
    <title>Document</title>
    <!-- Latest compiled and minified CSS & JS -->
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    <link rel="stylesheet" media="screen" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>

<div class="container">
    <br>
    <br>
    <br>
    <br>
    <form class="form-horizontal" role="form" >
        <div class="form-group" style="text-align: center">
            <label for="inputEmail3" class="col-sm-4 control-label">手机号</label>
            <div class="col-sm-8">
                <div style="float: left;">
                    <input id="phonum" name="phonum" type="text" class="form-control phonum" style="width: 300px;">
                </div>
                <div style="float: left;">

                    <!--<input class="btn btn-info" type="button" id="getcode" onclick="send(this)" value="点击获取手机验证码" />-->
                   <button class="btn btn-info" type="button" id="getcode" onclick="send(this)"> 获取验证码</button>

                    <span id="telephonenameTip"></span>
                </div>
            </div>
        </div>

        <div class="form-group">
            <label class="col-sm-4 control-label">验证码</label>
            <div class="col-sm-8">
                <input style="width: 300px;" class="form-control" id="codename">
                <span id="codenameTip"></span>
            </div>
        </div>

        <div class="form-group">
            <label for="inputPassword3" class="col-sm-4 control-label">密码</label>
            <div class="col-sm-8">
                <input type="password" style="width: 300px;" class="form-control" id="" placeholder="Password">
            </div>
        </div>

        <div class="form-group">
            <div class="col-sm-offset-5 col-sm-6">
                <button type="button" id="submit" class="btn btn-primary">立即注册</button>
            </div>
        </div>
    </form>
</div>
</body>
</html>

然后是js部分:放到<body>下面,主要是点击发送短信按钮的异步方法以及短信倒计时效果:

<script>
    time =3;  //短信倒计时时间
    function send(obj) {
        var timer =  setInterval(function () {
            time--;
            $(obj).text(time+'之后重发');
            $(obj).removeClass('btn-info');
            $(obj).addClass('btn-success')
            $(obj).prop('disabled', true);

            if(time==0){

                //清除定时器
                clearInterval(timer)
                $(obj).removeClass('btn-success');
                $(obj).addClass('btn-info');
                $(obj).prop('disabled', false);

                $(obj).text('获取验证码');
                time=3;

            }
        },1000);
        //获取手机号
        var phonum = $('#phonum').val();
            $.post('?a=sendSms',{phonum:phonum},function () {
            },'json')
    }
</script>

然后就是处理短信发送的api接口php代码,看清,要填的只有一部分,下面的几乎不用填写:

public function sendSms(){

        $phone = $_POST['phonum'];

        $params = array ();

        // *** 需用户填写部分 ***

        // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
        $accessKeyId = "";
        $accessKeySecret = "";

        // fixme 必填: 短信接收号码
        $params["PhoneNumbers"] = $phone;

        // fixme 必填: 短信签名,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
        $params["SignName"] = "琥珀";

        // fixme 必填: 短信模板Code,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
        $params["TemplateCode"] = "SMS_137135108";

        // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
        $code = $this->Getcode();
        //  echo $code;die();  //测试输出随机验证码。
        $params['TemplateParam'] = Array (
            "code" => $code,
        );

        // fixme 可选: 设置发送短信流水号
        // $params['OutId'] = "12345";   //这里我没用就把它注释掉了

        // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段
        // $params['SmsUpExtendCode'] = "1234567"; //这里我没用就把它注释掉了

        
        // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
        if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
            $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
        }

        // 初始化SignatureHelper实例用于设置参数,签名以及发送请求
        $helper = new SignatureHelper();

        // 此处可能会抛出异常,注意catch
        $content = $helper->request(
            $accessKeyId,
            $accessKeySecret,
            "dysmsapi.aliyuncs.com",
            array_merge($params, array(
                "RegionId" => "cn-hangzhou",
                "Action" => "SendSms",
                "Version" => "2017-05-25",
            ))
        // fixme 选填: 启用https
        // ,true
        );
        //echo '<pre>';     //测试
        //print_r($content);


        return $content;


    }

    /**
     * @param int $len
     * @return string
     * 随机生成验证码
     */
    private function Getcode($len=6){
        return str_pad(mt_rand(1,pow(10,$len)-1),$len,STR_PAD_LEFT);
    }

然后咱们再了解一下生成随机码的函数

str_pad(mt_rand(1,pow(10,$len)-1),$len,STR_PAD_LEFT)

这个函数用法:

把字符串填充为新的长度:mt_rand(1,pow(10,$len)-1): 如果随机到1000000会多出一位,我们-1让它变成999999

$len:要生成的长度,如果大于左侧的数,会自动补全。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aldsong123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值