ThinkPHP6项目基操(15.实战部分 阿里云短信redis)

阿里云短信redis

一、安装阿里云短信SDK

阿里云短信调试
阿里云短信SDK PHP文档
参考阿里云官方文档安装阿里云短信SDK:

`composer require alibabacloud/sdk` 

*   1

安装完成后会在vendor文件夹生成阿里云的常用功能,不仅仅是短信模块。
ThinkPHP6项目基操(15.实战部分 阿里云短信redis)_第1张图片

二、封装到项目lib中

因为短信模块可能在其他应用中也有使用,所以封装在lib中,在commonlib文件夹下创建smsAliSms文件夹,将阿里云短信的功能封装在AliSms中:
ThinkPHP6项目基操(15.实战部分 阿里云短信redis)_第2张图片
发送成功后将右侧代码粘贴到lib库中AliSms.php,里面的部分参数我是写在配置文件里的:

`regionId(config("aliyun.region_id"))
            ->asDefaultClient();

        $templateParam = [
            "code" => $code
        ];

        try {
            $result = AlibabaCloud::rpc()
                ->product('Dysmsapi')
                // ->scheme('https') // https | http
                ->version('2017-05-25')
                ->action('SendSms')
                ->method('POST')
                ->host(config("aliyun.host"))
                ->options([
                    'query' => [
                        'RegionId' => config("aliyun.region_id"),
                        'PhoneNumbers' => $phone,
                        'SignName' => config("aliyun.sign_name"),
                        'TemplateCode' => config("aliyun.template_code"),
                        'TemplateParam' => json_encode($templateParam),
                    ],
                ])
                ->request();
            print_r($result->toArray());
        } catch (ClientException $e) {
            return false;
            // echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
            return false;
            // echo $e->getErrorMessage() . PHP_EOL;
        }
        return true;
    }
}` 

*   1
*   2
*   3
*   4
*   5
*   6
*   7
*   8
*   9
*   10
*   11
*   12
*   13
*   14
*   15
*   16
*   17
*   18
*   19
*   20
*   21
*   22
*   23
*   24
*   25
*   26
*   27
*   28
*   29
*   30
*   31
*   32
*   33
*   34
*   35
*   36
*   37
*   38
*   39
*   40
*   41
*   42
*   43
*   44
*   45
*   46
*   47
*   48
*   49
*   50
*   51
*   52
*   53
*   54
*   55
*   56
*   57
*   58
*   59

Business层:

`

Controller层:

` $phoneNumber
        ];

        // 已采用自定义异常方法拦截,如果没有采用自定义拦截,需要try...catch
        validate(User::class)->scene("send_code")->check($data);

        /*try {
            validate(User::class)->scene("send_code")->check($data);
        }catch (ValidateException $e){
            return show(config("status.error"), $e->getError());
        }*/

        if(SmsBus::sendCode($phoneNumber)){
            return show(config("status.success"),"发送验证码成功");
        }
        return show(config("status.error"),"发送验证码失败");
    }
}` 

*   1
*   2
*   3
*   4
*   5
*   6
*   7
*   8
*   9
*   10
*   11
*   12
*   13
*   14
*   15
*   16
*   17
*   18
*   19
*   20
*   21
*   22
*   23
*   24
*   25
*   26
*   27
*   28
*   29
*   30

定义路由文件:
api.php

`

定义异常方法拦截参考:ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面&API错误)

三、radis记录验证码

  1. 安装redis服务

官网下载:https://redis.io/download
根据自己的系统安装redis服务,然后开启服务。
windows上双击redis-server.exe,出现以下界面就是开启了服务:
ThinkPHP6项目基操(15.实战部分 阿里云短信redis)_第3张图片

Tips: 这个窗口不要关闭哦,否则服务就关掉了!
  1. 可视化redis管理软件

初学者可以通过可视化工具查看redis管理的数据,就像navcat查看数据库差不多。
RDM官网:https://rdm.dev/
(官网是收费的,但是咱们天朝学子应该知道怎么办,就不多说了。。。)
ThinkPHP6项目基操(15.实战部分 阿里云短信redis)_第4张图片

  1. PHP安装redis扩展

在控制台输入php -m查看php安装的扩展,如果有找到redis扩展就不用安装了。
在控制台输入php -i查看PHP Extension Build信息,然后下载对应的redis扩展版本.
redis下载官网

`Zend Extension Build => API320190902,NTS,VC15
PHP Extension Build => API20190902,NTS,VC15` 

*   1
*   2

然后放到php扩展目录:D:phpstudy_proExtensionsphpphp7.4.3ntsext一般集成环境会有这个文件,然后查看php.ini文件里有配置redis

`extension=php_redis.dll` 

*   1

打开php扩展的redis
ThinkPHP6项目基操(15.实战部分 阿里云短信redis)_第5张图片

  1. 配置缓存redis

ThinkPHP默认是使用文件缓存,这里发送验证码的接口我是卸载api应用下的,所以我复制了一份cache配置文件到api应用的config目录下,并修改了配置:

` env('cache.driver', 'redis'),

    // 缓存连接方式配置
    'stores'  => [
        'file' => [
            // 驱动方式
            'type'       => 'File',
            // 缓存保存目录
            'path'       => '',
            // 缓存前缀
            'prefix'     => '',
            // 缓存有效期 0表示永久缓存
            'expire'     => 0,
            // 缓存标签前缀
            'tag_prefix' => 'tag:',
            // 序列化机制 例如 ['serialize', 'unserialize']
            'serialize'  => [],
        ],
        // 更多的缓存连接
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'type' => 'redis',
        ]
    ],
];` 

*   1
*   2
*   3
*   4
*   5
*   6
*   7
*   8
*   9
*   10
*   11
*   12
*   13
*   14
*   15
*   16
*   17
*   18
*   19
*   20
*   21
*   22
*   23
*   24
*   25
*   26
*   27
*   28
*   29
*   30
*   31
*   32
*   33
*   34
*   35

  1. redis保存短信验证码,设置过期时间

  1. 配置redis前缀和失效时间

    ` "sms_code_pre_", // key 前缀
        "code_expire" => 60, // 失效时间 60 秒
    ];` 
    
    *   1
    *   2
    *   3
    *   4
    *   5
    *   6
    
    
  2. 修改Business层代码

    `public static function sendCode(string $phoneNumber) : bool {
        $code = rand(100000, 999999);
        $sms = AliSms::sendCode($phoneNumber, $code);
        if($sms){
            // 需要记录redis及失效时间1分钟
            cache(config("redis.code_pre").$phoneNumber, $code, config("redis.code_expire"));
        }
    
        return $sms;
    }` 
    
    *   1
    *   2
    *   3
    *   4
    *   5
    *   6
    *   7
    *   8
    *   9
    *   10
    
    
  3. 重新测试发送短信接口,查看redis是否记录成功
    用Postman发送POST请求http://tp6.com/api/smscode,显示发送成功:
    ThinkPHP6项目基操(15.实战部分 阿里云短信redis)_第6张图片

你可能感兴趣的:(css,sass,es6)