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 = 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);
							 | 
						|
								        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;
							 | 
						|
								    }
							 | 
						|
								}
							 |