下发短信验证码,除了注册就是验证手机号
简单实现原理就是
用手机号和一个键作为key存到缓存里,
用户请求的时候,验证这个手机号是不是已经申请过key*(即已手机号为缓存的key有没有,)如果有,并且当前时间与当时请求时间在60秒之内,那就不要在请求发送短信接口了。
另外,如果发送成功了,要设置一个验证码的时间有效期,一般10分钟。
然后在去对应的找回密码或者是注册中调用一下这个对应的memkey就可以。
下发代码如下。
if(is_numeric($mobile) && strlen($mobile)==11){
$sendtimekey = "Sendsmscode_mobile_sendtime_".$mobile;
$lastsendtime = (int) Mem($sendtimekey);
$now = time();
if($now - $lastsendtime <60){
Error(&#39;请勿频繁下发验证码&#xff0c;两次验证码发送时间不能小于60秒&#xff01;&#39;,-2003);
}
switch($action){
case &#39;register&#39;:
$this->checkRegister($mobile,$type) &#61;&#61;&#61; true ? Error(&#39;您的手机号码注册过&#xff0c;请勿重复注册&#xff0c;谢谢&#xff01;&#39;,-2001) : null;
break;
case &#39;findpassword&#39;:
$this->checkRegister($mobile,$type) &#61;&#61;&#61; false ? Error(&#39;您的手机号码尚未注册过&#xff01;&#39;,-2002) : null;
break;
default:
break;
}
$code &#61; rand(1111,9999);
$content &#61; "验证码&#xff1a;$code (任何索取行为均为诈骗)&#xff0c;10分钟之内有效&#xff0c;请确保仅在登录时亲自填入&#xff0c;不告知他人。";
$data &#61; sendsms($mobile,$content);
if($data!&#61;&#61;false){
$key &#61; "Sendsmscode_mobile_".$mobile;
Mem($key,$code,600);//缓存10分钟
Mem($sendtimekey,$now,60);
// Success(&#39;短信验证码下发成功&#xff01;短信验证码是 &#39;.$code,1001);
Success(&#39;短信验证码下发成功&#xff01;&#39;,1001);
}else{
Error(&#39;短信下发失败&#xff01;&#39;,-2001);
}
}找回代码如下
$key &#61; "Sendsmscode_mobile_".$mobile;
$mobilevercode &#61; Mem($key);
if(empty($mobilevercode) || ($mobilevercode!&#61;$vercode)){
Error(&#39;手机号或验证码错误&#xff01;&#39;,-2003);