ThinkPHP6项目基操(15.实战部分 阿里云短信redis)
阿里云短信redis
- 一、安裝阿里云短信SDK
- 二、封裝到項(xiàng)目lib中
- 三、radis記錄驗(yàn)證碼
- 1. 安裝redis服務(wù)
- 2. 可視化redis管理軟件
- 3. PHP安裝redis擴(kuò)展
- 4. 配置緩存redis
- 5. redis保存短信驗(yàn)證碼,設(shè)置過期時(shí)間
- 6. 驗(yàn)證短信驗(yàn)證碼
一、安裝阿里云短信SDK
阿里云短信調(diào)試
阿里云短信SDK PHP文檔
參考阿里云官方文檔安裝阿里云短信SDK:
安裝完成后會(huì)在vendor文件夾生成阿里云的常用功能,不僅僅是短信模塊。
二、封裝到項(xiàng)目lib中
因?yàn)槎绦拍K可能在其他應(yīng)用中也有使用,所以封裝在lib中,在common\lib文件夾下創(chuàng)建sms\AliSms文件夾,將阿里云短信的功能封裝在AliSms中:
先在可視化調(diào)試中頁面測試是否可以發(fā)送短信,PhoneNumbers填寫接收短信的手機(jī)號(hào)碼,SignName是簽名名稱(短信服務(wù)–國內(nèi)消息–簽名管理),TemplateCode填寫短信模板名稱(短信服務(wù)–國內(nèi)消息–模板管理):
點(diǎn)擊發(fā)起調(diào)用,查看是否有收到短信:
發(fā)送成功后將右側(cè)代碼粘貼到lib庫中AliSms.php,里面的部分參數(shù)我是寫在配置文件里的:
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及失效時(shí)間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"),"發(fā)送驗(yàn)證碼成功");}return show(config("status.error"),"發(fā)送驗(yàn)證碼失敗");} }定義路由文件:
api.php
定義異常方法攔截參考:ThinkPHP6項(xiàng)目基操(13.實(shí)戰(zhàn)部分 項(xiàng)目中的自定義異常處理總結(jié) 錯(cuò)誤頁面&API錯(cuò)誤)
三、radis記錄驗(yàn)證碼
1. 安裝redis服務(wù)
官網(wǎng)下載:https://redis.io/download
根據(jù)自己的系統(tǒng)安裝redis服務(wù),然后開啟服務(wù)。
windows上雙擊redis-server.exe,出現(xiàn)以下界面就是開啟了服務(wù):
Tips: 這個(gè)窗口不要關(guān)閉哦,否則服務(wù)就關(guān)掉了!
2. 可視化redis管理軟件
初學(xué)者可以通過可視化工具查看redis管理的數(shù)據(jù),就像navcat查看數(shù)據(jù)庫差不多。
RDM官網(wǎng):https://rdm.dev/
(官網(wǎng)是收費(fèi)的,但是咱們天朝學(xué)子應(yīng)該知道怎么辦,就不多說了。。。)
3. PHP安裝redis擴(kuò)展
在控制臺(tái)輸入php -m查看php安裝的擴(kuò)展,如果有找到redis擴(kuò)展就不用安裝了。
在控制臺(tái)輸入php -i查看PHP Extension Build信息,然后下載對(duì)應(yīng)的redis擴(kuò)展版本.
redis下載官網(wǎng)
然后放到php擴(kuò)展目錄:D:\phpstudy_pro\Extensions\php\php7.4.3nts\ext一般集成環(huán)境會(huì)有這個(gè)文件,然后查看php.ini文件里有配置redis:
extension=php_redis.dll打開php擴(kuò)展的redis:
4. 配置緩存redis
ThinkPHP默認(rèn)是使用文件緩存,這里發(fā)送驗(yàn)證碼的接口我是寫在api應(yīng)用下的,所以我復(fù)制了一份cache配置文件到api應(yīng)用的config目錄下,并修改了配置:
<?php// +---------------------------------------------------------------------- // | 緩存設(shè)置 // +----------------------------------------------------------------------return [// 默認(rèn)緩存驅(qū)動(dòng)'default' => env('cache.driver', 'redis'),// 緩存連接方式配置'stores' => ['file' => [// 驅(qū)動(dòng)方式'type' => 'File',// 緩存保存目錄'path' => '',// 緩存前綴'prefix' => '',// 緩存有效期 0表示永久緩存'expire' => 0,// 緩存標(biāo)簽前綴'tag_prefix' => 'tag:',// 序列化機(jī)制 例如 ['serialize', 'unserialize']'serialize' => [],],// 更多的緩存連接'redis' => ['host' => '127.0.0.1','port' => 6379,'type' => 'redis',]], ];5. redis保存短信驗(yàn)證碼,設(shè)置過期時(shí)間
用Postman發(fā)送POST請(qǐng)求http://tp6.com/api/smscode,顯示發(fā)送成功:
手機(jī)接收到短信驗(yàn)證碼403777,刷新RDM里面已經(jīng)有了一條記錄,并顯示了驗(yàn)證碼和失效時(shí)間,時(shí)間從60開始遞減,減到0就不能再訪問,刷新一下這個(gè)key就沒有了。
6. 驗(yàn)證短信驗(yàn)證碼
這里只需要使用cache("key")就可以獲取radis記錄的值,如果沒有查詢到就是過期了,沒有過期再判斷是否相等就行了。
??重磅推薦:免費(fèi)商用電商系統(tǒng)
😏想白嫖整個(gè)電商系統(tǒng)用來商用?
🤑想有自己的商城實(shí)現(xiàn)財(cái)富自由?
🤓想學(xué)習(xí)最佳實(shí)踐提升自己技術(shù)?
快來進(jìn)入🚀 傳送門 🚀,開源免費(fèi)、完整示例帶你快速入門,輕松二開,走上人生巔峰!👨?🎓
總結(jié)
以上是生活随笔為你收集整理的ThinkPHP6项目基操(15.实战部分 阿里云短信redis)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s7.net 写数据到plc_机器视觉软
- 下一篇: 跳坑成功,手摸手带你使用PHP连接Ora