IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> tp5.1使用【极光】+【redis】发送短信验证码 -> 正文阅读

[PHP知识库]tp5.1使用【极光】+【redis】发送短信验证码

1.在项目中的 composer.json 文件中添加 JSMS 依赖:

"require": {
    "jiguang/jsms": "~1.0"
}

2. 执行composer update

composer update

3.在app.php中配置全局变量,极光的一些参数

?4.封装发送短信函数

<?php

/*发送短信*/
namespace app\common\facade;
use JiGuang\JSMS;
use think\facade\Config;
class SendMs
{
    public static function sendmsg($phone, $content)
    {
        $s=Config::get();
        $app_key = $s['app']['jiguang']['app_key'];
        $master_secret = $s['app']['jiguang']['master_secret'];
        $sign_id= $s['app']['jiguang']['sign_id']; 
        $client = new JSMS($app_key, $master_secret, [ 'disable_ssl' => true ]);
        $temp_id = '1';
        $temp_para = ['code' => $content];
        //单条短信发送
        //参数说明:
        //$phone: 接收验证码的手机号码
        //$temp_id: 模板 ID,这个是需要去极光平台自己创建模板的
        //$temp_para: 模板参数,需要替换的参数名和 value 的键值对,仅接受数组类型的值
        //$time: 定时短信发送时间,格式为 yyyy-MM-dd HH:mm:ss,默认为 null 表示立即发送
        //$sign_id: 签名ID,null 表示使用应用默认签名

        $res = $client->sendMessage($mobile=$phone, $temp_id, $temp_para, $time = null,$sign_id);
        // 判断请求是否发送失败
        if(empty($res['body']['error'])) {
            // 短信接口调用成功
            return true;
        } else {
            // 短信接口调用失败
            return $res['body']['error']['message'];
        }
    }
}

5.封装发送验证码和验证的函数

<?php

namespace app\common\controller;
use app\common\controller\Base;
use app\common\facade\SendMs;
use app\common\model\AppSendMs;
use think\facade\Cache;

class SendCode extends Base
{
    public function send($phone,$type)
    {
        /*不同的类型使用不同的方法*/
        $type_time=$type.'_time_';
        $type_code=$type.'_code_';
        $param['phone']=$phone;
        $validate = $this->validate($param, [
            'phone'=>'require|regex:1[3-9]\d{9}'
        ]);
        if($validate !== true) {
            $res = [
                'code' => 400,
                'msg' => '手机号格式不正确'
            ];
            return $res;
        }
        // 获取上一次发送验证码的时间
        $last_time = Cache::store('redis')->get($type_time . $phone);
        // 判断当前发送验证码的时间减去上一次发送验证码的时间,是否小于 5
        if((time() - $last_time) <60) {
            $res = [
                'code' => 400,
                'msg' => '发送频繁,稍后再试'
            ];
            return $res;
        }
        // 发送验证码 (生成验证码、生成短信内容、发送短信)
        $code = mt_rand(1000, 9999);
        $result = SendMs::sendmsg($phone, $code);   // 为了不减少第三方短信接口的发送次数,这里暂时屏蔽,开发完毕后自行打开
        // 将结果存到数据库中,不管是否成功
        AppSendMs::create(['phone'=>$phone,'result'=>$result,'code'=>$code,'type'=>$type]);
        if($result === true) {
            // 将验证码存储到缓存,用于后续的验证
            Cache::store('redis')->set($type_code . $phone, $code, 300);
            // 将当前发送验证码的时间存到缓存,用于防止用户频繁发送验证码
            Cache::store('redis')->set($type_time . $phone, time(), 300);
            // 返回成功结果
            $res = [
                'code' => 200,
                'msg' => '短信发送成功'
            ];
            return $res;
        } else {
            // 返回失败结果
            $res = [
                'code' => 400,
                'msg' => $result
            ];
            return $res;
        }
    }
    public function check($phone,$type,$code)
    {
        // 验证码校验
        $type_code=$type.'_code_';
        $s = Cache::store('redis')->get($type_code .$phone);
        if($code != $s) {
            return ['code' => 204 , 'msg' => '验证码错误'];
        }
        // 验证码校验成功一次后,将当前缓存中对应手机号的验证码删除
        Cache::store('redis')->set($type_code .$phone, null);
        return  ['code' => 20000 , 'msg' => '成功'];
    }
}

6.调用函数发送验证码

  $SendCode=new SendCode();
  $s=$SendCode->send($phone,'register');

7.验证验证码的准确性

    // 验证码校验
        $SendCode=new SendCode();
        $s=$SendCode->check($phone,'register',$code);
        if ($s['code']!=20000){
            return $s;
        }
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:48:22  更:2022-03-03 15:49:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:26:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码