tp6框架结合阿里短信接口发送短信并记录redis
1> 开通阿里云短信服务
2> 安装redis服务
3>config配置文件
创建sms.php 文件,配置阿里云短信信息
return [
'access_key' => 'LTAI4G9qLv7QFs3fEx2e5aW6',
'access_secret' => 'SmCoM7FQkq6vFHu0ySwgry76SAouVI',
'host' => 'dysmsapi.aliyuncs.com',
'region_id' => 'cn-hangzhou',
'sign_name' => 'noodles',
'template_code' => 'SMS_197897436',
];
创建redis.php文件 配置前缀和过期时间
return [
'code_pre' => "code_pre_",
'code_expire' => 60
];
创建cache.php 文件,配置redis信息
return [
// 默认缓存驱动
'default' => env('cache.driver', 'redis'),
// 缓存连接方式配置
'stores' => [
'file' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => '',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
// 缓存标签前缀
'tag_prefix' => 'tag:',
// 序列化机制 例如 ['serialize', 'unserialize']
'serialize' => [],
],
// 更多的缓存连接
'redis' =>[
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
]
],
];
4> 打开阿里云短信文档 直接复制demo,修改自己的配置信息
创建AliSms类库文件,修改配置项
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class AliSms
{
/**
* @param $phone
* @param $code
* @return bool
* @throws ClientException
*/
public function sendCode($phone,$code){
AlibabaCloud::accessKeyClient(config('sms.access_key'), config('sms.access_secret'))
->regionId('cn-hangzhou')
->asDefaultClient();
$tmpCode = [
'code' => $code
];
try {
$result = AlibabaCloud::rpc()
->product('Dysmsapi')
// ->scheme('https') // https | http
->version('2017-05-25')
->action('SendSms')
->method('POST')
->host(config('sms.host'))
->options([
'query' => [
'RegionId' =>config('sms.region_id'),
'PhoneNumbers' => $phone,
'SignName' => config('sms.sign_name'),
'TemplateCode' => config('sms.template_code'),
'TemplateParam' => json_encode($tmpCode)
],
])
->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;
}
if(isset($result) && $result['Code']=='OK'){
return true;
}else{
return false;
}
}
}
5> 调用短信发送接口,记录redis string格式
use app\common\lib\sms\AliSms;
public function sendCode (){
$phone = input('phone');
if(empty($phone)){
return show(config('code.error'),'手机号不能为空');
}
$code = rand(100000,999999);
$aliSms = new AliSms();
$res = $aliSms->sendCode($phone,$code);
cache(config('redis.code_pre').$phone,$code,config('redis.code_expire'));
//halt(cache(config('redis.code_pre').$phone));
if($res){
return show(config('code.success'),'验证码发送成功');
}else{
return show(config('code.error'),'验证码发送失败');
}
}
6> 验证是否成功记录
cd /usr/local/redis/bin
ll
./redis-cli
set key val
get key