pluginPath=rtrim($pluginPath,'/\\').DIRECTORY_SEPARATOR; $this->pluginUrl=rtrim($pluginUrl,'/\\').'/'; $this->openForm=$openForm?true:false; $this->charset=strtolower($charset); $langFile=$this->pluginPath.'skycaiji2cms/lang.php'; if(file_exists($langFile)){ $this->pluginLang=include $langFile; } $this->static=array( 'css'=>$this->pluginUrl.'skycaiji2cms/css.css' ); } //表单是post提交 public function formIsPost(){ $sub=$this->doGetPost('formsub'); if(!empty($sub)){ return true; }else{ return false; } } //表单提交 public function formPost(){ $data=array( 'apikey'=>$this->doGetPost('apikey'), 'author'=>$this->doGetPost('author'), 'apitype'=>$this->doGetPost('apitype') ); if(empty($data['author'])){ $this->doError($this->pluginLang['empty_author']); } if(empty($data['apikey'])){ $this->doError($this->pluginLang['empty_apikey']); } $this->doFormPost($data); } //表单html页面 public function formView(){ $this->pluginConfig=$this->setPluginConfig($this->pluginConfig); $scj2cms=$this; include $this->pluginPath.'skycaiji2cms/form.php'; } //接口提交 public function apiPost(){ if(strtolower($_SERVER['REQUEST_METHOD'])!='post'){ $this->returnJson(0,$this->pluginLang['error_request']); } $this->pluginConfig=$this->setPluginConfig($this->pluginConfig); if(empty($this->pluginConfig)){ $this->returnJson(0,$this->pluginLang['empty_plugin_config']); } if(empty($this->pluginConfig['author'])){ $this->returnJson(0,$this->pluginLang['empty_author']); } if(empty($this->pluginConfig['apikey'])){ $this->returnJson(0,$this->pluginLang['empty_apikey']); } if(empty($this->pluginConfig['apitype'])){ //普通 if($_GET['apikey']!=md5($this->pluginConfig['apikey'])){ $this->returnJson(0,$this->pluginLang['error_apikey']); } }elseif($this->pluginConfig['apitype']=='safe'){ //安全 $apiTime=$this->doGetPost('api_time'); $apiTime=intval($apiTime); $apiSign=$this->doGetPost('api_sign'); if($apiSign!=md5($apiTime.$this->pluginConfig['apikey'])){ $this->returnJson(0,$this->pluginLang['error_api_sign']); }elseif(time()-$apiTime>600){ $this->returnJson(0,$this->pluginLang['error_timeout'].date('Y-m-d H:i:s',$apiTime)); } }else{ $this->returnJson(0,$this->pluginLang['error_apitype']); } $this->doApiPost(); } public function returnJson($id,$error='',$target='',$desc=''){ //输出json数据 ob_clean(); $data=array( 'id'=>$id, 'target'=>$target, 'desc'=>$desc, 'error'=>$error, ); if($data['error']){ $data['error']=$this->pluginLang['error_return'].$data['error']; } if($this->charset!='utf-8'){ foreach ($data as $k=>$v){ $data[$k]=iconv($this->charset,'utf-8'.'//IGNORE',$v); } } header('content-type:application/json;charset=utf-8'); $data=json_encode($data); exit($data); } //随机一行 public function randLine($str){ $list=array(); if($str&&preg_match_all('/[^\r\n]+/',$str,$list)){ $list=$list[0]; $list=array_filter($list); $list=array_values($list); }else{ $list=array(); } $rand=array_rand($list,1); $rand=$list[$rand]; return $rand; } public function curl($url,$headers=array(),$options=array(),$postData=null){ $headers=is_array($headers)?$headers:array(); $options=is_array($options)?$options:array(); $options['timeout']=intval($options['timeout']); $options['timeout']=$options['timeout']>0?$options['timeout']:20;//连接超时 $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_TIMEOUT, $options['timeout'] ); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT , 10 );//响应超时 curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 1 ); if($options['nobody']){ //不返回正文 curl_setopt($ch, CURLOPT_NOBODY, true); } if($options['useragent']){ //浏览器标识 curl_setopt($ch, CURLOPT_USERAGENT, $options['useragent']); } //忽略https模式 curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); //设置头信息 if(!empty($headers)&&count($headers)>0){ curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers ); } if(isset($postData)&&$postData!==false){ //不是null和false是post模式 curl_setopt ( $ch, CURLOPT_POST, 1 ); if(is_array($postData)){ //必须转成url字符串才是网页表单类型application/x-www-form-urlencoded $postData=http_build_query($postData); } curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postData ); } $body = curl_exec ( $ch ); $headerPos=strpos($body, "\r\n\r\n");//头信息定位索引 if($headerPos!==false){ $headerPos=intval($headerPos)+strlen("\r\n\r\n");//加上换行的长度等于头大小 } $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);//头大小 $headerSize=intval($headerSize); if($headerSize<$headerPos){ $headerSize=$headerPos; } $header = substr($body, 0, $headerSize);//头信息 $body = substr($body, $headerSize);//body内容 $code=curl_getinfo($ch,CURLINFO_HTTP_CODE);//状态码 $code=intval($code); curl_close ( $ch ); $data=array('success'=>false,'header'=>$header); if($code>=200&&$code<300){ $data['success']=true; $data['body']=$body; } return $data; } //运行错误 protected function doError($msg){ call_user_func($this->funcError, $msg); } //运行formPost protected function doFormPost($data){ call_user_func($this->funcFormPost, $data); } //运行apiPost protected function doApiPost(){ call_user_func($this->funcApiPost); } //获取post参数 protected function doGetPost($key){ if(empty($this->funcGetPost)){ return isset($_POST[$key])?$_POST[$key]:''; }else{ return call_user_func($this->funcGetPost,$key); } } //设置插件配置 protected function setPluginConfig($pluginConfig){ $pluginConfig=(array)$pluginConfig; if(empty($pluginConfig)){ $pluginConfig=array(); } return $pluginConfig; } //判断https public function isSsl(){ $server = $_SERVER; if (isset($server['HTTPS']) && ('1' == $server['HTTPS'] || 'on' == strtolower($server['HTTPS']))) { return true; } elseif (isset($server['REQUEST_SCHEME']) && 'https' == $server['REQUEST_SCHEME']) { return true; } elseif (isset($server['SERVER_PORT']) && ('443' == $server['SERVER_PORT'])) { return true; } elseif (isset($server['HTTP_X_FORWARDED_PROTO']) && 'https' == $server['HTTP_X_FORWARDED_PROTO']) { return true; } return false; } //域名 public function getHost(){ $host=''; if (isset($_SERVER['HTTP_X_REAL_HOST'])) { $host = $_SERVER['HTTP_X_REAL_HOST']; } else { $host = $_SERVER['HTTP_HOST']; } return $host; } }