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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

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

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

阿里云短信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:

composer require alibabacloud/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ù)我是寫在配置文件里的:

<?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 {/*** 阿里云發(fā)送短信* @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及失效時(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

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

定義異常方法攔截參考: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)

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

然后放到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í)間

  • 配置redis前綴和失效時(shí)間<?phpreturn ["code_pre" => "sms_code_pre_", // key 前綴"code_expire" => 60, // 失效時(shí)間 60 秒 ];
  • 修改Business層代碼public static function sendCode(string $phoneNumber) : bool {$code = rand(100000, 999999);$sms = AliSms::sendCode($phoneNumber, $code);if($sms){// 需要記錄redis及失效時(shí)間1分鐘cache(config("redis.code_pre").$phoneNumber, $code, config("redis.code_expire"));}return $sms; }
  • 重新測試發(fā)送短信接口,查看redis是否記錄成功
    用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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。