mirror of
https://gitee.com/technical-laohu/mpay.git
synced 2025-09-18 01:36:40 +08:00
插件管理优化
This commit is contained in:
parent
0473a992a8
commit
5728976e9f
12
!.env
Normal file
12
!.env
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
APP_DEBUG = true
|
||||||
|
|
||||||
|
DB_TYPE = mysql
|
||||||
|
DB_HOST = 127.0.0.1
|
||||||
|
DB_NAME = mpay
|
||||||
|
DB_USER = admin
|
||||||
|
DB_PASS = Aa123456
|
||||||
|
DB_PORT = 3306
|
||||||
|
DB_CHARSET = utf8
|
||||||
|
DB_PREFIX = mpay_
|
||||||
|
|
||||||
|
DEFAULT_LANG = zh-cn
|
@ -116,20 +116,39 @@ class PayManageController extends BaseController
|
|||||||
{
|
{
|
||||||
$platform = Platform::where('platform', $acc->getData('platform'))->find();
|
$platform = Platform::where('platform', $acc->getData('platform'))->find();
|
||||||
$user = User::where('pid', $acc->pid)->find();
|
$user = User::where('pid', $acc->pid)->find();
|
||||||
$query = \unserialize($platform->query);
|
$query = var_export(\unserialize($platform->query), \true);
|
||||||
$data = [
|
$config = <<<EOF
|
||||||
'pid' => $user->pid,
|
<?php
|
||||||
'key' => $user->secret_key,
|
// +----------------------------------------------------------------------
|
||||||
|
// | 支付监听配置,一个文件,一个账号
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
return [
|
||||||
|
// 用户账号配置
|
||||||
|
'user' => [
|
||||||
|
'pid' => {$user->pid},
|
||||||
|
'key' => '$user->secret_key'
|
||||||
|
],
|
||||||
|
// 收款平台账号配置
|
||||||
|
'pay' => [
|
||||||
|
// 账号id
|
||||||
'aid' => $acc->id,
|
'aid' => $acc->id,
|
||||||
'platform' => $acc->getData('platform'),
|
// 收款平台
|
||||||
'account' => $acc->account,
|
'platform' => '{$acc->getData('platform')}',
|
||||||
'password' => $acc->password,
|
// 插件类名
|
||||||
'payclass' => $platform->class_name,
|
'payclass' => '{$platform->class_name}',
|
||||||
'query' => \var_export($query, \true)
|
// 账号
|
||||||
];
|
'account' => '{$acc->account}',
|
||||||
$config = View::fetch('tpl/account_config', $data);
|
// 密码
|
||||||
$name = "{$data['pid']}_{$data['aid']}";
|
'password' => '{$acc->password}',
|
||||||
$path = "../config/payconfig/{$name}.php";
|
// 订单查询参数配置
|
||||||
|
'query' => {$query},
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
EOF;
|
||||||
|
$name = "{$user->pid}_{$acc->id}";
|
||||||
|
$path = config_path() . "/payconfig/{$name}.php";
|
||||||
\file_put_contents($path, $config);
|
\file_put_contents($path, $config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,36 +10,103 @@ use think\facade\View;
|
|||||||
|
|
||||||
class PluginController extends BaseController
|
class PluginController extends BaseController
|
||||||
{
|
{
|
||||||
// 插件列表
|
// 获取插件列表
|
||||||
public function getPluginList()
|
public function getPluginList()
|
||||||
{
|
{
|
||||||
$query = $this->request->get();
|
$plugin_config = $this->getPluginConfig();
|
||||||
$data = Platform::order('id', 'desc')->paginate(['list_rows' => $query['limit'], 'page' => $query['page']]);
|
if ($plugin_config) {
|
||||||
if ($data) {
|
return json(['code' => 0, 'msg' => 'OK', 'count' => \count($plugin_config), 'data' => $plugin_config]);
|
||||||
return json(['code' => 0, 'msg' => 'OK', 'count' => $data->total(), 'data' => $data->items()]);
|
|
||||||
} else {
|
} else {
|
||||||
return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]);
|
return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 测试
|
||||||
|
public function test()
|
||||||
|
{
|
||||||
|
// $res = $this->addPlugin(['platform' => 'haopay', 'name' => '好支付', 'class_name' => 'Haopay', 'price' => 99, 'describe' => '好支付', 'website' => 'https://store.zhihuijingyingba.com/', 'state' => 1, 'query' => []]);
|
||||||
|
// $res = $this->delPlugin('haopay');
|
||||||
|
$res = $this->setPlugin('haopay', ['state' => 0]);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
// 添加插件
|
||||||
|
public function addPlugin(array $option = [])
|
||||||
|
{
|
||||||
|
$keys = ['platform', 'name', 'class_name', 'price', 'describe', 'website', 'state', 'query'];
|
||||||
|
$config = [];
|
||||||
|
foreach ($option as $key => $value) {
|
||||||
|
if (in_array($key, $keys)) {
|
||||||
|
$config[$key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$plugin_config = $this->getPluginConfig();
|
||||||
|
$plugin_platform = $config['platform'] ?: '';
|
||||||
|
foreach ($plugin_config as $value) {
|
||||||
|
if ($plugin_platform == $value['platform']) {
|
||||||
|
return 1; //'插件已存在'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$plugin_config[] = $config;
|
||||||
|
$this->savePluginConfig($plugin_config, '支付插件列表');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// 删除插件
|
||||||
|
public function delPlugin($plugin_name = '')
|
||||||
|
{
|
||||||
|
$plugin_config = $this->getPluginConfig();
|
||||||
|
$keys = [];
|
||||||
|
foreach ($plugin_config as $index => $value) {
|
||||||
|
if ($value['platform'] == $plugin_name) {
|
||||||
|
$keys[] = $index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($keys as $index) {
|
||||||
|
unset($plugin_config[$index]);
|
||||||
|
}
|
||||||
|
$config = \array_values($plugin_config);
|
||||||
|
$this->savePluginConfig($config, '支付插件列表');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// 修改插件
|
||||||
|
public function setPlugin($platform = '', $option = [])
|
||||||
|
{
|
||||||
|
$config = $this->getPluginConfig();
|
||||||
|
if (!$platform) {
|
||||||
|
return 1; //'请选择插件'
|
||||||
|
}
|
||||||
|
if (!$option) {
|
||||||
|
return 2; //请添加插件配置
|
||||||
|
}
|
||||||
|
foreach ($config as $index => $options) {
|
||||||
|
if ($options['platform'] == $platform) {
|
||||||
|
foreach ($options as $key => $value) {
|
||||||
|
if (\array_key_exists($key, $option)) {
|
||||||
|
$config[$index][$key] = $option[$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->savePluginConfig($config, '支付插件列表');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// 插件启用
|
// 插件启用
|
||||||
public function pluginEnable()
|
public function pluginEnable()
|
||||||
{
|
{
|
||||||
$info = $this->request->post();
|
$info = $this->request->post();
|
||||||
$up_res = Platform::update($info);
|
$up_res = $this->setPlugin($info['platform'], ['state' => $info['state']]);
|
||||||
if ($up_res) {
|
if ($up_res) {
|
||||||
return json(\backMsg(0, '成功'));
|
|
||||||
} else {
|
|
||||||
return json(\backMsg(1, '失败'));
|
return json(\backMsg(1, '失败'));
|
||||||
|
} else {
|
||||||
|
return json(\backMsg(0, '成功'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 插件选项
|
// 插件选项
|
||||||
public function pluginOption()
|
public function pluginOption()
|
||||||
{
|
{
|
||||||
// 加载平台配置
|
// 加载平台配置
|
||||||
$platform = \think\facade\Config::load("extendconfig/platform", 'extendconfig');
|
$config = $this->getPluginConfig();
|
||||||
$option = [];
|
$option = [];
|
||||||
foreach ($platform as $key => $value) {
|
foreach ($config as $value) {
|
||||||
$option[] = ['platform' => $key, 'name' => $value];
|
$option[] = ['platform' => $value['platform'], 'name' => $value['name']];
|
||||||
}
|
}
|
||||||
return json($option);
|
return json($option);
|
||||||
}
|
}
|
||||||
@ -60,4 +127,27 @@ class PluginController extends BaseController
|
|||||||
return \json(\backMsg(1, '创建成功'));
|
return \json(\backMsg(1, '创建成功'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 获取插件配置
|
||||||
|
private function getPluginConfig(): array
|
||||||
|
{
|
||||||
|
$payplugin_path = config_path() . '/extendconfig/payplugin.php';
|
||||||
|
if (!file_exists($payplugin_path)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
// 加载插件配置
|
||||||
|
$payplugin_config = require_once $payplugin_path;
|
||||||
|
return $payplugin_config;
|
||||||
|
}
|
||||||
|
// 保存插件配置
|
||||||
|
private function savePluginConfig(array $config, string $note = '说明')
|
||||||
|
{
|
||||||
|
$payplugin_path = config_path() . '/extendconfig/payplugin.php';
|
||||||
|
$note_tpl = <<<EOF
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | $note
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
EOF;
|
||||||
|
$config_str = "<?php\n" . $note_tpl . "\n\nreturn " . var_export($config, true) . ";\n";
|
||||||
|
\file_put_contents($payplugin_path, $config_str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,17 @@ class PayAccount extends BaseModel
|
|||||||
// 获取器
|
// 获取器
|
||||||
public function getPlatformAttr($value)
|
public function getPlatformAttr($value)
|
||||||
{
|
{
|
||||||
// 加载平台配置
|
$payplugin_path = config_path() . '/extendconfig/payplugin.php';
|
||||||
$platform = \think\facade\Config::load("extendconfig/platform", 'extendconfig');
|
if (!file_exists($payplugin_path)) {
|
||||||
return $platform[$value];
|
return [];
|
||||||
|
}
|
||||||
|
// 加载插件配置
|
||||||
|
$payplugin_config = require_once $payplugin_path;
|
||||||
|
$option = [];
|
||||||
|
foreach ($payplugin_config as $config) {
|
||||||
|
$option[$config['platform']] = $config['name'];
|
||||||
|
}
|
||||||
|
return $option[$value];
|
||||||
}
|
}
|
||||||
public function getPatternAttr($value)
|
public function getPatternAttr($value)
|
||||||
{
|
{
|
||||||
|
86
config/extendconfig/payplugin.php
Normal file
86
config/extendconfig/payplugin.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 支付插件列表
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
return array (
|
||||||
|
0 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'sqbpay',
|
||||||
|
'name' => '收钱吧',
|
||||||
|
'class_name' => 'ShouQianBa',
|
||||||
|
'price' => '99.00',
|
||||||
|
'describe' => '主流移动支付全能收 信用卡,花呗都能用,生意帮手收钱吧,移动收款就用它!',
|
||||||
|
'website' => 'https://www.shouqianba.com/',
|
||||||
|
'state' => 1,
|
||||||
|
'query' => 'a:8:{s:8:"date_end";N;s:10:"date_start";N;s:4:"page";i:1;s:9:"page_size";i:10;s:13:"upayQueryType";i:0;s:6:"status";s:4:"2000";s:8:"store_sn";s:0:"";s:4:"type";s:2:"30";}',
|
||||||
|
),
|
||||||
|
1 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'storepay',
|
||||||
|
'name' => '数字门店',
|
||||||
|
'class_name' => 'ZhiHuiJingYing',
|
||||||
|
'price' => '99.00',
|
||||||
|
'describe' => '数字门店',
|
||||||
|
'website' => 'https://store.zhihuijingyingba.com/',
|
||||||
|
'state' => 1,
|
||||||
|
'query' => 'a:7:{s:6:"pageNo";i:1;s:8:"pageSize";i:10;s:9:"payClient";i:4;s:6:"status";i:2;s:2:"_t";N;s:16:"createTime_begin";N;s:14:"createTime_end";N;}',
|
||||||
|
),
|
||||||
|
2 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'ysepay',
|
||||||
|
'name' => '小Y经营',
|
||||||
|
'class_name' => 'Ysepay',
|
||||||
|
'price' => '99.00',
|
||||||
|
'describe' => '为商户和消费者提供安全、便捷、高效的支付产品与服务助力商户提升运营效率,实现数字化运营',
|
||||||
|
'website' => 'https://xym.ysepay.com/',
|
||||||
|
'state' => 1,
|
||||||
|
'query' => 'a:10:{s:7:"storeNo";s:0:"";s:7:"bizType";i:3;s:7:"payType";s:0:"";s:11:"orderStatus";i:3;s:5:"trmNo";s:0:"";s:12:"operatorUser";s:0:"";s:13:"codeBoardCode";s:0:"";s:8:"pageSize";i:10;s:6:"pageNo";i:1;s:7:"orderNo";s:0:"";}',
|
||||||
|
),
|
||||||
|
3 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'mqpay',
|
||||||
|
'name' => '码钱',
|
||||||
|
'class_name' => 'MaQian',
|
||||||
|
'price' => '99.00',
|
||||||
|
'describe' => '码钱商管平台',
|
||||||
|
'website' => 'https://m.hkrt.cn/',
|
||||||
|
'state' => 0,
|
||||||
|
'query' => 'a:12:{s:12:"terminalType";s:0:"";s:7:"payType";s:0:"";s:7:"payMode";s:0:"";s:11:"tradeStatus";s:1:"1";s:7:"tradeNo";s:0:"";s:7:"storeId";s:0:"";s:4:"page";i:1;s:4:"rows";i:10;s:7:"endDate";N;s:7:"endTime";N;s:9:"startDate";N;s:9:"startTime";N;}',
|
||||||
|
),
|
||||||
|
4 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'lklpay',
|
||||||
|
'name' => '拉卡拉',
|
||||||
|
'class_name' => 'LaKaLa',
|
||||||
|
'price' => '99.00',
|
||||||
|
'describe' => '数字支付,更安全,更高效',
|
||||||
|
'website' => 'https://customer.lakala.com/',
|
||||||
|
'state' => 0,
|
||||||
|
'query' => '',
|
||||||
|
),
|
||||||
|
5 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'sftpay',
|
||||||
|
'name' => '盛付通',
|
||||||
|
'class_name' => 'ShengPay',
|
||||||
|
'price' => '99.00',
|
||||||
|
'describe' => '轻松生活 放心支付',
|
||||||
|
'website' => 'https://b.shengpay.com/',
|
||||||
|
'state' => 0,
|
||||||
|
'query' => '',
|
||||||
|
),
|
||||||
|
6 =>
|
||||||
|
array (
|
||||||
|
'platform' => 'haopay',
|
||||||
|
'name' => '好支付',
|
||||||
|
'class_name' => 'Haopay',
|
||||||
|
'price' => 99,
|
||||||
|
'describe' => '好支付',
|
||||||
|
'website' => 'https://store.zhihuijingyingba.com/',
|
||||||
|
'state' => 0,
|
||||||
|
'query' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 支持平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'sqbpay' => '收钱吧',
|
|
||||||
'storepay' => '数字门店',
|
|
||||||
'ysepay' => '小Y经营',
|
|
||||||
'mqpay' => '码钱',
|
|
||||||
'lklpay' => '拉卡拉',
|
|
||||||
'sftpay' => '盛付通',
|
|
||||||
);
|
|
@ -2,6 +2,7 @@
|
|||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
// | 支付监听配置,一个文件,一个账号
|
// | 支付监听配置,一个文件,一个账号
|
||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
return [
|
return [
|
||||||
// 用户账号配置
|
// 用户账号配置
|
||||||
'user' => [
|
'user' => [
|
||||||
@ -14,7 +15,7 @@ return [
|
|||||||
'aid' => 1,
|
'aid' => 1,
|
||||||
// 收款平台
|
// 收款平台
|
||||||
'platform' => 'sqbpay',
|
'platform' => 'sqbpay',
|
||||||
// 收款平台
|
// 插件类名
|
||||||
'payclass' => 'ShouQianBa',
|
'payclass' => 'ShouQianBa',
|
||||||
// 账号
|
// 账号
|
||||||
'account' => '14725836911',
|
'account' => '14725836911',
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
<button class="layui-btn layui-btn-primary layui-bg-gray layui-btn-sm" grp-btn lay-event="showWaitInstall">待安装</button>
|
<button class="layui-btn layui-btn-primary layui-bg-gray layui-btn-sm" grp-btn lay-event="showWaitInstall">待安装</button>
|
||||||
</script>
|
</script>
|
||||||
<script type="text/html" id="plugin-state">
|
<script type="text/html" id="plugin-state">
|
||||||
<input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="pluginEnable" {{ d.state == 1 ? 'checked' : '' }} />
|
<input type="checkbox" name="state" value="{{d.platform}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="pluginEnable" {{ d.state == 1 ? 'checked' : '' }} />
|
||||||
</script>
|
</script>
|
||||||
<script type="text/html" id="plugin-action">
|
<script type="text/html" id="plugin-action">
|
||||||
<a href="javascript:;" class="layui-font-green" lay-event="createConfig">配置</a><div class="divider-vl"></div>
|
<a href="javascript:;" class="layui-font-green" lay-event="createConfig">配置</a><div class="divider-vl"></div>
|
||||||
@ -105,8 +105,8 @@
|
|||||||
// 启用状态
|
// 启用状态
|
||||||
form.on('switch(pluginEnable)', function (obj) {
|
form.on('switch(pluginEnable)', function (obj) {
|
||||||
const state = obj.elem.checked == true ? 1 : 0;
|
const state = obj.elem.checked == true ? 1 : 0;
|
||||||
const id = obj.value;
|
const platform = obj.value;
|
||||||
const field = { state: state, id: id };
|
const field = { state: state, platform: platform };
|
||||||
plugin.enable(obj, field);
|
plugin.enable(obj, field);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
<?php echo "<?php\n"; ?>
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 支付监听配置,一个文件,一个账号
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
return [
|
|
||||||
// 用户账号配置
|
|
||||||
'user' => [
|
|
||||||
'pid' => <?php echo $pid; ?>,
|
|
||||||
'key' => '<?php echo $key; ?>'
|
|
||||||
],
|
|
||||||
// 收款平台账号配置
|
|
||||||
'pay' => [
|
|
||||||
// 账号id
|
|
||||||
'aid' => <?php echo $aid; ?>,
|
|
||||||
// 收款平台
|
|
||||||
'platform' => '<?php echo $platform; ?>',
|
|
||||||
// 收款平台
|
|
||||||
'payclass' => '<?php echo $payclass; ?>',
|
|
||||||
// 账号
|
|
||||||
'account' => '<?php echo $account; ?>',
|
|
||||||
// 密码
|
|
||||||
'password' => '<?php echo $password; ?>',
|
|
||||||
// 订单查询参数配置
|
|
||||||
'query' => <?php echo $query; ?>,
|
|
||||||
]
|
|
||||||
];
|
|
@ -1,6 +0,0 @@
|
|||||||
<?php echo "<?php\n"; ?>
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 支持平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
return <?php echo var_export($data, true); ?>;
|
|
Loading…
Reference in New Issue
Block a user