<?php
//发送手机验证码
function smsCode()
{
//dump($this->request->post());
//请求方式验证
/*if (!$this->request->isAjax()) {
$this->error('请求异常');
}*/
$mobile = $this->request->post('data.mobile');
//dump($mobile);die;
$pattern = "/^1[3456789]{1}\d{9}$/";
//手机号不能为空
if (empty($mobile) || !preg_match($pattern, $mobile)) {
$this->error('请输入正确的手机号');
}
$lastSendtime = Db::name('mscode')->where('mobile', $mobile)->order('id desc')->value('sendtime');
//1分钟只能发一次
if ($lastSendtime && time() - $lastSendtime < 60) {
$this->error('发送过于频繁');
}
$where = [];
$where['sendtime'] = ['gt', strtotime(date('Y-m-d'))];
$send_sum = $sendResult = Db::name('mscode')->where($where)->count();
//一天内平台只能发送300条短信
if ($send_sum > 300) {
$this->error('请稍后重试。。。');
}
$where['mobile'] = $mobile;
$sendResult = Db::name('mscode')->where($where)->count();
//同一手机一天只能发送5条短信
if ($sendResult >= 5) {
$this->error('短信超过限制');
}
$ip = $this->request->ip();
//需要引入think\Cache类,也可以存数据库;
if (cache($ip)) {
Cache::inc($ip);
} else {
cache($ip, 1, 86400);
}
//同一ip一天只能发送30条短信
if (cache($ip) && cache($ip) > 30) {
$this->error('短信超过限制');
}
//存入数据库记录
$code = rand(111111, 999999);
$data['mobile'] = $mobile;
$data['code'] = $code;
$data['sendtime'] = time();
$data['state'] = 0;
$data['endtime'] = time() + 600;
$sendResult = Db::name('mscode')->insert($data);
if ($sendResult) {
//调用短信发送接口
$result = (new Duanxin())->duanx($mobile, $code);
if ($result['status'] == 1) {
$this->success('发送成功');
}
}
$this->error('发送失败');
} /**
* 手机验证码验证
* @param $mobile
* @param $code
* @return array
*/
function checkCode($mobile, $code)
{
$mscode = Db::name('mscode');
$rs = array();
//获得最新短信验证码
$codeInfo = $mscode->where(array('mobile' => $mobile))->order('id desc')->find();
if ($codeInfo['code'] != $code) {
$rs['state'] = 0;
$rs['msg'] = '短信验证码有误';
return $rs;
}
//判断是否过期
if ($codeInfo['endtime'] < time()) {
$rs['state'] = 0;
$rs['msg'] = '短信验证码已过期';
return $rs;
}
//成功返回
$rs['state'] = 1;
return $rs;
}

TP5发送短信限制的更多相关文章

  1. PHP发送短信功能

    发送短信的功能主要在于获得短信接口后,在函数中模仿用户行为,例如浏览器跳转输出短信接口的链接. 需要运用的函数为 curl_init(); curl_setopt(); curl_exec(); cu ...

  2. WPF MVVM下做发送短信小按钮

    最近做一个项目,因为涉及到注册,因此需要发送短信,一般发送短信都有一个倒计时的小按钮,因此,就做了一个,在此做个记录. 一.发送消息 没有调用公司的短信平台,只是模拟前台生成一串数字,将此串数字输出一 ...

  3. NetCore 阿里大于发送短信

    使用阿里大于API发送短信,但阿里没有提供NetCore 的API,自己看了下源码重写了发短信这个部分 public class MessageSender { private readonly st ...

  4. android 中调用接口发送短信

    android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getD ...

  5. Android 学习第13课,android 实现发送短信的功能

    1. 界面布局 界面代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  6. ios调用本地拨打电话,发送短信

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话   [[UIApplication sharedApplicat ...

  7. Android发送短信核心代码

    核心代码:(1)SmsManager manager = SmsManager.getDefault(); //获得默认的消息管理器(2)ArrayList<String> list = ...

  8. Android发送短信

    // 发送短信 public void sendMsg(){ String content = edtSend.getText().toString(); SmsManager smsManager ...

  9. a标签的妙用-拨打电话、发送短信、发送邮件

    前端时间在做手机WAP网站时,遇到需要点击页面上显示的电话号能直接拨号的需求,查找资料发现可以使用html的a标签完美实现该需求!记录下来以备后用...... 目前主流手机浏览器对H5的支持已经很不错 ...

  10. java发送短信--httpclient方式

    最近头让我写个发送短信的java程序检测BI系统,检查数据库是否有异常发送,有则发送短信到头的手机里.这里我直说httpclient方式的get请求方式,并且已经有方式的短信的接口了,所以只要再加上参 ...

随机推荐

  1. Educational Codeforces Round 94 (A - D题题解)

    https://codeforces.com/contest/1400/problem/A Example input 4 1 1 3 00000 4 1110000 2 101 output 1 0 ...

  2. 深度学习基础课:“判断性别”Demo需求分析和初步设计(上)

    大家好~我开设了"深度学习基础班"的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序 线上课程资料: 本节课录像回放 扫码加QQ群, ...

  3. 完全免费白嫖 GPT-4 的终极方案!

    原文链接:https://icloudnative.io/posts/completely-free-to-use-gpt4/ GPT-4 目前是世界上最强的多模态大模型,能力甩 GPT-3.5 好几 ...

  4. zookeeper 集群环境搭建及集群选举及数据同步机制

    本文为博主原创,未经允许不得转载: 目录: 1. 分别创建3个data目录用于存储各节点数据 2. 编写myid文件 3. 编写配置文件     4.分别启动 5.分别查看状态 6. 检查集群复制情况 ...

  5. React报错之Property does not exist on type 'JSX.IntrinsicElements'

    正文从这开始~ 总览 当组件名称以小写字母开头时,会导致"Property does not exist on type 'JSX.IntrinsicElements'"错误.为了 ...

  6. 神经网络优化篇:详解学习率衰减(Learning rate decay)

    学习率衰减 加快学习算法的一个办法就是随时间慢慢减少学习率,将之称为学习率衰减,来看看如何做到,首先通过一个例子看看,为什么要计算学习率衰减. 假设要使用mini-batch梯度下降法,mini-ba ...

  7. PHP安全之道学习笔记6:密码安全

    PHP安全之道:密码安全    最近几年用户数据泄露越发频繁,一些使用PHP技术的大型网站被暴库或者脱库,facebook公司曾因为此类事件股价暴跌.从长远发展来看,用户的数据安全对于网站来说至关重要 ...

  8. 00.Oracle 11g安装

    通过Docker安装Oracle 1.搜索镜像 先使用指令搜素远程仓库中的Oracle镜像 sudo docker search docker-oracle-xe-11g 2.拉取镜像 选择一个sta ...

  9. vocode-markdown导出pdf插件

    1. 背景 在vocode中编辑markdown格式文本文件,并将其导出为pdf格式文件 2. 插件 在 vscode的扩展市场中搜索插件"Markdown PDF" 并安装 选中 ...

  10. [转帖]Linux 上 SQL Server 2022 (16.x) 的各版本和支持的功能

    https://zhuanlan.zhihu.com/p/371869456   本文内容 SQL Server 版本 将 SQL Server 用于客户端/服务器应用程序 SQL Server 组件 ...