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