阿里云短信redis
一、安装阿里云短信SDK
阿里云短信调试
阿里云短信SDK PHP文档
参考阿里云官方文档安装阿里云短信SDK:
`composer require alibabacloud/sdk`
* 1
安装完成后会在vendor文件夹生成阿里云的常用功能,不仅仅是短信模块。
二、封装到项目lib中
因为短信模块可能在其他应用中也有使用,所以封装在lib
中,在commonlib
文件夹下创建smsAliSms
文件夹,将阿里云短信的功能封装在AliSms
中:
发送成功后将右侧代码粘贴到lib
库中AliSms.php
,里面的部分参数我是写在配置文件里的:
`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;
}
}`
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
* 12
* 13
* 14
* 15
* 16
* 17
* 18
* 19
* 20
* 21
* 22
* 23
* 24
* 25
* 26
* 27
* 28
* 29
* 30
* 31
* 32
* 33
* 34
* 35
* 36
* 37
* 38
* 39
* 40
* 41
* 42
* 43
* 44
* 45
* 46
* 47
* 48
* 49
* 50
* 51
* 52
* 53
* 54
* 55
* 56
* 57
* 58
* 59
Business
层:
`
Controller
层:
` $phoneNumber
];
// 已采用自定义异常方法拦截,如果没有采用自定义拦截,需要try...catch
validate(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"),"发送验证码失败");
}
}`
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
* 12
* 13
* 14
* 15
* 16
* 17
* 18
* 19
* 20
* 21
* 22
* 23
* 24
* 25
* 26
* 27
* 28
* 29
* 30
定义路由文件:api.php
`
定义异常方法拦截参考:ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面&API错误)
三、radis记录验证码
- 安装redis服务
官网下载:https://redis.io/download
根据自己的系统安装redis
服务,然后开启服务。
windows上双击redis-server.exe
,出现以下界面就是开启了服务:
Tips: 这个窗口不要关闭哦,否则服务就关掉了!
- 可视化redis管理软件
初学者可以通过可视化工具查看redis管理的数据,就像navcat
查看数据库差不多。
RDM官网:https://rdm.dev/
(官网是收费的,但是咱们天朝学子应该知道怎么办,就不多说了。。。)
- 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`
* 1
* 2
然后放到php扩展目录:D:phpstudy_proExtensionsphpphp7.4.3ntsext
一般集成环境会有这个文件,然后查看php.ini
文件里有配置redis
:
`extension=php_redis.dll`
* 1
- 配置缓存redis
ThinkPHP
默认是使用文件缓存,这里发送验证码的接口我是卸载api
应用下的,所以我复制了一份cache
配置文件到api
应用的config
目录下,并修改了配置:
` 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',
]
],
];`
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
* 12
* 13
* 14
* 15
* 16
* 17
* 18
* 19
* 20
* 21
* 22
* 23
* 24
* 25
* 26
* 27
* 28
* 29
* 30
* 31
* 32
* 33
* 34
* 35
- redis保存短信验证码,设置过期时间
配置redis前缀和失效时间
` "sms_code_pre_", // key 前缀 "code_expire" => 60, // 失效时间 60 秒 ];` * 1 * 2 * 3 * 4 * 5 * 6
修改
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; }` * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10
- 重新测试发送短信接口,查看
redis
是否记录成功
用Postman发送POST请求http://tp6.com/api/smscode
,显示发送成功: