123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?php
- /**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 16/3/12
- * Time: 下午4:48
- */
- require_once(BASE_CORE_PATH . '/framework/libraries/sms.php');
- class sms_helper
- {
- const repeat_mintime = 60;
- const code_expire = 5 * 60;
- const register = 'register';
- const resetpass = 'resetpass';
- const getbonus = 'getbonus';
- const getwxbind = 'getwxbind';
- const getfcode = 'getfcode';
- const order_sended = 'order_sended';
- const order_received = 'order_received';
- const after_comment = 'after_comment';
- const evidence = 'evidence';
- const balance_warning = 'balance_warning';
- static private $arrTypes = ['register','resetpass','getbonus','getwxbind','getfcode',
- 'order_sended','order_received','after_comment'];
- public function send_code($mobile,$type,$fcheck = true)
- {
- if(!in_array($type,sms_helper::$arrTypes)) {
- return ['code' => errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}"];
- }
- if($fcheck)
- {
- $cur_time = time();
- if(isset($_SESSION['sms_code'][$type]))
- {
- $last_time = $_SESSION['sms_code'][$type]['last_time'];
- if($cur_time - $last_time < self::repeat_mintime) {
- return ['code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime)];
- }
- }
- }
- $code = makeSmscode();
- Log::record("sms code = {$code}",Log::DEBUG);
- QueueClient::push('sendSMS', ['mobile'=>$mobile,'type'=>$type,'datas' => ['code'=>$code,'time'=>'5']]);
- // $logic = Logic('queue');
- // $logic->sendSMS(['mobile'=>$mobile,'type'=>$type,'datas' => ['code'=>$code,'time'=>'5']]);
- $status = 0;
- if ($status == 0)
- {
- if($fcheck)
- {
- if(isset($_SESSION['sms_code'][$type])) {
- $count = $_SESSION['sms_code'][$type]['count'];
- } else {
- $count = 0;
- }
- $_SESSION['sms_code'][$type] = ['count' => $count + 1, 'code' => $code, 'last_time' => time(),'mobile' => $mobile];
- }
- return ['code' => 200];
- } else {
- $msg = self::get_errmsg($status,$type);
- return ['code' => errcode::ErrSms, 'msg' => $msg];
- }
- }
- public function send($mobile, $type)
- {
- if(!in_array($type,sms_helper::$arrTypes)) {
- return ['code' => errcode::ErrParamter, 'msg' => "错误的类型参数: type={$type}"];
- }
- $cur_time = time();
- if(isset($_SESSION['sms_code'][$type]))
- {
- $last_time = $_SESSION['sms_code'][$type]['last_time'];
- if($cur_time - $last_time < self::repeat_mintime) {
- return ['code' => errcode::ErrSmsLessRepeateMinTime, 'msg' => errcode::msg(errcode::ErrSmsLessRepeateMinTime)];
- }
- }
- //$sms = new Sms();
- $code = makeSmscode();
- Log::record("sms code = {$code}",Log::DEBUG);
- //Logic('queue')->sendSMS(array('mobile'=>$mobile,'type'=>$itype,'datas' => array('code'=>$code,'time'=>'5')));
- QueueClient::push('sendSMS', ['mobile'=>$mobile,'type'=>$type,'datas' => ['code'=>$code,'time'=>'5']]);
- $status = 0;
- if ($status == 0)
- {
- if(isset($_SESSION['sms_code'][$type])) {
- $count = $_SESSION['sms_code'][$type]['count'];
- } else {
- $count = 0;
- }
- $_SESSION['sms_code'][$type]['count'] = $count + 1;
- $_SESSION['sms_code'][$type]['code'] = $code;
- $_SESSION['sms_code'][$type]['last_time'] = time();
- $_SESSION['sms_code'][$type]['mobile'] = $mobile;
- return ['code' => 200];
- } else {
- $msg = self::get_errmsg($status,$type);
- return ['code' => errcode::ErrSms, 'msg' => $msg];
- }
- }
- static public function send_nostore_message($mobile,$type,$datas)
- {
- QueueClient::push('sendSMS', ['mobile' => $mobile,'type' => $type, 'datas' => $datas]);
- }
- static public function check_code($itype,$code,$mobile)
- {
- if(isset($_SESSION['sms_code'][$itype]))
- {
- if($_SESSION['sms_code'][$itype]['mobile'] != $mobile) {
- return ['code' => errcode::ErrSmscode, 'msg' => '验证手机号和发送验证码手机号不一致.'];
- }
- $tmout = time() - $_SESSION['sms_code'][$itype]['last_time'];
- if($tmout <= self::code_expire)
- {
- if($code == $_SESSION['sms_code'][$itype]['code']) {
- return true;
- } else {
- return ['code' => errcode::ErrSmscode, 'msg' => '验证码错误.'];
- }
- }
- else {
- return ['code' => errcode::ErrSmscodeExpire, 'msg' => errcode::msg(errcode::ErrSmscodeExpire)];
- }
- }
- else {
- return ['code' => errcode::ErrSmscode, 'msg' => '验证码错误.'];
- }
- }
- static private function get_errmsg($status,$itype)
- {
- $iCode = intval($status);
- if($iCode == 160038) {
- return '短信验证码发送过频繁';
- }
- elseif($iCode == 160040)
- {
- if($itype == sms_helper::register) {
- $stype = '注册验证码';
- } elseif ($itype == sms_helper::getbonus) {
- $stype = '红包验证码';
- } elseif ($itype == sms_helper::resetpass) {
- $stype = '重置密码验证码';
- }
- $msg = sprintf("%s,超过当天发送上限.",$stype);
- return $msg;
- }
- elseif($iCode == 160042) {
- return "号码格式不正确.";
- }
- elseif($iCode == 160000) {
- return "第三方短信系统错误.";
- }
- elseif($iCode == 160034) {
- return "号码在第三方短信系统黑名单中.";
- }
- else {
- return "发送短信错误 error={$status}.";
- }
- }
- }
|