errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}"); } if ($type == 'register') { $itype = Sms::register_code; } elseif ($type == 'resetpass') { //重置密码需要在登录的状态下才可以执行。 $itype = Sms::resetpass_code; } elseif ($type == 'getbonus') { $itype = Sms::bonus_code; } $cur_time = time(); if(isset($_SESSION['sms_code'][$itype])) { $last_time = $_SESSION['sms_code'][$itype]['last_time']; if($cur_time - $last_time < self::repeat_mintime) { return array('code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime)); } } $sms = new Sms(); $code = makeSmscode(); $status = $sms->send($mobile, array('code' => $code, 'type' => $itype, 'time' => '5')); if ($status == 0) { if(isset($_SESSION['sms_code'][$itype])) { $count = $_SESSION['sms_code'][$itype]['count']; } else { $count = 0; } $_SESSION['sms_code'][$itype]['count'] = $count + 1; $_SESSION['sms_code'][$itype]['code'] = $code; $_SESSION['sms_code'][$itype]['last_time'] = time(); return array('code' => 200); } else { $msg = self::get_errmsg($status,$itype); return array('code' => errcode::ErrSms, 'msg' => $msg); } } static public function check_code($itype,$code) { if(isset($_SESSION['sms_code'][$itype])) { $tmout = time() - $_SESSION['sms_code'][$itype]['last_time']; if($tmout <= self::code_expire) { if($code == $_SESSION['sms_code'][$itype]['code']) { return true; } else { return array('code' => errcode::ErrSmscode, 'msg' => '验证码错误.'); } } else { return array('code' => errcode::ErrSmscodeExpire, 'msg' => errcode::msg(errcode::ErrSmscodeExpire)); } } else { return array('code' => errcode::ErrRegister, 'msg' => errcode::msg(errcode::ErrRegister)); //这个错误码需要商榷 } } static private function get_errmsg($status,$itype) { $iCode = intval($status); if($iCode == 160038) { return '短信验证码发送过频繁'; } else if($iCode == 160040) { if($itype == Sms::register_code) { $stype = '注册验证码'; } elseif ($itype == Sms::getbonus_code) { $stype = '红包验证码'; } elseif ($itype == Sms::resetpass_code) { $stype = '重置密码验证码'; } $msg = sprintf("%s,超过当天发送上限.",$stype); return $msg; } else { return "发送短信错误 error={$status}."; } } }