mirror of https://github.com/flucont/btcloud.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							230 lines
						
					
					
						
							5.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							230 lines
						
					
					
						
							5.9 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace app\lib; | |
| 
 | |
| use Exception; | |
| 
 | |
| class Btapi | |
| { | |
|     private $BT_KEY; //接口密钥 | |
|   	private $BT_PANEL; //面板地址 | |
| 	 | |
| 	public function __construct($bt_panel, $bt_key){ | |
| 		$this->BT_PANEL = $bt_panel; | |
| 		$this->BT_KEY = $bt_key; | |
| 	} | |
| 	 | |
|     //获取面板配置信息 | |
| 	public function get_config(){ | |
| 		$url = $this->BT_PANEL.'/config?action=get_config'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//获取已登录用户信息 | |
| 	public function get_user_info(){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=get_user_info'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//从云端获取插件列表 | |
| 	public function get_plugin_list(){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=get_plugin_list'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//下载插件包,返回文件路径 | |
| 	public function get_plugin_filename($plugin_name, $version){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=download_plugin'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['plugin_name'] = $plugin_name; | |
| 		$p_data['version'] = $version; | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//下载插件主程序文件,返回文件路径 | |
| 	public function get_plugin_main_filename($plugin_name, $version){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=download_plugin_main'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['plugin_name'] = $plugin_name; | |
| 		$p_data['version'] = $version; | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//解密插件主程序py代码,返回文件路径 | |
| 	public function get_decode_plugin_main($plugin_name, $version){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=decode_plugin_main'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['plugin_name'] = $plugin_name; | |
| 		$p_data['version'] = $version; | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//下载插件其他文件,返回文件路径 | |
| 	public function get_plugin_other_filename($fname){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=download_plugin_other'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['fname'] = $fname; | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//下载文件 | |
| 	public function download($filename, $localpath){ | |
| 		$url = $this->BT_PANEL.'/download'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['filename'] = $filename; | |
| 
 | |
| 		$result = $this->curl_download($url.'?'.http_build_query($p_data), $localpath); | |
| 
 | |
|       	return $result; | |
| 	} | |
| 
 | |
| 	//获取文件base64 | |
| 	public function get_file($filename){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=get_file'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['filename'] = $filename; | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//购买第三方插件 | |
| 	public function create_plugin_other_order($pid){ | |
| 		$url = $this->BT_PANEL.'/auth?action=create_plugin_other_order'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		$p_data['pid'] = $pid; | |
| 		$p_data['cycle'] = '999'; | |
| 		$p_data['type'] = '0'; | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 
 | |
| 	//获取一键部署列表 | |
| 	public function get_deplist(){ | |
| 		$url = $this->BT_PANEL.'/plugin?action=a&name=kaixin&s=get_deplist'; | |
| 		 | |
| 		$p_data = $this->GetKeyData(); | |
| 		 | |
| 		$result = $this->curl($url,$p_data); | |
| 		 | |
| 		$data = json_decode($result,true); | |
|       	return $data; | |
| 	} | |
| 	 | |
| 
 | |
|   	private function GetKeyData(){ | |
|   		$now_time = time(); | |
|     	$p_data = array( | |
| 			'request_token'	=>	md5($now_time.''.md5($this->BT_KEY)), | |
| 			'request_time'	=>	$now_time | |
| 		); | |
|     	return $p_data;     | |
|     } | |
|   	 | |
|    | |
|     private function curl($url, $data = null, $timeout = 60) | |
|     { | |
|     	//定义cookie保存位置 | |
|         $cookie_file=app()->getRuntimePath().md5($this->BT_PANEL).'.cookie'; | |
|         if(!file_exists($cookie_file)){ | |
|             touch($cookie_file); | |
|         } | |
| 		 | |
|         $ch = curl_init(); | |
|         curl_setopt($ch, CURLOPT_URL, $url); | |
|         curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); | |
| 		if($data){ | |
| 			curl_setopt($ch, CURLOPT_POST, 1); | |
| 			curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | |
| 		} | |
|         curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); | |
|         curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); | |
|         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
|         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | |
|         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
|         $output = curl_exec($ch); | |
|         curl_close($ch); | |
|         return $output; | |
|     } | |
| 
 | |
| 	private function curl_download($url, $localpath, $timeout = 300) | |
|     { | |
|     	//定义cookie保存位置 | |
|         $cookie_file=app()->getRuntimePath().md5($this->BT_PANEL).'.cookie'; | |
|         if(!file_exists($cookie_file)){ | |
|             touch($cookie_file); | |
|         } | |
| 		 | |
|         $ch = curl_init(); | |
|         curl_setopt($ch, CURLOPT_URL, $url); | |
|         curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); | |
|         curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); | |
|         curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); | |
| 		$fp = fopen($localpath, 'w+'); | |
| 		curl_setopt($ch, CURLOPT_FILE, $fp); | |
|         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | |
|         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
|         curl_exec($ch); | |
| 		if (curl_errno($ch)) { | |
| 			$message = curl_error($ch); | |
| 			curl_close($ch); | |
| 			fclose($fp); | |
| 			throw new Exception('下载文件失败:'.$message); | |
| 		} | |
| 		$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | |
| 		if($httpcode>299){ | |
| 			curl_close($ch); | |
| 			fclose($fp); | |
| 			throw new Exception('下载文件失败:HTTPCODE-'.$httpcode); | |
| 		} | |
|         curl_close($ch); | |
| 		fclose($fp); | |
|         return true; | |
|     } | |
| }
 |