日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2025/3/15 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThinkPHP6项目基操(15.实战部分 阿里云短信redis) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

阿里云短信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保存短信驗證碼,設置過期時間

  • 配置redis前綴和失效時間<?phpreturn ["code_pre" => "sms_code_pre_", // key 前綴"code_expire" => 60, // 失效時間 60 秒 ];
  • 修改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; }
  • 重新測試發送短信接口,查看redis是否記錄成功
    用Postman發送POST請求http://tp6.com/api/smscode,顯示發送成功:

    手機接收到短信驗證碼403777,刷新RDM里面已經有了一條記錄,并顯示了驗證碼和失效時間,時間從60開始遞減,減到0就不能再訪問,刷新一下這個key就沒有了。
  • 6. 驗證短信驗證碼

    這里只需要使用cache("key")就可以獲取radis記錄的值,如果沒有查詢到就是過期了,沒有過期再判斷是否相等就行了。


    ??重磅推薦:免費商用電商系統

    😏想白嫖整個電商系統用來商用?
    🤑想有自己的商城實現財富自由?
    🤓想學習最佳實踐提升自己技術?

    快來進入🚀 傳送門 🚀,開源免費、完整示例帶你快速入門,輕松二開,走上人生巔峰!👨?🎓

    總結

    以上是生活随笔為你收集整理的ThinkPHP6项目基操(15.实战部分 阿里云短信redis)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。