更新插件中心功能

This commit is contained in:
技术老胡
2025-02-28 14:23:39 +08:00
parent 3b02869b5d
commit d5c43e28af
8 changed files with 226 additions and 54 deletions

View File

@@ -25,42 +25,76 @@ class PluginController extends BaseController
return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]);
}
}
// 安装插件
public function installPlugin()
{
$platform = $this->request->post('platform');
if (!$platform) return json(backMsg(1, '请选择插件'));
$intall_info = \Plugin::installPlugin($platform);
if ($intall_info['code'] !== 0) return json(backMsg(1, $intall_info['msg']));
// 需要授权
if ($intall_info['data']['status'] === 0) {
return json(['code' => 0, 'msg' => '请支付', 'state' => 0, 'data' => $intall_info['data']]);
}
$saved = $this->saveNewPluginConfig($intall_info['data']);
if ($saved['code'] !== 0) return json(backMsg(1, $saved['msg']));
return json(['code' => 0, 'msg' => '授权成功', 'state' => 1]);
}
// 更新插件
public function updatePlugin()
{
$platform = $this->request->post('platform');
if (!$platform) return json(backMsg(1, '请选择插件'));
$update_info = \Plugin::updatePlugin($platform);
if ($update_info['code'] !== 0) return json(backMsg(1, $update_info['msg']));
$saved = $this->saveNewPluginConfig($update_info['data']);
if ($saved['code'] !== 0) return json(backMsg(1, $saved['msg']));
return json(['code' => 0, 'msg' => '更新成功']);
}
// 保存全部插件信息
private function saveNewPluginConfig(array $config = [])
{
$plugin_config = $config['config'];
$plugin_auth = $config['authcode'];
$plugin_file = $config['file'];
if (!$this->savePluginFile($plugin_file, $plugin_config)) return backMsg(1, '保存插件文件失败');
if (!$this->saveAuthCode($plugin_auth, $plugin_config)) return backMsg(1, '保存插件授权码失败');
if (!$this->addPlugin($plugin_config)) return backMsg(1, '保存插件配置失败');
return backMsg(0, 'ok');
}
// 卸载插件
public function uninstallPlugin()
{
$platform = $this->request->post('platform');
$classname = $this->request->post('classname');
if (!$platform || !$classname) {
return json(backMsg(1, '请选择插件'));
}
if (!$platform) return json(backMsg(1, '请选择插件'));
$res2 = $this->delPluginFile($platform);
if (!$res2) return json(backMsg(1, '插件文件不存在'));
$res1 = $this->delPlugin($platform);
$res2 = $this->delPluginFile($classname);
if ($res1 && $res2) {
return json(backMsg(0, '卸载成功'));
} else {
return json(backMsg(1, '插件不存在'));
}
if (!$res1) return json(backMsg(1, '插件配置不存在'));
return json(backMsg(0, '卸载成功'));
}
// 添加插件
// 添加或更新插件
public function addPlugin(array $option = [])
{
$keys = ['platform', 'name', 'class_name', 'price', 'describe', 'website', 'state'];
$keys = ['platform', 'name', 'class_name', 'price', 'describe', 'website', 'helplink', 'version'];
$config = [];
foreach ($option as $key => $value) {
if (in_array($key, $keys)) {
$config[$key] = $value;
}
if (in_array($key, $keys)) $config[$key] = $value;
}
$config['state'] = 1;
$plugin_config = self::getPluginConfig();
$plugin_platform = $config['platform'] ?: '';
foreach ($plugin_config as $value) {
foreach ($plugin_config as $i => $value) {
if ($plugin_platform == $value['platform']) {
return 1; //'插件已存在'
$plugin_config[$i] = $config;
$this->savePluginConfig($plugin_config, '支付插件列表');
return true;
}
}
$plugin_config[] = $config;
$this->savePluginConfig($plugin_config, '支付插件列表');
return 0;
return true;
}
// 删除插件配置
private function delPlugin(string $plugin_name = '')
@@ -70,37 +104,31 @@ class PluginController extends BaseController
foreach ($plugin_config as $i => $value) {
if ($value['platform'] == $plugin_name) {
$index = $i;
break;
}
}
if ($index === null) {
return false; // 插件不存在
}
if ($index === null) return false;
unset($plugin_config[$index]);
$config = array_values($plugin_config);
$this->savePluginConfig($config, '支付插件列表');
return true;
}
// 删除插件类库文件
private function delPluginFile(string $file_name = '')
private function delPluginFile(string $platform = '')
{
$file_name = self::getPluginInfo($platform)['class_name'];
if (!$file_name) return false;
$plugin_path = root_path() . '/extend/payclient/' . $file_name . '.php';
if (file_exists($plugin_path)) {
unlink($plugin_path);
return true;
} else {
return false;
}
if (!file_exists($plugin_path)) return false;
unlink($plugin_path);
return true;
}
// 修改插件
public function setPlugin($platform = '', $option = [])
{
$config = self::getPluginConfig();
if (!$platform) {
return 1; // 请选择插件
}
if (!$option) {
return 2; // 请添加插件配置
}
if (!$platform) return 1;
if (!$option) return 2;
foreach ($config as $index => $options) {
if ($options['platform'] == $platform) {
foreach ($options as $key => $value) {
@@ -166,6 +194,25 @@ class PluginController extends BaseController
}
return $info;
}
// 保存授权码
private function saveAuthCode(string $authcode = '', array $config = [])
{
$dir_path = runtime_path() . "auth/";
if (!is_dir($dir_path)) mkdir($dir_path, 755, true);
$auth_path = $dir_path . md5($config['platform'] . $config['class_name']) . '.json';
return file_put_contents($auth_path, json_encode(['authcode' => $authcode])) !== false ? true : false;
}
// 保存插件类库文件
private function savePluginFile($file_url = '', array $config = [])
{
if (empty($file_url)) return false;
$file_content = @file_get_contents($file_url);
if ($file_content === false) return false;
$save_dir = root_path() . 'extend/payclient/';
if (!is_dir($save_dir)) mkdir($save_dir, 0755, true);
$save_path = $save_dir . $config['class_name'] . '.php';
return file_put_contents($save_path, $file_content) !== false ? true : false;
}
// 获取插件配置
private static function getPluginConfig(): array
{