thinkphp6+layui手机号发送验证码示例

前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link rel="stylesheet" href="__ADMIN__/res/layui/css/layui.css" media="all">
  <link rel="stylesheet" href="__ADMIN__/res/layui/css/public.css" media="all">
    <style>
        body{
            background-color: #FFFFFF;
        }
    </style>
</head>
<body>
<form class="layui-form">
    <div class="layui-form-item">
        <label class="layui-form-label">手机号</label>
        <div class="layui-input-inline">
            <input type="text" name="phone" id="phone" value="15225162266" class="layui-input">
        </div>
        <div class="layui-word-aux" style="padding-top: 4px;">
            <button type="button" class="layui-btn layui-btn-sm" id="countdown-btn">获取验证码</button>
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">验证码</label>
        <div class="layui-input-inline">
            <input type="text" name="verifyCode" id="verifyCode" placeholder="请输入验证码" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit lay-filter="mybtn">提交</button>
        </div>
    </div>
</form>
<script src="__ADMIN__/res/layui/layui.js"></script>
<script>
  layui.config({
    base: '__ADMIN__/res/' //静态资源所在路径
  }).use(['index', 'form', 'layer'], function() {
    let $ = layui.jquery,
        form = layui.form,
        layer = layui.layer;
    form.on('submit(mybtn)',function (data){
        let dataJson=data.field;
        if(dataJson.phone==''){
            layer.msg('手机号不能为空');
            return false;
        }
        if(dataJson.verifyCode==''){
            layer.msg('验证码不能为空');
            return false;
        }
        console.log(dataJson);
        $.ajax({
            url:'{:url("/index/sms/verify/")}',
            type:'POST',
            data:dataJson,
            dataType:'json',
            success:(res)=>{
                if(res.code!=0){
                    layer.msg(res.msg);
                }
            }
        });
        return false;
    });

      $("#countdown-btn").click(function() {
          let phone=$('#phone').val();
          if(phone!=''){
              let regex = /^1[3456789]\d{9}$/; // 手机号正则表达式
              if (!regex.test(phone)) { // 验证手机号
                  layer.msg("请输入正确的手机号!");
                  return false;
              }
          }
          else{
              layer.msg("请输入手机号!");
              return false;
          }
          let count=10; // 设置倒计时时间
          let countdown=setInterval(function(){
              $("#countdown-btn").prop("disabled", true); // 禁用按钮
              $("#countdown-btn").text("重新发送("+ count +"s)"); // 更新按钮文本
              count--; // 计数器减1
              if (count === 0) { // 倒计时结束
                  clearInterval(countdown); // 清除计时器
                  $("#countdown-btn").prop("disabled", false); // 启用按钮
                  $("#countdown-btn").text("获取验证码"); // 还原按钮文本
              }
          }, 1000); // 每秒更新一次
          $.ajax({
              url:'{:url("/index/sms/index/")}',
              type:'GET',
              data:{"phone":phone},
              dataType:'json',
              success:(res)=>{
                  layer.msg(res.msg);
              }
          });
      });
  });
</script>
</body>
</html>

后端:

<?php

namespace app\index\controller;

use app\index\validate\User;

class Sms
{
    public function index(){
        $phone=input('get.phone');
        // 实例化验证器并执行验证
        $data = [
            'mobile' => $phone
        ];

        $validate = new User(); //创建User验证器
        if (!$validate->check($data)) {
            return json(['code' => 0, 'msg' => $validate->getError()]);
        }
        else{
            $res=$this->sendCode($phone);
            $result=json_decode($res, true);
            if($result['msg']=='ok'){
                return json(['code'=>0,'msg'=>'发送成功']);
            }
            else{
                return json(['code'=>1,'msg'=>'发送失败']);
            }
        }
    }

    //采用第三方的短信接口;
    public function sendCode($phone){
        $randStr = str_shuffle('1234567890');
        $rand = substr($randStr,0,6);
        session('smscode',$rand);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://sms-api.luosimao.com/v1/send.json");

        curl_setopt($ch, CURLOPT_HTTP_VERSION  , CURL_HTTP_VERSION_1_0 );
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);

        curl_setopt($ch, CURLOPT_HTTPAUTH , CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD  , 'api:key-输入key值');

        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array('mobile' => $phone,'message' => '您的验证码是:'.$rand.',请您及时验证!【E車惠】'));

        $res = curl_exec( $ch );
        curl_close( $ch );
        //$res  = curl_error( $ch );
        return $res;
    }

    public function demo(){
        return view('/sms/index');
    }

    public function verify(){
        $code=input('post.verifyCode');

        if(!empty($code)){
            if(session('smscode')!=$code){
                return json(['code'=>1,'msg'=>'验证码有误']);
            }
            else{
                return json(['code'=>0,'msg'=>'验证码正确']);
            }
        }
        else{
            return json(['code'=>2,'msg'=>'验证码不能为空']);
        }
    }
}

User验证器:

<?php
declare (strict_types = 1);

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'mobile'=>'must|mobile'
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'mobile.must' => '手机号不能为空',
        'mobile.mobile'  => '手机号格式不正确'
    ];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值