阿里云短信redis

  • 一、安装阿里云短信SDK
  • 二、封装到项目lib中
  • 三、radis记录验证码
    • 1. 安装redis服务
    • 2. 可视化redis管理软件
    • 3. PHP安装redis扩展
    • 4. 配置缓存redis
    • 5. redis保存短信验证码,设置过期时间
    • 6. 验证短信验证码

一、安装阿里云短信SDK

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

composer require alibabacloud/sdk

安装完成后会在vendor文件夹生成阿里云的常用功能,不仅仅是短信模块。

二、封装到项目lib中

因为短信模块可能在其他应用中也有使用,所以封装在lib中,在common\lib文件夹下创建sms\AliSms文件夹,将阿里云短信的功能封装在AliSms中:

先在可视化调试中页面测试是否可以发送短信,PhoneNumbers填写接收短信的手机号码,SignName是签名名称(短信服务–国内消息–签名管理),TemplateCode填写短信模板名称(短信服务–国内消息–模板管理):

点击发起调用,查看是否有收到短信:

发送成功后将右侧代码粘贴到lib库中AliSms.php,里面的部分参数我是写在配置文件里的:

<?php
declare(strict_types=1);
namespace app\common\lib\sms\AliSms;use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;class AliSms
{/*** 阿里云发送短信* @param string $phone* @param int $code* @return bool* @throws ClientException*/public static function sendCode(string $phone, int $code) : bool {if(empty($phone) || empty($code)){return false;}AlibabaCloud::accessKeyClient(config("aliyun.access_key_id"), config("aliyun.access_secret"))->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;}
}

Business层:

<?phpdeclare(strict_types=1);
namespace app\common\business;
use app\common\lib\sms\AliSms\AliSms;class Sms
{public static function sendCode(string $phoneNumber) : bool {$code = rand(100000, 999999);$sms = AliSms::sendCode($phoneNumber, $code);if($sms){// 需要记录redis及失效时间1分钟}return true;}
}

Controller层:

<?php
namespace app\api\controller;
use app\api\validate\User;
use app\BaseController;
use think\exception\ValidateException;
use app\common\business\Sms as SmsBus;class Sms extends BaseController
{public function code(){$phoneNumber = input("param.phone_number","","trim");$data = ['phone_number' => $phoneNumber];// 已采用自定义异常方法拦截,如果没有采用自定义拦截,需要try...catchvalidate(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"),"发送验证码失败");}
}

定义路由文件:
api.php

<?phpuse think\facade\Route;Route::rule('smscode', 'sms/code','POST');

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

三、radis记录验证码

1. 安装redis服务

官网下载:https://redis.io/download
根据自己的系统安装redis服务,然后开启服务。
windows上双击redis-server.exe,出现以下界面就是开启了服务:

Tips: 这个窗口不要关闭哦,否则服务就关掉了!

2. 可视化redis管理软件

初学者可以通过可视化工具查看redis管理的数据,就像navcat查看数据库差不多。
RDM官网:https://rdm.dev/
(官网是收费的,但是咱们天朝学子应该知道怎么办,就不多说了。。。)

3. 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

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

extension=php_redis.dll

打开php扩展的redis

4. 配置缓存redis

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

<?php// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------return [// 默认缓存驱动'default' => 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',]],
];

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

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

    <?phpreturn ["code_pre" => "sms_code_pre_", // key 前缀"code_expire" => 60, // 失效时间 60 秒
    ];
    
  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;
    }
    
  3. 重新测试发送短信接口,查看redis是否记录成功
    用Postman发送POST请求http://tp6.com/api/smscode,显示发送成功:

    手机接收到短信验证码403777,刷新RDM里面已经有了一条记录,并显示了验证码和失效时间,时间从60开始递减,减到0就不能再访问,刷新一下这个key就没有了。

6. 验证短信验证码

这里只需要使用cache("key")就可以获取radis记录的值,如果没有查询到就是过期了,没有过期再判断是否相等就行了。


⭐️重磅推荐:免费商用电商系统

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

  1. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  2. ThinkPHP6项目基操(16.实战部分 redis+token登录)

    redis+token登录 前言 一.生成唯一token 二.设置token并返回token到前端 三.登录拦截器(需要登录/不需登录) 前言 登录一般可以使用session处理,它使用比较简单,但是 ...

  3. springboot项目调用阿里云短信接口(包括短信上行)

    最近一直在做项目,很久没有写过博客了,最近做的一个项目中遇到了一个业务需要用到短信功能包括了发送短信和短信回复之后要收到回复内容,阿里云短信服务是一个非常好的平台,里面提供了多种短信接口可以供我们使用 ...

  4. 阿里云短信验证码实战

    一.创建阿里云短信权限用户 1.登陆阿里云之后我们点击头像,接着点击AccessKey: 2.选择开始使用子用户 : 3.我们先要创建一个用户组: 4.依次点击新建的用户组--授权管理,给用户组授权, ...

  5. SpringBoot阿里云短信业务实战

    狂神说Java:https://www.bilibili.com/video/BV1c64y1M7qN 阿里云短信服务帮助文档:https://help.aliyun.com/product/4428 ...

  6. thinkphp6对接阿里云短信服务完成定时发送短信功能

    1.导入阿里短信包 通过composer下载依赖包 composer require alibabacloud/dysmsapi-20170525 2.0.22 具体可参见阿里云短信服务 >&g ...

  7. 阿里云短信服务详细说明与实战开发后端代码

    文章目录 1.短信服务背景 2.短信发送流程 3.阿里云短信服务基本说明 3.1 开通阿里云短信服务与购买短信套餐包 3.2 短信服务帮助文档 3.3 手机短信模板介绍 3.3.1 基本说明 3.3. ...

  8. SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)

    前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...

  9. SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)

    B站小狂神-此博客的内容就是看了这个视频的总结(博主自己写的哦~并非转载) 视频链接-[狂神说]通俗易懂的阿里云短信业务实战教程(露脸) 您是否还在为别人的项目有短信功能自己的却没有? 您是否还在为自 ...

最新文章

  1. 126篇殿堂级深度学习论文分类整理 从入门到应用(上)
  2. 互联网1分钟 | 0410 腾讯QQ上线陌生人社交入口“扩列”测试;支付宝小程序与UC浏览器打通...
  3. 跨平台低延迟的RTMP/RTSP直播播放器设计实现
  4. 计算机主机外部的连接端口有何作用,微机原理 课后题 标准答案
  5. 信息学奥赛一本通C++语言——1096:数字统计
  6. (33)System Verilog模块与包定义同名类冲突
  7. java程序n体问题_2n皇后问题 (Java代码)详解
  8. Coinbase发生一笔7500枚BTC巨额转出交易 转移金额近2.5亿美元
  9. [原创]FOCUS处理系统流程之:流程批量生成(个人专用懒人版)
  10. java获取当前日期和时间的二种方法分享
  11. 语音信号处理基础(四)—语音编辑
  12. Apache ActiveMQ
  13. matlab7.0官方下载64位win10,window10下MATLAB 7.0下载及安装
  14. 两个9014三极管简易开关电路分析
  15. shal+php,PHP微信开发——第二弹
  16. 问道服务器etc修改教程,常用的修改etc对照表-详细版
  17. YARN-ResourceManager重启
  18. 面向对象化(封装,继承,多态)
  19. python爬虫模式_python爬虫的入门试炼
  20. python识别图像中的物体_OpenCV+Python 指定物体识别

热门文章

  1. 搭建ceph单节点对象存储服务器
  2. 单片机系统中的红外通信接口
  3. 除了架构,没有数据人才,也做不了数字化转型,传统企业路在何方
  4. 不懂代码,如何做出实时刷新的数据大屏?
  5. 技术真的就不是那么重要了
  6. 【转载】C++运算符之类型转换
  7. 构建自己的服务器有什么好处呢?
  8. Google走了 站长应该更相信百度
  9. 关羽在韩国有块私家地?
  10. SQL SERVER与ACCESS、EXCEL的数据转换