thinkphp6 发送短信验证码

1.场景:通常在使用手机号注册时需要发送短信验证码,在修改密码等敏感操作时也需要验证手机号发送短信验证码。

短信验证码的目的:验证用户的身份是否本人

在项目代码中发送短信,通常要调用第三方短信商的短信发送接口。

提供短信接口的平台:百度Apistore数据平台、聚合数据平台、京东万象、短信宝等等

一般情况下,短信接口需要企业认证用户才能申请、一般都是收费的。

以短信宝为例:个人可以购买使用

javascript:

	//验证手机号
	$('#dyMobileButton').click(function(){
		var mobile = $('#phone').val();
		var preg = /^1[3589]\d{9}$/;
		if (mobile == '' || !preg.test(mobile)){
			$('.error:eq(0)').html('手机格式不正确');
		}else{
			$('.error:eq(0)').empty();
		}
		//倒计时
		var that = $(this);
		that.attr('disabled',true);//点击过后不能再次点击
		//60s之后才能再次发送
		var second = 60;
		var timer = setInterval(function () {
			second --
			if (second > 0){
				that.text(second + 's后再次发送')
			}else{
				that.text('发送验证码')
				that.attr('disabled',false);//打开点击功能
				clearInterval(timer);//清空定时器
			}
		},1000);
		 //发送验证码
		 $.ajax({
		 	url:'sendCode',
		 	dataType:'json',
		 	data:{mobile:mobile},
			success:function (res) {
		 		alert(res.msg);
		 		return ;
		 	}
		 })
	});

 控制器:

//验证码
    public function sendCode($mobile){
        $return = [
            'code' => 200,
            'msg' => 'ok',
            'data' => []
        ];
        $data = SendCode::sendCode($mobile);
        $return['data'] = $data;
        return json($return);
    }

 封装业务层:

开发文档接口说明_马上使用更好的短信服务-短信宝官网

 //验证码
    public static function sendCode($mobile){
        $statusStr = array(
            "0" => "短信发送成功",
            "-1" => "参数不全",
            "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
            "30" => "密码错误",
            "40" => "账号不存在",
            "41" => "余额不足",
            "42" => "帐户已过期",
            "43" => "IP地址限制",
            "50" => "内容含有敏感词"
        );
        //生成随机数
        $code = rand(1000,9999);
        //缓存
        Cache::set("code",$code,300);
        $smsapi = "http://api.smsbao.com/";
        $user = "***"; //短信平台帐号
        $pass = md5("****"); //短信平台密码
        $content="短信内容";//要发送的短信内容
        $phone = "*****";//要发送短信的手机号码
        $sendurl = $smsapi . "sms?u=" . $user . "&p=" . $pass . "&m=" . $phone . "&c=" . urlencode($content);
        $result = file_get_contents($sendurl);
        return $statusStr[$result];

    }

 后端验证防止重复发送

PHP限制发送验证码条数(防止重复发送)_code_nutter的博客-CSDN博客

//获取第一次发送的信息
        $send_time = cache('time_key');
        //判断是否发送过
        if ($send_time && time() - $send_time < 60){
            throw new Exception('请求的次数过多');
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值