| | |
| | | <?php |
| | | /* |
| | | * $Author :PHPYUN开发团队 |
| | | * |
| | | * 官网: http://www.phpyun.com |
| | | * |
| | | * 版权所有 2009-2021 宿迁鑫潮信息技术有限公司,并保留所有权利。 |
| | | * |
| | | * 软件声明:未经授权前提下,不得用于商业运营、二次开发以及任何形式的再次发布。 |
| | | */ |
| | | |
| | | |
| | | /** |
| | | * (email、手机短信)消息发送类 天眼查数据获取 |
| | | */ |
| | | class notice_model extends model{ |
| | | |
| | | class notice_model extends model { |
| | | |
| | | private $smtpClass = null; |
| | | |
| | | private function _getSmtp($serverId=''){ |
| | | if($this->config['sy_email_online']==1){ |
| | | include_once(LIB_PATH.'email.class.php'); |
| | | //获取邮件服务器缓存 |
| | | include(PLUS_PATH.'emailconfig.cache.php'); |
| | | //随机选择一组邮件服务器作为当前发信服务器 |
| | | if($serverId){ |
| | | if(isset($emailconfig) && is_array($emailconfig)){ |
| | | foreach($emailconfig as $value){ |
| | | if($value['id'] == $serverId){ |
| | | $emailConfig = $value; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }else{ |
| | | if(isset($emailconfig) && count($emailconfig)>0){ |
| | | $rand = array_rand($emailconfig,1); |
| | | $emailConfig = $emailconfig[$rand]; |
| | | } |
| | | } |
| | | if($emailConfig['smtpserver'] && $emailConfig['smtpuser'] && $emailConfig['smtppass']){ |
| | | if($emailConfig['smtpport']=='465'){ |
| | | $smtpserver = 'ssl://'.$emailConfig['smtpserver']; |
| | | $smtpserverport = '465'; |
| | | }else{ |
| | | $smtpserver = $emailConfig['smtpserver']; |
| | | $smtpserverport = '25'; |
| | | } |
| | | return new smtp($smtpserver,$smtpserverport,true,$emailConfig['smtpuser'],$emailConfig['smtppass'],$emailConfig['smtpnick']); |
| | | }else{ |
| | | return false; |
| | | } |
| | | } |
| | | if($this->config['sy_email_online']==2){ |
| | | include_once(LIB_PATH.'aliyunemail.class.php'); |
| | | $accesskey=$this->config['accesskey']; //accessKey |
| | | $accesssecret=$this->config['accesssecret']; //accessSecret |
| | | $accountname=$this->config['ali_email']; //控制台创建的发信地址 |
| | | $fromalias=$this->config['ali_name']; //发信人昵称 |
| | | $tagname=$this->config['ali_tag']; //控制台创建的标签 |
| | | |
| | | return new aliyun_sendemail($accesskey,$accesssecret,$accountname,$fromalias,$tagname); |
| | | } |
| | | private function _getSmtp($serverId = '') { |
| | | if ($this->config['sy_email_online'] == 1) { |
| | | include_once(LIB_PATH . 'email.class.php'); |
| | | //获取邮件服务器缓存 |
| | | include(PLUS_PATH . 'emailconfig.cache.php'); |
| | | //随机选择一组邮件服务器作为当前发信服务器 |
| | | if ($serverId) { |
| | | if (isset($emailconfig) && is_array($emailconfig)) { |
| | | foreach ($emailconfig as $value) { |
| | | if ($value['id'] == $serverId) { |
| | | $emailConfig = $value; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | if (isset($emailconfig) && count($emailconfig) > 0) { |
| | | $rand = array_rand($emailconfig, 1); |
| | | $emailConfig = $emailconfig[$rand]; |
| | | } |
| | | } |
| | | if ($emailConfig['smtpserver'] && $emailConfig['smtpuser'] && $emailConfig['smtppass']) { |
| | | if ($emailConfig['smtpport'] == '465') { |
| | | $smtpserver = 'ssl://' . $emailConfig['smtpserver']; |
| | | $smtpserverport = '465'; |
| | | } else { |
| | | $smtpserver = $emailConfig['smtpserver']; |
| | | $smtpserverport = '25'; |
| | | } |
| | | return new smtp($smtpserver, $smtpserverport, true, $emailConfig['smtpuser'], $emailConfig['smtppass'], $emailConfig['smtpnick']); |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | if ($this->config['sy_email_online'] == 2) { |
| | | include_once(LIB_PATH . 'aliyunemail.class.php'); |
| | | $accesskey = $this->config['accesskey']; //accessKey |
| | | $accesssecret = $this->config['accesssecret']; //accessSecret |
| | | $accountname = $this->config['ali_email']; //控制台创建的发信地址 |
| | | $fromalias = $this->config['ali_name']; //发信人昵称 |
| | | $tagname = $this->config['ali_tag']; //控制台创建的标签 |
| | | |
| | | return new aliyun_sendemail($accesskey, $accesssecret, $accountname, $fromalias, $tagname); |
| | | } |
| | | } |
| | | |
| | | private function addErrorLog($uid,$type='',$content) { |
| | | private function addErrorLog($uid, $type = '', $content) { |
| | | |
| | | require_once ('errlog.model.php'); |
| | | require_once('errlog.model.php'); |
| | | |
| | | $ErrlogM = new errlog_model($this->db, $this->def); |
| | | |
| | | return $ErrlogM -> addErrorLog($uid, $type, $content); |
| | | return $ErrlogM->addErrorLog($uid, $type, $content); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取邮件、短信模板 |
| | | * @param array $data 传入参数 |
| | | * @param array $data 传入参数 |
| | | * @param string $type 模板类型:email邮箱; msg短信 |
| | | * @return mixed |
| | | */ |
| | | public function getTpl($data, $type){ |
| | | $name = $type.$data['type']; |
| | | public function getTpl($data, $type) { |
| | | $name = $type . $data['type']; |
| | | |
| | | |
| | | $row = $this -> select_once('templates',array('name'=>$name)); |
| | | |
| | | if ($row){ |
| | | $tpl['title']=$this->_tpl($row['title'], $data); |
| | | $tpl['content']=$this->_tpl($row['content'], $data); |
| | | |
| | | $row = $this->select_once('templates', array('name' => $name)); |
| | | |
| | | if ($row) { |
| | | $tpl['title'] = $this->_tpl($row['title'], $data); |
| | | $tpl['content'] = $this->_tpl($row['content'], $data); |
| | | |
| | | return $tpl; |
| | | }else{ |
| | | } else { |
| | | return array('status' => -1, 'msg' => '信息模板有误,请联系管理员'); |
| | | } |
| | | } |
| | | |
| | | //替换模板中的变量 |
| | | private function _tpl($tpl, $data){ |
| | | private function _tpl($tpl, $data) { |
| | | unset($data['type']); |
| | | |
| | | $re = array("{webname}","{weburl}","{webtel}"); |
| | | $re2[] = $this->config['sy_webname']; |
| | | $re2[] = $this->config['sy_weburl']; |
| | | $re2[] = $this->config['sy_freewebtel']; |
| | | $tpl = str_replace($re,$re2,$tpl); |
| | | |
| | | foreach($data as $k=>$v){ |
| | | $tpl = str_replace("{".$k."}",$v,$tpl); |
| | | $re = array("{webname}", "{weburl}", "{webtel}"); |
| | | $re2[] = $this->config['sy_webname']; |
| | | $re2[] = $this->config['sy_weburl']; |
| | | $re2[] = $this->config['sy_freewebtel']; |
| | | $tpl = str_replace($re, $re2, $tpl); |
| | | |
| | | foreach ($data as $k => $v) { |
| | | $tpl = str_replace("{" . $k . "}", $v, $tpl); |
| | | } |
| | | return $tpl; |
| | | } |
| | | |
| | | |
| | | //判断数组的下标是否存在 |
| | | private function _isKey($key, $arr){ |
| | | if(array_key_exists($key, $arr) && trim($arr[$key]) != ''){ |
| | | private function _isKey($key, $arr) { |
| | | if (array_key_exists($key, $arr) && trim($arr[$key]) != '') { |
| | | return trim($arr[$key]); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 传入 email地址、主题、内容等参数,简单发送email方法 |
| | | * |
| | |
| | | * @param string $data ['content'] email正文内容 |
| | | * @return array |
| | | */ |
| | | public function sendEmail($data){ |
| | | if($this->config['sy_email_online']==1){ |
| | | if(!$this->smtpClass){ |
| | | $serverId = array_key_exists('smtpServerId', $data) ? $data['smtpServerId'] : ''; |
| | | $this->smtpClass = $this->_getSmtp($serverId); |
| | | } |
| | | if(!$this->smtpClass){ |
| | | return array('status' => -1, 'msg' => '还没有配置邮箱,请联系管理员!'); |
| | | } |
| | | |
| | | if($this->_isKey('email', $data) == false || CheckRegEmail($data['email']) == false){ |
| | | return array('status' => -1, 'msg' => 'email地址错误'); |
| | | } |
| | | |
| | | if(!$this->_isKey('subject', $data) || !$this->_isKey('content', $data)){ |
| | | return array('status' => -1, 'msg' => 'email主题/正文为空'); |
| | | } |
| | | |
| | | $cc = isset($data['cc']) ? $data['cc'] : ''; |
| | | $bcc = isset($data['bcc']) ? $data['bcc'] : ''; |
| | | $additional_headers = isset($data['additional_headers']) ? $data['additional_headers'] : ''; |
| | | |
| | | $sendid = $this->smtpClass->sendmail($data['email'],$data['subject'],$data['content'],'HTML',$cc,$bcc,$additional_headers); |
| | | if($sendid){ |
| | | $state = '1'; |
| | | $retval = array('status' => 1, 'msg' => 'email发送成功!'); |
| | | }else{ |
| | | $state = '0'; |
| | | $retval = array('status' => -1, 'msg' => 'email发送失败!'); |
| | | $this->addErrorLog($data['uid'], 9,'email发送失败!'); |
| | | } |
| | | } |
| | | |
| | | if($this->config['sy_email_online']==2){ |
| | | if(!$this->smtpClass){ |
| | | $this->smtpClass = $this->_getSmtp(); |
| | | } |
| | | if(!$this->smtpClass){ |
| | | return array('status' => -1, 'msg' => '还没有配置邮箱,请联系管理员!'); |
| | | } |
| | | $sendid = $this->smtpClass->sendemail($data['email'],$data['subject'],$data['content']); |
| | | if($sendid){ |
| | | $state = '1'; |
| | | $retval = array('status' => 1, 'msg' => 'email发送成功!'); |
| | | }else{ |
| | | $state = '0'; |
| | | $retval = array('status' => -1, 'msg' => 'email发送失败!'); |
| | | $this->addErrorLog($data['uid'], 9,'email发送失败!'); |
| | | } |
| | | } |
| | | public function sendEmail($data) { |
| | | if ($this->config['sy_email_online'] == 1) { |
| | | if (!$this->smtpClass) { |
| | | $serverId = array_key_exists('smtpServerId', $data) ? $data['smtpServerId'] : ''; |
| | | $this->smtpClass = $this->_getSmtp($serverId); |
| | | } |
| | | if (!$this->smtpClass) { |
| | | return array('status' => -1, 'msg' => '还没有配置邮箱,请联系管理员!'); |
| | | } |
| | | |
| | | if ($this->_isKey('email', $data) == false || CheckRegEmail($data['email']) == false) { |
| | | return array('status' => -1, 'msg' => 'email地址错误'); |
| | | } |
| | | |
| | | if (!$this->_isKey('subject', $data) || !$this->_isKey('content', $data)) { |
| | | return array('status' => -1, 'msg' => 'email主题/正文为空'); |
| | | } |
| | | |
| | | $cc = isset($data['cc']) ? $data['cc'] : ''; |
| | | $bcc = isset($data['bcc']) ? $data['bcc'] : ''; |
| | | $additional_headers = isset($data['additional_headers']) ? $data['additional_headers'] : ''; |
| | | |
| | | $sendid = $this->smtpClass->sendmail($data['email'], $data['subject'], $data['content'], 'HTML', $cc, $bcc, $additional_headers); |
| | | if ($sendid) { |
| | | $state = '1'; |
| | | $retval = array('status' => 1, 'msg' => 'email发送成功!'); |
| | | } else { |
| | | $state = '0'; |
| | | $retval = array('status' => -1, 'msg' => 'email发送失败!'); |
| | | $this->addErrorLog($data['uid'], 9, 'email发送失败!'); |
| | | } |
| | | } |
| | | |
| | | if ($this->config['sy_email_online'] == 2) { |
| | | if (!$this->smtpClass) { |
| | | $this->smtpClass = $this->_getSmtp(); |
| | | } |
| | | if (!$this->smtpClass) { |
| | | return array('status' => -1, 'msg' => '还没有配置邮箱,请联系管理员!'); |
| | | } |
| | | $sendid = $this->smtpClass->sendemail($data['email'], $data['subject'], $data['content']); |
| | | if ($sendid) { |
| | | $state = '1'; |
| | | $retval = array('status' => 1, 'msg' => 'email发送成功!'); |
| | | } else { |
| | | $state = '0'; |
| | | $retval = array('status' => -1, 'msg' => 'email发送失败!'); |
| | | $this->addErrorLog($data['uid'], 9, 'email发送失败!'); |
| | | } |
| | | } |
| | | |
| | | //如果email正文内容太多,允许保存其他简短内容到数据表email_msg |
| | | $tbContent = isset($data['tbContent']) ? $data['tbContent'] : $data['content']; |
| | | $tbContent = isset($data['tbContent']) ? $data['tbContent'] : $data['content']; |
| | | |
| | | $email_msg = array( |
| | | 'uid' => $data['uid'], |
| | | 'cuid' => isset($data['cuid']) ? $data['cuid'] : 0, |
| | | 'email' => $data['email'], |
| | | 'title' => $data['subject'], |
| | | 'content' => $tbContent , |
| | | 'state' => $state, |
| | | 'ctime' => time(), |
| | | 'smtpserver' => $this->smtpClass->user |
| | | $email_msg = array( |
| | | 'uid' => $data['uid'], |
| | | 'cuid' => isset($data['cuid']) ? $data['cuid'] : 0, |
| | | 'email' => $data['email'], |
| | | 'title' => $data['subject'], |
| | | 'content' => $tbContent, |
| | | 'state' => $state, |
| | | 'ctime' => time(), |
| | | 'smtpserver' => $this->smtpClass->user |
| | | ); |
| | | if($data['email'] && !isset($data['repeat'])){ |
| | | $this -> insert_into('email_msg',$email_msg); |
| | | if ($data['email'] && !isset($data['repeat'])) { |
| | | $this->insert_into('email_msg', $email_msg); |
| | | } |
| | | return $retval; |
| | | } |
| | | function insertEmail($data){ |
| | | return $this -> insert_into('email_msg',$data); |
| | | |
| | | function insertEmail($data) { |
| | | return $this->insert_into('email_msg', $data); |
| | | } |
| | | function insertMsg($data){ |
| | | return $this -> insert_into('moblie_msg',$data); |
| | | |
| | | function insertMsg($data) { |
| | | return $this->insert_into('moblie_msg', $data); |
| | | } |
| | | |
| | | /** |
| | | * @desc 根据业务类型,判断后台设置是否开启该类型email提醒,选择设定好的email模板,发送指定类型的邮件 |
| | | * |
| | | * @param string $data['type'] 发送email的类型: |
| | | * @param string $data ['type'] 发送email的类型: |
| | | * reg注册,yqms邀请面试,fkcg付款成功,zzshtg职位审核成功,sqzw申请职位,getpass找回密码,yqmshf回复面试邀请,login登录验证 |
| | | * 'birthday', |
| | | * 'webbirthday', |
| | |
| | | * $data包括email,moblie,$type |
| | | * email 要发送的邮箱用户 |
| | | * moblie要发送的手机用户 |
| | | * |
| | | * |
| | | */ |
| | | public function sendEmailType($data, $tpl = NULL) |
| | | { |
| | | if (! $this->_isKey('type', $data) || ! $this->_isKey('sy_email_'.$data['type'], $this->config) || $this->config['sy_email_'.$data['type']] != 1) { |
| | | public function sendEmailType($data, $tpl = NULL) { |
| | | if (!$this->_isKey('type', $data) || !$this->_isKey('sy_email_' . $data['type'], $this->config) || $this->config['sy_email_' . $data['type']] != 1) { |
| | | return array( |
| | | 'status' => - 1, |
| | | 'msg' => '未开启email提醒,请联系管理员!(code:' . $data['type'] . ')' |
| | | 'status' => -1, |
| | | 'msg' => '未开启email提醒,请联系管理员!(code:' . $data['type'] . ')' |
| | | ); |
| | | } |
| | | // 邮件内容,如发送的内容相同,可以先把内容处理好传入,减少数据处理 |
| | | if (! $tpl) { |
| | | if (!$tpl) { |
| | | $tpl = $this->getTpl($data, 'email'); |
| | | if (isset($tpl['status'])) { |
| | | return $tpl; |
| | |
| | | |
| | | return $this->sendEmail($data); |
| | | } |
| | | |
| | | private function postSMS($type="msgsend",$data=''){ |
| | | |
| | | private function postSMS($type = "msgsend", $data = '') { |
| | | $sing = $this->config['sy_msg_appsing']; |
| | | $data['content'] = str_replace(array(" "," ","\t","\n","\r"),array("","","","",""),$data['content']); |
| | | $url='http://api.smsbao.com/sms'; |
| | | $url.='?u='.$data['appkey'].'&p='.md5($data['appsecret']).'&m='.$data['phone'].'&c=【'.$sing.'】'.$data['content']; |
| | | if(function_exists('file_get_contents')){ |
| | | $data['content'] = str_replace(array(" ", " ", "\t", "\n", "\r"), array("", "", "", "", ""), $data['content']); |
| | | $url = 'http://api.smsbao.com/sms'; |
| | | $url .= '?u=' . $data['appkey'] . '&p=' . md5($data['appsecret']) . '&m=' . $data['phone'] . '&c=【' . $sing . '】' . $data['content']; |
| | | if (function_exists('file_get_contents')) { |
| | | $file_contents = file_get_contents($url); |
| | | }else{ |
| | | } else { |
| | | $ch = curl_init(); |
| | | $timeout = 5; |
| | | curl_setopt ($ch, CURLOPT_URL, $url); |
| | | curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); |
| | | curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); |
| | | curl_setopt($ch, CURLOPT_URL, $url); |
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
| | | curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); |
| | | $file_contents = curl_exec($ch); |
| | | curl_close($ch); |
| | | } |
| | | return $file_contents; |
| | | } |
| | | |
| | | private function checkPhone($phone){ |
| | | |
| | | |
| | | $url='https://u.phpyun.com/phone'; |
| | | |
| | | $url.='?appSecret='.$this -> config['sy_kh_appsecret'].'&appKey='.$this -> config['sy_kh_appkey'].'&phone='.$phone; |
| | | if (extension_loaded('curl')){ |
| | | $file_contents = CurlGet($url); |
| | | |
| | | }else if(function_exists('file_get_contents')){ |
| | | $file_contents = file_get_contents($url); |
| | | } |
| | | if($file_contents){ |
| | | $msgInfo = json_decode($file_contents,true); |
| | | } |
| | | |
| | | |
| | | |
| | | private function checkPhone($phone) { |
| | | |
| | | |
| | | $url = ''; |
| | | |
| | | $url .= '?appSecret=' . $this->config['sy_kh_appsecret'] . '&appKey=' . $this->config['sy_kh_appkey'] . '&phone=' . $phone; |
| | | if (extension_loaded('curl')) { |
| | | $file_contents = CurlGet($url); |
| | | |
| | | } else if (function_exists('file_get_contents')) { |
| | | $file_contents = file_get_contents($url); |
| | | } |
| | | if ($file_contents) { |
| | | $msgInfo = json_decode($file_contents, true); |
| | | } |
| | | |
| | | |
| | | return $msgInfo; |
| | | } |
| | | |
| | | /** |
| | | * $data['moblie'] / $data['mobile'] 手机号(必填) |
| | | * $data['content'] 短信内容(必填) |
| | | * |
| | | * (选填) 保存到moblie_msg表的字段: |
| | | * uid 接收人uid, |
| | | * cuid 发送人uid, |
| | | */ |
| | | public function sendSMS($data){ |
| | | if(!checkMsgOpen($this -> config)){ |
| | | return array('status' => -1, 'msg' => '还没有配置短信,请联系管理员!'); |
| | | } |
| | | |
| | | /** |
| | | * $data['moblie'] / $data['mobile'] 手机号(必填) |
| | | * $data['content'] 短信内容(必填) |
| | | * |
| | | * (选填) 保存到moblie_msg表的字段: |
| | | * uid 接收人uid, |
| | | * cuid 发送人uid, |
| | | */ |
| | | public function sendSMS($data) { |
| | | if (!checkMsgOpen($this->config)) { |
| | | return array('status' => -1, 'msg' => '还没有配置短信,请联系管理员!'); |
| | | } |
| | | |
| | | $data['mobile'] = $data['moblie'] ? $data['moblie'] : $data['mobile']; |
| | | if($this->_isKey('mobile', $data) == false || CheckMobile($data['mobile']) == false){ |
| | | if ($this->_isKey('mobile', $data) == false || CheckMobile($data['mobile']) == false) { |
| | | return array('status' => -1, 'msg' => '手机号错误'); |
| | | } |
| | | if($this->config['sy_web_mobile']!=''){ |
| | | $regnamer=@explode(';',$this->config['sy_web_mobile']); |
| | | if(in_array($data['mobile'],$regnamer)){ |
| | | return array('status' => -1, 'msg' => '该手机号已被禁止使用'); |
| | | } |
| | | } |
| | | |
| | | if($this->_isKey('content', $data) == false || $data['content'] == ''){ |
| | | if ($this->config['sy_web_mobile'] != '') { |
| | | $regnamer = @explode(';', $this->config['sy_web_mobile']); |
| | | if (in_array($data['mobile'], $regnamer)) { |
| | | return array('status' => -1, 'msg' => '该手机号已被禁止使用'); |
| | | } |
| | | } |
| | | |
| | | if ($this->_isKey('content', $data) == false || $data['content'] == '') { |
| | | return array('status' => -1, 'msg' => '短信内容为空'); |
| | | } |
| | | |
| | | |
| | | //发送短信 |
| | | $row = array( |
| | | |
| | | 'appsecret' => $this->config['sy_msg_appsecret'], |
| | | 'appkey' => $this->config['sy_msg_appkey'], |
| | | 'appsing' => $this->config['sy_msg_appsing'], |
| | | 'phone' => $data['mobile'], |
| | | 'content' => $data['content'], |
| | | 'mid' => isset($data['mid']) ? $data['mid'] : '' |
| | | ); |
| | | |
| | | $location = ''; |
| | | |
| | | //进行空号检测 以及 归属地限制 |
| | | if($this -> config['sy_kh_isopen'] == '1' && in_array($data['type'],array('login','cert','regcode'))){ |
| | | |
| | | $checkInfo = $this -> checkPhone($data['mobile']); |
| | | $checkData = json_decode($checkInfo['data'],true); |
| | | |
| | | //检测出号码不为空号 |
| | | if($checkInfo['code'] == '200' && $checkData['phoneList']['phoneStatus']>0){ |
| | | |
| | | $location = $checkData['phoneList']['province'] . '-' . $checkData['phoneList']['city']; |
| | | |
| | | //检测归属地 |
| | | if($this -> config['sy_kh_city'] && $checkData['phoneList']['province']!='未知' && $checkData['phoneList']['city']!='未知'){ |
| | | |
| | | $re['code'] = '502';//归属地检测失败 |
| | | $re['message'] = '号码检测有误!'; |
| | | |
| | | $kh_province = str_replace(",",",",$this -> config['sy_kh_city']); |
| | | $kh_province_arr = explode(',',$kh_province); |
| | | |
| | | foreach($kh_province_arr as $key => $value) |
| | | { |
| | | $kh_city = @explode('/',$value); |
| | | |
| | | //设定市级地区的情况下优先判断 |
| | | if((!empty($kh_city[1]) && strpos($checkData['phoneList']['city'],$kh_city[1])!==false) || (empty($kh_city[1]) && strpos($checkData['phoneList']['province'],$kh_city[0])!==false)){ |
| | | |
| | | unset($re); |
| | | break; |
| | | |
| | | } |
| | | } |
| | | } |
| | | }else{ |
| | | $re['code'] = '501';//空号检测失败 |
| | | $re['message'] = '号码检测有误!'; |
| | | } |
| | | } |
| | | if(!isset($re['code'])){ |
| | | $re= $this->postSMS('msgsend',$row); |
| | | } |
| | | //短信记录保存数据库 |
| | | $sql_data = array( |
| | | 'uid' => $data['uid'], |
| | | 'cuid' => isset($data['cuid']) ? $data['cuid'] : 0, |
| | | 'moblie' => $data['mobile'], |
| | | 'ctime' => time(), |
| | | 'content' => $data['content'], |
| | | 'port' => $data['port'], |
| | | 'location' => $location |
| | | |
| | | 'appsecret' => $this->config['sy_msg_appsecret'], |
| | | 'appkey' => $this->config['sy_msg_appkey'], |
| | | 'appsing' => $this->config['sy_msg_appsing'], |
| | | 'phone' => $data['mobile'], |
| | | 'content' => $data['content'], |
| | | 'mid' => isset($data['mid']) ? $data['mid'] : '' |
| | | ); |
| | | |
| | | if(trim($re) =='0'){ |
| | | $location = ''; |
| | | |
| | | //进行空号检测 以及 归属地限制 |
| | | if ($this->config['sy_kh_isopen'] == '1' && in_array($data['type'], array('login', 'cert', 'regcode'))) { |
| | | |
| | | $checkInfo = $this->checkPhone($data['mobile']); |
| | | $checkData = json_decode($checkInfo['data'], true); |
| | | |
| | | //检测出号码不为空号 |
| | | if ($checkInfo['code'] == '200' && $checkData['phoneList']['phoneStatus'] > 0) { |
| | | |
| | | $location = $checkData['phoneList']['province'] . '-' . $checkData['phoneList']['city']; |
| | | |
| | | //检测归属地 |
| | | if ($this->config['sy_kh_city'] && $checkData['phoneList']['province'] != '未知' && $checkData['phoneList']['city'] != '未知') { |
| | | |
| | | $re['code'] = '502';//归属地检测失败 |
| | | $re['message'] = '号码检测有误!'; |
| | | |
| | | $kh_province = str_replace(",", ",", $this->config['sy_kh_city']); |
| | | $kh_province_arr = explode(',', $kh_province); |
| | | |
| | | foreach ($kh_province_arr as $key => $value) { |
| | | $kh_city = @explode('/', $value); |
| | | |
| | | //设定市级地区的情况下优先判断 |
| | | if ((!empty($kh_city[1]) && strpos($checkData['phoneList']['city'], $kh_city[1]) !== false) || (empty($kh_city[1]) && strpos($checkData['phoneList']['province'], $kh_city[0]) !== false)) { |
| | | |
| | | unset($re); |
| | | break; |
| | | |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | $re['code'] = '501';//空号检测失败 |
| | | $re['message'] = '号码检测有误!'; |
| | | } |
| | | } |
| | | if (!isset($re['code'])) { |
| | | $re = $this->postSMS('msgsend', $row); |
| | | } |
| | | //短信记录保存数据库 |
| | | $sql_data = array( |
| | | 'uid' => $data['uid'], |
| | | 'cuid' => isset($data['cuid']) ? $data['cuid'] : 0, |
| | | 'moblie' => $data['mobile'], |
| | | 'ctime' => time(), |
| | | 'content' => $data['content'], |
| | | 'port' => $data['port'], |
| | | 'location' => $location |
| | | ); |
| | | |
| | | if (trim($re) == '0') { |
| | | //检查是否需要发送系统预警 |
| | | include_once('warning.model.php'); |
| | | |
| | | $warning = new warning_model($this->db,$this->def); |
| | | $warning = new warning_model($this->db, $this->def); |
| | | |
| | | $warning -> warning(5); |
| | | |
| | | $sql_data['state'] = 0; |
| | | $warning->warning(5); |
| | | |
| | | $sql_data['ip'] = fun_ip_get(); |
| | | $sql_data['state'] = 0; |
| | | |
| | | $sqlResult = $this -> insert_into('moblie_msg',$sql_data); |
| | | $sql_data['ip'] = fun_ip_get(); |
| | | |
| | | $sqlResult = $this->insert_into('moblie_msg', $sql_data); |
| | | |
| | | return array('status' => 1, 'msg' => '发送成功!'); |
| | | }else{ |
| | | $sql_data['state'] = $re['code']; |
| | | $this -> insert_into('moblie_msg',$sql_data); |
| | | |
| | | $content = '短信发送失败!手机号:'.$data['mobile'].',状态:'.$re['code']."," . $re['message']; |
| | | if ($re['code'] == '501'){ |
| | | } else { |
| | | $sql_data['state'] = $re['code']; |
| | | $this->insert_into('moblie_msg', $sql_data); |
| | | |
| | | $content = '短信发送失败!手机号:' . $data['mobile'] . ',状态:' . $re['code'] . "," . $re['message']; |
| | | if ($re['code'] == '501') { |
| | | // 记录空号检测失败,综合平台返回的错误原因 |
| | | $content .= $checkInfo['message']; |
| | | } |
| | | $this->addErrorLog($data['uid'], 8, $content); |
| | | return array('status' => -1, 'msg' => '发送失败!状态:'.$re['code']."," . $re['message']); |
| | | return array('status' => -1, 'msg' => '发送失败!状态:' . $re['code'] . "," . $re['message']); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param array $data 传入参数 |
| | | * |
| | | * @param array $data 传入参数 |
| | | * @param string $content 短信内容 |
| | | * @return number[]|string[] |
| | | */ |
| | | public function sendSMSType($data, $content=NULL){ |
| | | if(!$this->_isKey('type', $data) |
| | | || !$this->_isKey('sy_msg_'.$data['type'], $this->config) |
| | | || $this->config['sy_msg_'.$data['type']] !=1){ //是否后台设置了需要短信提醒 |
| | | return array('status' => -1, 'msg' => '未开启短信提醒,请联系管理员(code:msg'.$data['type'].')'); |
| | | public function sendSMSType($data, $content = NULL) { |
| | | if (!$this->_isKey('type', $data) |
| | | || !$this->_isKey('sy_msg_' . $data['type'], $this->config) |
| | | || $this->config['sy_msg_' . $data['type']] != 1) { //是否后台设置了需要短信提醒 |
| | | return array('status' => -1, 'msg' => '未开启短信提醒,请联系管理员(code:msg' . $data['type'] . ')'); |
| | | } |
| | | |
| | | //短信内容,如发送的内容相同,可以先把内容处理好传入,减少数据处理 |
| | | if (!$content){ |
| | | if (!$content) { |
| | | $tpl = $this->getTpl($data, 'msg'); |
| | | if (isset($tpl['status'])){ |
| | | if (isset($tpl['status'])) { |
| | | return $tpl; |
| | | } |
| | | $content = $tpl['content']; |
| | | } |
| | | |
| | | $data['content'] = $content; |
| | | |
| | | |
| | | return $this->sendSMS($data); |
| | | } |
| | | |
| | | public function getBusinessInfo($name){ |
| | | |
| | | if($this->config['sy_tyc_appkey'] && $this->config['sy_tyc_appsecret']){ |
| | | |
| | | public function getBusinessInfo($name) { |
| | | |
| | | if ($this->config['sy_tyc_appkey'] && $this->config['sy_tyc_appsecret']) { |
| | | //查询当前数据库中是否存在该名称 |
| | | $comNameNum = $this -> select_num('company',array('name'=>$name)); |
| | | |
| | | $comNameNum = $this->select_num('company', array('name' => $name)); |
| | | |
| | | //企业名称存在 |
| | | if($comNameNum > 0){ |
| | | $url='https://u.phpyun.com/company'; |
| | | |
| | | $url.='?appSecret='.$this->config['sy_tyc_appsecret'].'&appKey='.$this->config['sy_tyc_appkey']."&companyName=".$name; |
| | | if (extension_loaded('curl')){ |
| | | if ($comNameNum > 0) { |
| | | $url = 'https://u.phpyun.com/company'; |
| | | |
| | | $url .= '?appSecret=' . $this->config['sy_tyc_appsecret'] . '&appKey=' . $this->config['sy_tyc_appkey'] . "&companyName=" . $name; |
| | | if (extension_loaded('curl')) { |
| | | $file_contents = CurlGet($url); |
| | | }else if(function_exists('file_get_contents')){ |
| | | } else if (function_exists('file_get_contents')) { |
| | | $file_contents = file_get_contents($url); |
| | | } |
| | | $return = json_decode($file_contents,true); |
| | | |
| | | if(!empty($return['data'])){ |
| | | $tycData = json_decode($return['data'],true); |
| | | $Info = $tycData['result']; |
| | | |
| | | if($Info['estiblishTime']){ |
| | | $msectime = $Info['estiblishTime'] * 0.001; |
| | | if(strstr($msectime,'.')){ |
| | | sprintf('%01.3f',$msectime); |
| | | list($usec, $sec) = explode('.',$msectime); |
| | | $sec = str_pad($sec,3,'0',STR_PAD_RIGHT); |
| | | }else{ |
| | | $usec = $msectime; |
| | | $sec = '000'; |
| | | } |
| | | $est = date('Y-m-d',$usec); |
| | | $Info['estiblishTime'] =$est; |
| | | } |
| | | $return = json_decode($file_contents, true); |
| | | |
| | | if (!empty($return['data'])) { |
| | | $tycData = json_decode($return['data'], true); |
| | | $Info = $tycData['result']; |
| | | |
| | | if($Info['fromTime']){ |
| | | |
| | | $msectime = $Info['fromTime'] * 0.001; |
| | | if(strstr($msectime,'.')){ |
| | | sprintf('%01.3f',$msectime); |
| | | list($usec, $sec) = explode('.',$msectime); |
| | | $sec = str_pad($sec,3,'0',STR_PAD_RIGHT); |
| | | }else{ |
| | | if ($Info['estiblishTime']) { |
| | | $msectime = $Info['estiblishTime'] * 0.001; |
| | | if (strstr($msectime, '.')) { |
| | | sprintf('%01.3f', $msectime); |
| | | list($usec, $sec) = explode('.', $msectime); |
| | | $sec = str_pad($sec, 3, '0', STR_PAD_RIGHT); |
| | | } else { |
| | | $usec = $msectime; |
| | | $sec = '000'; |
| | | } |
| | | $est = date('Y-m-d',$usec); |
| | | $Info['fromTime'] =$est; |
| | | }else{ |
| | | $est = date('Y-m-d', $usec); |
| | | $Info['estiblishTime'] = $est; |
| | | } |
| | | |
| | | if ($Info['fromTime']) { |
| | | |
| | | $msectime = $Info['fromTime'] * 0.001; |
| | | if (strstr($msectime, '.')) { |
| | | sprintf('%01.3f', $msectime); |
| | | list($usec, $sec) = explode('.', $msectime); |
| | | $sec = str_pad($sec, 3, '0', STR_PAD_RIGHT); |
| | | } else { |
| | | $usec = $msectime; |
| | | $sec = '000'; |
| | | } |
| | | $est = date('Y-m-d', $usec); |
| | | $Info['fromTime'] = $est; |
| | | } else { |
| | | $Info['fromTime'] = '自创立起'; |
| | | } |
| | | if($Info['toTime']){ |
| | | $toTime=new DateTime('@'.substr($Info['toTime'],0,10)); |
| | | |
| | | $toTime->setTimezone(new DateTimeZone('PRC')); |
| | | $Info['toTime'] = $toTime->format('Y-m-d'); |
| | | }else{ |
| | | $Info['toTime'] = '长期'; |
| | | } |
| | | if ($Info['toTime']) { |
| | | $toTime = new DateTime('@' . substr($Info['toTime'], 0, 10)); |
| | | |
| | | $toTime->setTimezone(new DateTimeZone('PRC')); |
| | | $Info['toTime'] = $toTime->format('Y-m-d'); |
| | | } else { |
| | | $Info['toTime'] = '长期'; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return array('content'=>$Info); |
| | | |
| | | return array('content' => $Info); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @desc 短信验证码时效性 |
| | | * @param array $data |
| | | * @param array $data |
| | | * @return boolean |
| | | */ |
| | | public function checkTime($data) |
| | | { |
| | | $cert_validity = $this->config['moblie_codetime'] * 60; // 验证码有效时间 |
| | | $time = time(); |
| | | $ctime = bcsub($time, $data); |
| | | public function checkTime($data) { |
| | | $cert_validity = $this->config['moblie_codetime'] * 60; // 验证码有效时间 |
| | | $time = time(); |
| | | $ctime = bcsub($time, $data); |
| | | |
| | | if ($ctime <= $cert_validity) { |
| | | |
| | | |
| | | return true; |
| | | } else { |
| | | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发送手机短信/邮件验证码 |
| | | * @param string $sended 手机号/邮箱 |
| | |
| | | * @param string $port 端口:1-PC;2-WAP;5-ADMIN |
| | | * @return array|number[]|string[] |
| | | */ |
| | | public function sendCode($sended, $type, $port='', $user = array(), $length = 6, $validity = 120, $kind = 'msg') |
| | | { |
| | | |
| | | $time = time(); |
| | | $overtime = $time - $validity; |
| | | $today = strtotime('today'); |
| | | $ip = fun_ip_get(); |
| | | $code = gt_Generate_code($length); //验证码 |
| | | |
| | | if ($kind == 'msg'){ |
| | | |
| | | if(!checkMsgOpen($this -> config)){ |
| | | |
| | | return array('error'=> 107, 'msg'=> '网站没有配置短信,请联系管理员!'); |
| | | |
| | | } |
| | | |
| | | $ip = fun_ip_get(); |
| | | |
| | | $ipnum = $this -> select_num('moblie_msg', array('ip'=>$ip , 'ctime' => array('>', strtotime(date('Y-m-d'))))); |
| | | |
| | | if($ipnum >= $this->config['ip_msgnum']){ |
| | | |
| | | return array('error'=> 107, 'msg'=> '当前IP短信发送受限!'); |
| | | |
| | | } |
| | | |
| | | $num = $this -> select_num('moblie_msg', array('moblie' => $sended , 'ctime' => array('>',strtotime(date('Y-m-d'))))); |
| | | |
| | | if($num >= $this->config['moblie_msgnum']){ |
| | | |
| | | return array('error'=> 107, 'msg'=> '请不要频繁发送!'); |
| | | |
| | | } |
| | | |
| | | if (CheckMobile($sended) == false){ |
| | | |
| | | return array('error'=> 106, 'msg'=> '手机号码格式错误'); |
| | | |
| | | } |
| | | |
| | | if ($type == 'getpass'){ |
| | | |
| | | $member = $this -> select_once('member',array('moblie'=>$sended),'`uid`,`username` as `name`, `usertype`'); |
| | | |
| | | if (!empty($member)){ |
| | | |
| | | $user = array( |
| | | 'uid' => $member['uid'], |
| | | 'usertype' => $member['usertype'], |
| | | 'name' => $member['name'] |
| | | ); |
| | | |
| | | }else{ |
| | | |
| | | return array('error'=> 105, 'msg'=> '该手机尚未注册'); |
| | | |
| | | } |
| | | |
| | | $lastSend = $this -> select_once('company_cert',array('check' => $sended, 'type' => 7 ,'orderby'=>'id,desc'),'`ctime`,`type`'); |
| | | |
| | | }else { |
| | | |
| | | $lastSend = $this -> select_once('company_cert',array('check' => $sended, 'type' => 2,'orderby'=>'id,desc'),'`ctime`,`type`'); |
| | | } |
| | | if($lastSend['ctime'] > $overtime){ |
| | | |
| | | return array('error' => 102, 'msg' => '两次发送间隔需超过'.$validity.'秒'); |
| | | |
| | | } |
| | | if ($type == 'cert'){ |
| | | |
| | | $certover = $time - ($this->config['cert_msgtime'] * 60); |
| | | |
| | | if ($lastSend['ctime'] > $certover){ |
| | | |
| | | return array('error' => 102, 'msg' => '手机认证短信发送间隔需超过'.$this->config['cert_msgtime'].'分钟'); |
| | | } |
| | | } |
| | | $sendToday = $this -> select_all('moblie_msg', array('moblie' => $sended, 'ctime' => array('>' , $today)), '`ip`'); |
| | | |
| | | if(count($sendToday) >= $this->config['moblie_msgnum']){ |
| | | |
| | | return array('error' => 103, 'msg' => '同一手机号一天最多发送'.$this->config['moblie_msgnum'].'条'); |
| | | |
| | | } |
| | | |
| | | $ipSendNum = 0; |
| | | |
| | | foreach ($sendToday as $v){ |
| | | if ($v['ip'] == $ip){ |
| | | $ipSendNum++; |
| | | } |
| | | } |
| | | if($ipSendNum >= $this->config['ip_msgnum']){ |
| | | |
| | | return array('error'=> 104, 'msg' => '同一IP一天最多发送'.$this->config['ip_msgnum'].'条'); |
| | | |
| | | } |
| | | $result = $this -> sendType($sended, $type, $code, 'msg', $user, $port); |
| | | |
| | | }elseif ($kind == 'email'){ |
| | | if (CheckRegEmail($sended) ==false){ |
| | | |
| | | return array('error'=> 101, 'msg'=> '邮箱格式错误'); |
| | | } |
| | | |
| | | if($this->config['sy_email_set']!="1"){ |
| | | return array('error'=> 107, 'msg'=> '网站邮件服务器暂不可用'); |
| | | } |
| | | |
| | | $num = $this->select_num("company_cert" , array('check'=>$sended , 'ctime'=>array('>',strtotime(date('Y-m-d')))) ); |
| | | if($num>=5){ |
| | | $data['errmsg'] = '请不要频繁发送邮件!'; |
| | | $data['error'] = 17; |
| | | echo json_encode($data);die; |
| | | } |
| | | |
| | | if ($type == 'getpass'){ |
| | | |
| | | $member = $this -> select_once('member',array('email'=>$sended),'`uid`,`username` as `name`, `usertype`'); |
| | | |
| | | if($this->config['sy_email_getpass']=="2"){ |
| | | |
| | | return array('error'=> 108, 'msg'=> '网站未开启邮件找回密码'); |
| | | } |
| | | |
| | | if ($member){ |
| | | $user = array( |
| | | 'uid' => $member['uid'], |
| | | 'usertype' => $member['usertype'], |
| | | 'name' => $member['name'] |
| | | ); |
| | | }else{ |
| | | |
| | | return array('error'=> 105, 'msg'=> '该邮箱尚未注册'); |
| | | } |
| | | |
| | | $num = $this -> select_num('company_cert',array('check'=>$sended,'type'=>7,'ctime'=>array('>',$today))); |
| | | |
| | | if($num >= 5){ |
| | | |
| | | return array('error'=> 106, 'msg'=> '请不要频繁发送邮件'); |
| | | } |
| | | $lastSend = $this -> select_once('company_cert',array('check'=>$sended,'type'=>7),'`ctime`,`type`'); |
| | | |
| | | $result = $this -> sendType($sended, $type, $code, 'email', $user); |
| | | } |
| | | } |
| | | |
| | | if($result['status'] != -1){ |
| | | |
| | | |
| | | $sendData = array( |
| | | 'uid' => intval($user['uid']), |
| | | 'status' => 0, |
| | | 'step' => 1, |
| | | 'check' => $sended, |
| | | 'check2' => $code, |
| | | 'ctime' => $time, |
| | | 'did' => $this -> config['did'], |
| | | 'statusbody' => $this -> codeType($type) |
| | | ); |
| | | // 7-找回密码,2-其他短信、邮件验证码 |
| | | if ($type == 'getpass'){ |
| | | $sendData['type'] = 7; |
| | | }else{ |
| | | $sendData['type'] = 2; |
| | | } |
| | | //只修改短信验证码相关的验证 |
| | | if($lastSend && ($lastSend['type'] == 2 || $lastSend['type'] == 7)){ |
| | | |
| | | if ($lastSend['type'] == 2){ |
| | | |
| | | $this -> update_once('company_cert', $sendData, array('check'=>$sended,'type'=>2)); |
| | | |
| | | }elseif ($lastSend['type'] == 7){ |
| | | |
| | | $this -> update_once('company_cert', $sendData, array('check'=>$sended,'type'=>7)); |
| | | } |
| | | |
| | | }else{ |
| | | |
| | | $this -> insert_into('company_cert', $sendData); |
| | | } |
| | | } |
| | | return array('error' => $result['status'], 'msg' => $result['msg']); |
| | | } |
| | | //按类别发送验证码 |
| | | private function sendType($sended, $type, $code, $kind = 'msg',$user = array(), $port = null){ |
| | | |
| | | $finfo = $this -> forsend($user); //用户信息 |
| | | |
| | | $data = array( |
| | | 'uid' => $finfo['uid'], |
| | | 'username' => $finfo['name'], |
| | | 'cuid' => $finfo['cuid'], |
| | | 'cname' => $finfo['cname'], |
| | | 'type' => $type, |
| | | 'code' => $code |
| | | ); |
| | | if ($kind == 'msg'){ |
| | | |
| | | $data['moblie'] = $sended; |
| | | $data['port'] = $port; |
| | | |
| | | $result = $this -> sendSMSType($data); |
| | | |
| | | }elseif ($kind == 'email'){ |
| | | |
| | | $data['email'] = $sended; |
| | | |
| | | $result = $this -> sendEmailType($data); |
| | | } |
| | | return $result; |
| | | } |
| | | //手机验证码类型 |
| | | private function codeType($type){ |
| | | $status = array( |
| | | 'login' => '手机登录验证码', |
| | | 'regcode' => '手机注册验证码', |
| | | 'cert' => '手机认证', |
| | | 'getpass' => '找回密码' |
| | | ); |
| | | } |
| | | //查询接收短信、邮件用户信息 |
| | | private function forsend($user){ |
| | | $info = array( |
| | | 'uid' => 0, |
| | | 'name' => '', |
| | | 'cuid' => 0, |
| | | 'cname' => '系统' |
| | | ); |
| | | if (!empty($user['uid'])){ |
| | | |
| | | if (!empty($user['name'])){ |
| | | |
| | | $info['uid'] = $user['uid']; |
| | | $info['name'] = $user['name']; |
| | | |
| | | }else { |
| | | |
| | | $info = $this -> select_once('member', array('uid' => $user['uid']),'`uid`, `username` as `name`'); |
| | | |
| | | } |
| | | } |
| | | return $info; |
| | | } |
| | | |
| | | public function sendCode($sended, $type, $port = '', $user = array(), $length = 6, $validity = 120, $kind = 'msg') { |
| | | |
| | | $time = time(); |
| | | $overtime = $time - $validity; |
| | | $today = strtotime('today'); |
| | | $ip = fun_ip_get(); |
| | | $code = gt_Generate_code($length); //验证码 |
| | | |
| | | if ($kind == 'msg') { |
| | | |
| | | if (!checkMsgOpen($this->config)) { |
| | | |
| | | return array('error' => 107, 'msg' => '网站没有配置短信,请联系管理员!'); |
| | | |
| | | } |
| | | |
| | | $ip = fun_ip_get(); |
| | | |
| | | $ipnum = $this->select_num('moblie_msg', array('ip' => $ip, 'ctime' => array('>', strtotime(date('Y-m-d'))))); |
| | | |
| | | if ($ipnum >= $this->config['ip_msgnum']) { |
| | | |
| | | return array('error' => 107, 'msg' => '当前IP短信发送受限!'); |
| | | |
| | | } |
| | | |
| | | $num = $this->select_num('moblie_msg', array('moblie' => $sended, 'ctime' => array('>', strtotime(date('Y-m-d'))))); |
| | | |
| | | if ($num >= $this->config['moblie_msgnum']) { |
| | | |
| | | return array('error' => 107, 'msg' => '请不要频繁发送!'); |
| | | |
| | | } |
| | | |
| | | if (CheckMobile($sended) == false) { |
| | | |
| | | return array('error' => 106, 'msg' => '手机号码格式错误'); |
| | | |
| | | } |
| | | |
| | | if ($type == 'getpass') { |
| | | |
| | | $member = $this->select_once('member', array('moblie' => $sended), '`uid`,`username` as `name`, `usertype`'); |
| | | |
| | | if (!empty($member)) { |
| | | |
| | | $user = array( |
| | | 'uid' => $member['uid'], |
| | | 'usertype' => $member['usertype'], |
| | | 'name' => $member['name'] |
| | | ); |
| | | |
| | | } else { |
| | | |
| | | return array('error' => 105, 'msg' => '该手机尚未注册'); |
| | | |
| | | } |
| | | |
| | | $lastSend = $this->select_once('company_cert', array('check' => $sended, 'type' => 7, 'orderby' => 'id,desc'), '`ctime`,`type`'); |
| | | |
| | | } else { |
| | | |
| | | $lastSend = $this->select_once('company_cert', array('check' => $sended, 'type' => 2, 'orderby' => 'id,desc'), '`ctime`,`type`'); |
| | | } |
| | | if ($lastSend['ctime'] > $overtime) { |
| | | |
| | | return array('error' => 102, 'msg' => '两次发送间隔需超过' . $validity . '秒'); |
| | | |
| | | } |
| | | if ($type == 'cert') { |
| | | |
| | | $certover = $time - ($this->config['cert_msgtime'] * 60); |
| | | |
| | | if ($lastSend['ctime'] > $certover) { |
| | | |
| | | return array('error' => 102, 'msg' => '手机认证短信发送间隔需超过' . $this->config['cert_msgtime'] . '分钟'); |
| | | } |
| | | } |
| | | $sendToday = $this->select_all('moblie_msg', array('moblie' => $sended, 'ctime' => array('>', $today)), '`ip`'); |
| | | |
| | | if (count($sendToday) >= $this->config['moblie_msgnum']) { |
| | | |
| | | return array('error' => 103, 'msg' => '同一手机号一天最多发送' . $this->config['moblie_msgnum'] . '条'); |
| | | |
| | | } |
| | | |
| | | $ipSendNum = 0; |
| | | |
| | | foreach ($sendToday as $v) { |
| | | if ($v['ip'] == $ip) { |
| | | $ipSendNum++; |
| | | } |
| | | } |
| | | if ($ipSendNum >= $this->config['ip_msgnum']) { |
| | | |
| | | return array('error' => 104, 'msg' => '同一IP一天最多发送' . $this->config['ip_msgnum'] . '条'); |
| | | |
| | | } |
| | | $result = $this->sendType($sended, $type, $code, 'msg', $user, $port); |
| | | |
| | | } elseif ($kind == 'email') { |
| | | if (CheckRegEmail($sended) == false) { |
| | | |
| | | return array('error' => 101, 'msg' => '邮箱格式错误'); |
| | | } |
| | | |
| | | if ($this->config['sy_email_set'] != "1") { |
| | | return array('error' => 107, 'msg' => '网站邮件服务器暂不可用'); |
| | | } |
| | | |
| | | $num = $this->select_num("company_cert", array('check' => $sended, 'ctime' => array('>', strtotime(date('Y-m-d'))))); |
| | | if ($num >= 5) { |
| | | $data['errmsg'] = '请不要频繁发送邮件!'; |
| | | $data['error'] = 17; |
| | | echo json_encode($data); |
| | | die; |
| | | } |
| | | |
| | | if ($type == 'getpass') { |
| | | |
| | | $member = $this->select_once('member', array('email' => $sended), '`uid`,`username` as `name`, `usertype`'); |
| | | |
| | | if ($this->config['sy_email_getpass'] == "2") { |
| | | |
| | | return array('error' => 108, 'msg' => '网站未开启邮件找回密码'); |
| | | } |
| | | |
| | | if ($member) { |
| | | $user = array( |
| | | 'uid' => $member['uid'], |
| | | 'usertype' => $member['usertype'], |
| | | 'name' => $member['name'] |
| | | ); |
| | | } else { |
| | | |
| | | return array('error' => 105, 'msg' => '该邮箱尚未注册'); |
| | | } |
| | | |
| | | $num = $this->select_num('company_cert', array('check' => $sended, 'type' => 7, 'ctime' => array('>', $today))); |
| | | |
| | | if ($num >= 5) { |
| | | |
| | | return array('error' => 106, 'msg' => '请不要频繁发送邮件'); |
| | | } |
| | | $lastSend = $this->select_once('company_cert', array('check' => $sended, 'type' => 7), '`ctime`,`type`'); |
| | | |
| | | $result = $this->sendType($sended, $type, $code, 'email', $user); |
| | | } |
| | | } |
| | | |
| | | if ($result['status'] != -1) { |
| | | |
| | | |
| | | $sendData = array( |
| | | 'uid' => intval($user['uid']), |
| | | 'status' => 0, |
| | | 'step' => 1, |
| | | 'check' => $sended, |
| | | 'check2' => $code, |
| | | 'ctime' => $time, |
| | | 'did' => $this->config['did'], |
| | | 'statusbody' => $this->codeType($type) |
| | | ); |
| | | // 7-找回密码,2-其他短信、邮件验证码 |
| | | if ($type == 'getpass') { |
| | | $sendData['type'] = 7; |
| | | } else { |
| | | $sendData['type'] = 2; |
| | | } |
| | | //只修改短信验证码相关的验证 |
| | | if ($lastSend && ($lastSend['type'] == 2 || $lastSend['type'] == 7)) { |
| | | |
| | | if ($lastSend['type'] == 2) { |
| | | |
| | | $this->update_once('company_cert', $sendData, array('check' => $sended, 'type' => 2)); |
| | | |
| | | } elseif ($lastSend['type'] == 7) { |
| | | |
| | | $this->update_once('company_cert', $sendData, array('check' => $sended, 'type' => 7)); |
| | | } |
| | | |
| | | } else { |
| | | |
| | | $this->insert_into('company_cert', $sendData); |
| | | } |
| | | } |
| | | return array('error' => $result['status'], 'msg' => $result['msg']); |
| | | } |
| | | |
| | | //按类别发送验证码 |
| | | private function sendType($sended, $type, $code, $kind = 'msg', $user = array(), $port = null) { |
| | | |
| | | $finfo = $this->forsend($user); //用户信息 |
| | | |
| | | $data = array( |
| | | 'uid' => $finfo['uid'], |
| | | 'username' => $finfo['name'], |
| | | 'cuid' => $finfo['cuid'], |
| | | 'cname' => $finfo['cname'], |
| | | 'type' => $type, |
| | | 'code' => $code |
| | | ); |
| | | if ($kind == 'msg') { |
| | | |
| | | $data['moblie'] = $sended; |
| | | $data['port'] = $port; |
| | | |
| | | $result = $this->sendSMSType($data); |
| | | |
| | | } elseif ($kind == 'email') { |
| | | |
| | | $data['email'] = $sended; |
| | | |
| | | $result = $this->sendEmailType($data); |
| | | } |
| | | return $result; |
| | | } |
| | | |
| | | //手机验证码类型 |
| | | private function codeType($type) { |
| | | $status = array( |
| | | 'login' => '手机登录验证码', |
| | | 'regcode' => '手机注册验证码', |
| | | 'cert' => '手机认证', |
| | | 'getpass' => '找回密码' |
| | | ); |
| | | } |
| | | |
| | | //查询接收短信、邮件用户信息 |
| | | private function forsend($user) { |
| | | $info = array( |
| | | 'uid' => 0, |
| | | 'name' => '', |
| | | 'cuid' => 0, |
| | | 'cname' => '系统' |
| | | ); |
| | | if (!empty($user['uid'])) { |
| | | |
| | | if (!empty($user['name'])) { |
| | | |
| | | $info['uid'] = $user['uid']; |
| | | $info['name'] = $user['name']; |
| | | |
| | | } else { |
| | | |
| | | $info = $this->select_once('member', array('uid' => $user['uid']), '`uid`, `username` as `name`'); |
| | | |
| | | } |
| | | } |
| | | return $info; |
| | | } |
| | | |
| | | /** |
| | | * @desc 极验验证 |
| | | * @param $authcode |
| | | * @param $tag |
| | | * @return array |
| | | */ |
| | | function jycheck($authcode, $tag) |
| | | { |
| | | |
| | | $image = false; |
| | | function jycheck($authcode, $tag) { |
| | | |
| | | $image = false; |
| | | session_start(); |
| | | if (!empty($tag)) { |
| | | if (strpos($this->config['code_web'], $tag) !== false) { |
| | | if ($this->config['code_kind'] > 2) { |
| | | |
| | | $check = verifytoken($this->config); |
| | | |
| | | |
| | | $check = verifytoken($this->config); |
| | | |
| | | if ($check['code'] != '200') { |
| | | |
| | | |
| | | return array('error' => 107, 'msg' => $check['msg']); |
| | | } |
| | | } else { |
| | | |
| | | $image = true; |
| | | |
| | | $image = true; |
| | | } |
| | | } |
| | | } else { |
| | | |
| | | $image = true; |
| | | |
| | | $image = true; |
| | | } |
| | | if ($image) { |
| | | if (md5(strtolower(trim($authcode))) != $_SESSION['authcode'] || trim($authcode) == '') { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | ?> |