一、请求发送短信接口
public function sendCode()
{
//接收手机号
$data['phone'] = input('get.phone');
//判断是否接到手机号
$validate_res = $this->validate($data,[
'phone' => 'require|regex:1[3-9]\d{9}',
]);
//手机号格式不正确
if($validate_res !== true){
return json(['code'=>400,'msg'=>$validate_res,'data'=>'']);
}
//防止多次发送
if(Cache::has('phone_time_'.$data['phone'])){
if(time()-Cache::get('phone_time_'.$data['phone']) < 60){
return json(['code'=>400,'msg'=>'请1分钟后重试','data'=>'']);
}else{
//大于60秒 已过期 删除记录的时间
Cache::rm('phone_time_'.$data['phone']);
}
}
//生成验证码
$code = mt_rand(1000,9999);
//发送的信息格式
$msg = "【健身小程序】您的验证码是{$code},有效时间为30秒.若非本人操作请忽略此消息!";
//进行发送
$res = sendMsg($data['phone'],$msg);
//发送失败
if(!$res){
return json(['code'=>400,'msg'=>$res,'data'=>'']);
}
//将手机号存入缓存 携带生成时间 以及 生成的验证码
Cache::set('phone_time_'.$data['phone'],time());
Cache::set('phone_code_'.$data['phone'],$code);
//设置验证码过期时间 使用的是Cache redis储存方式
$redis = Cache::store('redis')->handler();
$redis->expire('phone_code_'.$data['phone'],30);
//发送成功返回值
return json(['code'=>200,'msg'=>'发送成功','data'=>$code]);
}
二、登录接口
public function login()
{
//接收登录信息
$data = input('post.');
$data = $data['data'];
$rules = [
'phone' => 'require',
'password' => 'require',
'code' => 'require',
];
$msg = [
'phone.require' => '手机号不能为空',
'password.require' => '密码不能为空',
'code.require' => '验证码不能为空',
];
//进行验证
$res = $this->validate($data,$rules,$msg);
//返回错误信息
if($res !== true){
return json(['code'=>400,'msg'=>$res,'data'=>'']);
}
//查询缓存中是否有验证码
if(!Cache::has('phone_code_'.$data['phone'])) return json(['code'=>400,'msg'=>'验证码已过期','data'=>'']);
//从缓存中取出验证码
$code = Cache::get('phone_code_'.$data['phone']);
//验证用户输入验证码与手机接收到的验证码是否一致
if($code != $data['code']){
return json(['code'=>400,'msg'=>'验证码不一致','data'=>'']);
}
unset($data['code']);
//进行登陆验证
$log_res = User::where($data)->find();
//判断登录结果
if($log_res){
//登陆成功 获取用户id 生成token
$user['token'] = Token::getToken($log_res->id);
// $user['uid'] = $log_res->id;
return json(['code'=>200,'msg'=>'登陆成功','data'=>$user]);
}else{
return json(['code'=>400,'msg'=>'用户或密码错误','data'=>'']);
}
}
三、短信宝配置
首先在application/config.php中添加
//短信配置
'msg' => [
/*短信宝平台*/
'smsapi' => 'http://api.smsbao.com/',
'user' => '',//短信宝平台账号
'pass' => md5(""),//使用md5加密
]
四、在common.php中加入函数 接口方法中发送信息就是调用的此函数
//发送短信
if(!function_exists('sendMsg')){
//使用curl_request函数调用短信接口发送短信
function sendMsg($phone, $content)
{
//从配置中取出请求地址、账号,密码
$smsapi = config('msg.smsapi');
$user = config('msg.user');
$pass = config('msg.pass');
//http://api.smsbao.com/sms?u=USERNAME&p=PASSWORD&m=PHONE&c=CONTENT
$url = $smsapi . 'sms?u=' . $user ."&p=".$pass."&m=".$phone."&c=".urlencode($content);
//get请求
$url .= '&mobile=' . $phone . '&content=' . urlencode($content);
//调用接口数据
$res = curl_request($url, false, [], true);
//短信发送失败
if($res != 0){
return '短信发送失败';
}
//短信发送成功
return true;
}
}
五、curl请求代码
//curl发送请求(为调用接口而准备的)
if(!function_exists('curl_request'))
{
//使用curl函数库发送请求
function curl_request($url, $post=true, $params=[], $https=true)
{
//初始化请求
$ch = curl_init($url);
//默认是get请求。如果是post请求 设置请求方式和请求参数
if($post){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
//如果是https协议,禁止从服务器验证本地证书
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
//发送请求,获取返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
}
六、总结
重点为发送手机验证码的思路,还有走什么流程一定要清楚。可根据以上代码来实现此功能,自己也要理解这个思路,不用短信宝平台也能自己写出来才是真正的掌握!有用的话请给个点赞!谢谢阅读!