ThinkPHP6项目基操(15.实战部分 阿里云短信redis)
阿里云短信redis
- 一、安裝阿里云短信SDK
- 二、封裝到項目lib中
- 三、radis記錄驗證碼
- 1. 安裝redis服務
- 2. 可視化redis管理軟件
- 3. PHP安裝redis擴展
- 4. 配置緩存redis
- 5. redis保存短信驗證碼,設置過期時間
- 6. 驗證短信驗證碼
一、安裝阿里云短信SDK
阿里云短信調試
阿里云短信SDK PHP文檔
參考阿里云官方文檔安裝阿里云短信SDK:
安裝完成后會在vendor文件夾生成阿里云的常用功能,不僅僅是短信模塊。
二、封裝到項目lib中
因為短信模塊可能在其他應用中也有使用,所以封裝在lib中,在common\lib文件夾下創建sms\AliSms文件夾,將阿里云短信的功能封裝在AliSms中:
先在可視化調試中頁面測試是否可以發送短信,PhoneNumbers填寫接收短信的手機號碼,SignName是簽名名稱(短信服務–國內消息–簽名管理),TemplateCode填寫短信模板名稱(短信服務–國內消息–模板管理):
點擊發起調用,查看是否有收到短信:
發送成功后將右側代碼粘貼到lib庫中AliSms.php,里面的部分參數我是寫在配置文件里的:
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
定義異常方法攔截參考: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下載官網
然后放到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保存短信驗證碼,設置過期時間
用Postman發送POST請求http://tp6.com/api/smscode,顯示發送成功:
手機接收到短信驗證碼403777,刷新RDM里面已經有了一條記錄,并顯示了驗證碼和失效時間,時間從60開始遞減,減到0就不能再訪問,刷新一下這個key就沒有了。
6. 驗證短信驗證碼
這里只需要使用cache("key")就可以獲取radis記錄的值,如果沒有查詢到就是過期了,沒有過期再判斷是否相等就行了。
??重磅推薦:免費商用電商系統
😏想白嫖整個電商系統用來商用?
🤑想有自己的商城實現財富自由?
🤓想學習最佳實踐提升自己技術?
快來進入🚀 傳送門 🚀,開源免費、完整示例帶你快速入門,輕松二開,走上人生巔峰!👨?🎓
總結
以上是生活随笔為你收集整理的ThinkPHP6项目基操(15.实战部分 阿里云短信redis)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s7.net 写数据到plc_机器视觉软
- 下一篇: HBase详细的安装和使用方法