On this page
手机验证码api
获取验证码流程:
(1)接收手机号码
(2)验证手机号码合法性
(3)判断是否已经获取过验证码(判断缓存中是否存在当前手机号的验证码,有则提示“你已经获取过验证码了”)
(4)生成4位数随机数字
(5)发送短信(阿里大于)
(6)手机号=>验证码 的形式保存在缓存中(60秒)
(7)提示成功
php
// 发送验证码
public function sendCode(){
// 获取用户提交手机号码
$phone = request()->param('phone');
// 判断是否已经发送过
if(Cache::get($phone)) throw new BaseException(['code'=>200,'msg'=>'你操作得太快了','errorCode'=>30001]);
// 生成4位验证码
$code = random_int(1000,9999);
// 判断是否开启验证码功能
if(!config('api.aliSMS.isopen')){
Cache::set($phone,$code,config('api.aliSMS.expire'));
throw new BaseException(['code'=>200,'msg'=>'验证码:'.$code,'errorCode'=>30005]);
}
// 发送验证码
$res = AlismsController::SendSMS($phone,$code);
//发送成功 写入缓存
if($res['Code']=='OK') return Cache::set($phone,$code,config('api.aliSMS.expire'));
// 无效号码
if($res['Code']=='isv.MOBILE_NUMBER_ILLEGAL') throw new BaseException(['code'=>200,'msg'=>'无效号码','errorCode'=>30002]);
// 触发日限制
if($res['Code']=='isv.DAY_LIMIT_CONTROL') throw new BaseException(['code'=>200,'msg'=>'今日你已经发送超过限制,改日再来','errorCode'=>30003]);
// 发送失败
throw new BaseException(['code'=>200,'msg'=>'发送失败','errorCode'=>30004]);
}
config/api.php(自定义配置文件)
php
<?php
return [
// token失效时间,0代表永不失效
'token_expire'=>0,
// 阿里大于
'aliSMS'=>[
'isopen'=> false,//开启阿里大于
'accessKeyId'=>'<accessKeyId>',
'accessSecret'=>'<accessSecret>',
'regionId'=>'cn-hangzhou',
'product'=>'Dysmsapi',
'version'=>'2017-05-25',
'SignName'=>'<YourSignName>',
'TemplateCode'=>'<YourTemplateCode>',
// 验证码发送时间间隔(60秒)
'expire'=>60
]
];