支持微信支付宝收款功能

This commit is contained in:
技术老胡 2024-11-19 17:28:42 +08:00
parent 09555fa708
commit a1707612dc
15 changed files with 426 additions and 116 deletions

View File

@ -2,6 +2,7 @@
namespace app\controller; namespace app\controller;
use think\facade\Log;
use think\facade\View; use think\facade\View;
class IndexController class IndexController
@ -21,7 +22,17 @@ class IndexController
} }
public function test() public function test()
{ {
$web = \request()->domain(); $info = request()->post();
return $web; $action = isset($info['action']) ? $info['action'] : '';
if ($action === 'mpay') {
$data = json_decode($info['data'], true);
$config = \think\facade\Config::load("payconfig/{$data['pid']}_{$data['aid']}", 'payconfig');
$payclient_path = "\\payclient\\Mpay";
$Payclient = new $payclient_path($info, $config);
$res = $Payclient->notify($info);
return $res;
} else {
return 202;
}
} }
} }

View File

@ -42,7 +42,12 @@ class PayManageController extends BaseController
public function addChannel() public function addChannel()
{ {
$aid = $this->request->get('aid'); $aid = $this->request->get('aid');
View::assign(['aid' => $aid]); $account = PayAccount::find($aid);
$platform = $account->getData('platform');
View::assign(['aid' => $aid, 'platform' => $platform, 'account' => $account->account]);
if ($platform == 'wxpay' || $platform == 'alipay') {
return View::fetch('add_channel_code');
}
return View::fetch(); return View::fetch();
} }
// 编辑收款终端 // 编辑收款终端

View File

@ -22,6 +22,50 @@ class PayManageController extends BaseController
return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]); return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]);
} }
} }
// 收款终端列表
public function getChannelList()
{
$aid = $this->request->post('aid');
$res = PayChannel::where(['account_id' => $aid])->order('last_time', 'desc')->select();
if ($res) {
return \json(\backMsg(0, '获取成功', $res));
} else {
return \json(\backMsg(1, '失败'));
}
}
// 账号状态
public function accountEnable()
{
$info = $this->request->post();
$up_res = PayAccount::update($info);
if ($up_res) {
return json(\backMsg(0, '成功'));
} else {
return json(\backMsg(1, '失败'));
}
}
// 添加账号
public function addAccount()
{
$info = $this->request->post();
$pid = $this->request->session('pid');
$info['pid'] = $pid;
$info['params'] = '{}';
$check_acc = PayAccount::where(['account' => $info['account'], 'platform' => $info['platform'], 'pid' => $pid])->find();
if ($check_acc) {
return \json(\backMsg(1, '账号已存在'));
}
$acc = PayAccount::create($info);
if ($acc) {
$state = $this->createAccountConfig($acc);
if (!$state) {
return json(\backMsg(1, '自字义参数错误'));
}
return \json(\backMsg(0, '添加成功'));
} else {
return \json(\backMsg(1, '添加失败'));
}
}
// 编辑账号 // 编辑账号
public function editAccount() public function editAccount()
{ {
@ -38,17 +82,6 @@ class PayManageController extends BaseController
return json(\backMsg(1, '修改失败')); return json(\backMsg(1, '修改失败'));
} }
} }
// 账号状态
public function accountEnable()
{
$info = $this->request->post();
$up_res = PayAccount::update($info);
if ($up_res) {
return json(\backMsg(0, '成功'));
} else {
return json(\backMsg(1, '失败'));
}
}
// 删除账号 // 删除账号
public function delAccount() public function delAccount()
{ {
@ -65,32 +98,14 @@ class PayManageController extends BaseController
return \json(\backMsg(1, '失败')); return \json(\backMsg(1, '失败'));
} }
} }
// 添加账号
public function addAccount()
{
$info = $this->request->post();
$pid = $this->request->session('pid');
$info['pid'] = $pid;
$info['params'] = '{}';
$check_acc = PayAccount::where(['account' => $info['account'], 'pid' => $pid])->find();
if ($check_acc) {
return \json(\backMsg(1, '账号已存在'));
}
$acc = PayAccount::create($info);
if ($acc) {
$state = $this->createAccountConfig($acc);
if (!$state) {
return json(\backMsg(1, '自字义参数错误'));
}
return \json(\backMsg(0, '添加成功'));
} else {
return \json(\backMsg(1, '添加失败'));
}
}
// 添加收款终端 // 添加收款终端
public function addChannel() public function addChannel()
{ {
$info = $this->request->post(); $info = $this->request->post();
$check = PayChannel::where(['account_id' => $info['account_id'], 'channel' => $info['channel']])->count();
if ($check) {
return \json(\backMsg(1, '编号已存在'));
}
$res = PayChannel::create($info); $res = PayChannel::create($info);
if ($res) { if ($res) {
return \json(\backMsg(0, '添加成功')); return \json(\backMsg(0, '添加成功'));
@ -120,17 +135,6 @@ class PayManageController extends BaseController
return \json(\backMsg(1, '失败')); return \json(\backMsg(1, '失败'));
} }
} }
// 收款终端列表
public function getChannelList()
{
$aid = $this->request->post('aid');
$res = PayChannel::where(['account_id' => $aid])->order('last_time', 'desc')->select();
if ($res) {
return \json(\backMsg(0, '获取成功', $res));
} else {
return \json(\backMsg(1, '失败'));
}
}
// 删除账号配置 // 删除账号配置
public function delAccountConfig($acc) public function delAccountConfig($acc)
{ {

View File

@ -18,14 +18,6 @@ class PluginController extends BaseController
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 = []) public function addPlugin(array $option = [])
{ {

View File

@ -16,7 +16,7 @@ class Order extends BaseModel
public static function createOrder($data) public static function createOrder($data)
{ {
$my_time = time(); $my_time = time();
$channel = self::setChannel($data['pid']); $channel = self::setChannel($data['pid'], $data['type']);
$new_order = [ $new_order = [
// 订单号 // 订单号
'order_id' => self::createOrderID('H'), 'order_id' => self::createOrderID('H'),
@ -112,13 +112,20 @@ class Order extends BaseModel
return $order->toArray(); return $order->toArray();
} }
// 选择收款通道 // 选择收款通道
private static function setChannel($pid): array private static function setChannel($pid, $type): array
{ {
// 查询有效收款账户及通道
$aids = PayAccount::where('pid', $pid)->where('state', 1)->column('id'); $aids = PayAccount::where('pid', $pid)->where('state', 1)->column('id');
$channel_info = PayChannel::whereIn('account_id', $aids)->where('state', 1)->order('last_time', 'asc')->find(); $channel_infos = PayChannel::whereIn('account_id', $aids)->where('state', 1)->order('last_time', 'asc')->select();
if (!$channel_info || !$aids) { if (!$channel_infos || !$aids) return [];
return []; // 微信/支付宝收款处理
$patt_wx = '/^wxpay/i';
$patt_ali = '/^alipay/i';
foreach ($channel_infos as $key => $value) {
} }
$channel_info = $channel_infos[0];
// 选取收款通道
$patt = PayAccount::find($channel_info->account_id); $patt = PayAccount::find($channel_info->account_id);
$channel = ['aid' => $channel_info->account_id, 'cid' => $channel_info->id, 'patt' => $patt->getData('pattern')]; $channel = ['aid' => $channel_info->account_id, 'cid' => $channel_info->id, 'patt' => $patt->getData('pattern')];
PayChannel::update(['last_time' => self::getFormatTime(), 'id' => $channel['cid']]); PayChannel::update(['last_time' => self::getFormatTime(), 'id' => $channel['cid']]);

View File

@ -7,7 +7,7 @@ return [
[ [
'id' => 'console', 'id' => 'console',
'title' => '平台首页', 'title' => '平台首页',
'icon' => 'layui-icon layui-icon-console', 'icon' => 'icon pear-icon pear-icon-home',
'type' => 1, 'type' => 1,
'openType' => '_iframe', 'openType' => '_iframe',
'href' => 'Console/console', 'href' => 'Console/console',
@ -15,15 +15,15 @@ return [
[ [
'id' => 'order', 'id' => 'order',
'title' => '订单管理', 'title' => '订单管理',
'icon' => 'layui-icon layui-icon-console', 'icon' => 'icon pear-icon pear-icon-survey',
'type' => 1, 'type' => 1,
'openType' => '_iframe', 'openType' => '_iframe',
'href' => '/Order/index', 'href' => '/Order/index',
], ],
[ [
'id' => 'payManage', 'id' => 'payManage',
'title' => '支付管理', 'title' => '账号管理',
'icon' => 'layui-icon layui-icon-console', 'icon' => 'icon pear-icon pear-icon-security',
'type' => 1, 'type' => 1,
'openType' => '_iframe', 'openType' => '_iframe',
'href' => '/PayManage/index', 'href' => '/PayManage/index',
@ -31,7 +31,7 @@ return [
[ [
'id' => 'pluginManage', 'id' => 'pluginManage',
'title' => '插件管理', 'title' => '插件管理',
'icon' => 'layui-icon layui-icon-console', 'icon' => 'icon pear-icon pear-icon-modular',
'type' => 1, 'type' => 1,
'openType' => '_iframe', 'openType' => '_iframe',
'href' => '/Plugin/index', 'href' => '/Plugin/index',
@ -39,7 +39,7 @@ return [
[ [
'id' => 'userCenter', 'id' => 'userCenter',
'title' => '用户中心', 'title' => '用户中心',
'icon' => 'layui-icon layui-icon-console', 'icon' => 'icon pear-icon pear-icon-user',
'type' => 1, 'type' => 1,
'openType' => '_iframe', 'openType' => '_iframe',
'href' => '/User/index', 'href' => '/User/index',
@ -47,7 +47,7 @@ return [
// [ // [
// 'id' => 'system', // 'id' => 'system',
// 'title' => '系统设置', // 'title' => '系统设置',
// 'icon' => 'layui-icon layui-icon-console', // 'icon' => 'icon pear-icon pear-icon-import',
// 'type' => 1, // 'type' => 1,
// 'openType' => '_iframe', // 'openType' => '_iframe',
// 'href' => '/System/index', // 'href' => '/System/index',
@ -55,14 +55,14 @@ return [
// [ // [
// 'id' => 'pay', // 'id' => 'pay',
// 'title' => '支付管理', // 'title' => '支付管理',
// 'icon' => 'layui-icon layui-icon-console', // 'icon' => 'icon pear-icon pear-icon-import',
// 'type' => 0, // 'type' => 0,
// 'href' => '', // 'href' => '',
// 'children' => [ // 'children' => [
// [ // [
// 'id' => 'pay_qrcode_list', // 'id' => 'pay_qrcode_list',
// 'title' => '收款账户', // 'title' => '收款账户',
// 'icon' => 'layui-icon layui-icon-console', // 'icon' => 'icon pear-icon pear-icon-import',
// 'type' => 1, // 'type' => 1,
// 'openType' => '_iframe', // 'openType' => '_iframe',
// 'href' => '/PayQrcode/index', // 'href' => '/PayQrcode/index',

View File

@ -3,9 +3,35 @@
// | 支付插件列表 // | 支付插件列表
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
return array( return array (
0 => 0 =>
array( array (
'platform' => 'wxpay',
'name' => '微信支付',
'class_name' => 'WxPay',
'price' => '0.00',
'describe' => '支持微信个人收款码、赞赏码、经营码、商家码收款,监听回调',
'website' => 'https://weixin.qq.com/',
'state' => 1,
'query' =>
array (
),
),
1 =>
array (
'platform' => 'alipay',
'name' => '支付宝',
'class_name' => 'AliPay',
'price' => '0.00',
'describe' => '支持支付宝个人收款码、经营码收款,监听回调',
'website' => 'https://www.alipay.com/',
'state' => 1,
'query' =>
array (
),
),
2 =>
array (
'platform' => 'sqbpay', 'platform' => 'sqbpay',
'name' => '收钱吧', 'name' => '收钱吧',
'class_name' => 'ShouQianBa', 'class_name' => 'ShouQianBa',
@ -14,7 +40,7 @@ return array(
'website' => 'https://www.shouqianba.com/', 'website' => 'https://www.shouqianba.com/',
'state' => 1, 'state' => 1,
'query' => 'query' =>
array( array (
'date_end' => NULL, 'date_end' => NULL,
'date_start' => NULL, 'date_start' => NULL,
'page' => 1, 'page' => 1,
@ -23,10 +49,10 @@ return array(
'status' => '2000', 'status' => '2000',
'store_sn' => '', 'store_sn' => '',
'type' => '30', 'type' => '30',
)
), ),
1 => ),
array( 3 =>
array (
'platform' => 'storepay', 'platform' => 'storepay',
'name' => '数字门店', 'name' => '数字门店',
'class_name' => 'ZhiHuiJingYing', 'class_name' => 'ZhiHuiJingYing',
@ -35,7 +61,7 @@ return array(
'website' => 'https://store.zhihuijingyingba.com/', 'website' => 'https://store.zhihuijingyingba.com/',
'state' => 1, 'state' => 1,
'query' => 'query' =>
array( array (
'pageNo' => 1, 'pageNo' => 1,
'pageSize' => 10, 'pageSize' => 10,
'payClient' => 4, 'payClient' => 4,
@ -43,10 +69,10 @@ return array(
'_t' => NULL, '_t' => NULL,
'createTime_begin' => NULL, 'createTime_begin' => NULL,
'createTime_end' => NULL, 'createTime_end' => NULL,
)
), ),
2 => ),
array( 4 =>
array (
'platform' => 'ysepay', 'platform' => 'ysepay',
'name' => '小Y经营', 'name' => '小Y经营',
'class_name' => 'YsePay', 'class_name' => 'YsePay',
@ -55,7 +81,7 @@ return array(
'website' => 'https://xym.ysepay.com/', 'website' => 'https://xym.ysepay.com/',
'state' => 1, 'state' => 1,
'query' => 'query' =>
array( array (
'storeNo' => '', 'storeNo' => '',
'bizType' => 3, 'bizType' => 3,
'payType' => '', 'payType' => '',
@ -66,10 +92,10 @@ return array(
'pageSize' => 10, 'pageSize' => 10,
'pageNo' => 1, 'pageNo' => 1,
'orderNo' => '', 'orderNo' => '',
)
), ),
3 => ),
array( 5 =>
array (
'platform' => 'mqpay', 'platform' => 'mqpay',
'name' => '码钱', 'name' => '码钱',
'class_name' => 'MaQian', 'class_name' => 'MaQian',
@ -78,7 +104,7 @@ return array(
'website' => 'https://m.hkrt.cn/', 'website' => 'https://m.hkrt.cn/',
'state' => 1, 'state' => 1,
'query' => 'query' =>
array( array (
'terminalType' => '', 'terminalType' => '',
'payType' => '', 'payType' => '',
'payMode' => '', 'payMode' => '',
@ -91,19 +117,19 @@ return array(
'endTime' => NULL, 'endTime' => NULL,
'startDate' => NULL, 'startDate' => NULL,
'startTime' => NULL, 'startTime' => NULL,
)
), ),
4 => ),
array( 6 =>
array (
'platform' => 'lklpay', 'platform' => 'lklpay',
'name' => '拉卡拉', 'name' => '拉卡拉',
'class_name' => 'LaKaLa', 'class_name' => 'LaKaLa',
'price' => '99.00', 'price' => '99.00',
'describe' => '数字支付,更安全,更高效', 'describe' => '数字支付,更安全,更高效',
'website' => 'https://customer.lakala.com/', 'website' => 'https://customer.lakala.com/',
'state' => 1, 'state' => 0,
'query' => 'query' =>
array( array (
'requestTime' => NULL, 'requestTime' => NULL,
'systemCode' => 'MERDASH', 'systemCode' => 'MERDASH',
'version' => '1.0', 'version' => '1.0',
@ -124,10 +150,10 @@ return array(
'size' => 10, 'size' => 10,
'merchantNos' => NULL, 'merchantNos' => NULL,
'merInnerNos' => NULL, 'merInnerNos' => NULL,
)
), ),
5 => ),
array( 7 =>
array (
'platform' => 'sftpay', 'platform' => 'sftpay',
'name' => '盛付通', 'name' => '盛付通',
'class_name' => 'ShengPay', 'class_name' => 'ShengPay',
@ -135,6 +161,8 @@ return array(
'describe' => '轻松生活 放心支付', 'describe' => '轻松生活 放心支付',
'website' => 'https://b.shengpay.com/', 'website' => 'https://b.shengpay.com/',
'state' => 0, 'state' => 0,
'query' => '' 'query' =>
array (
),
), ),
); );

View File

@ -1 +1 @@
2024-11-12 11:06:42 1731391345

View File

@ -19,7 +19,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">收款平台</label> <label class="layui-form-label">收款平台</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="platform"> <select name="platform" lay-filter="select-platform">
<option value="">收款平台</option> <option value="">收款平台</option>
</select> </select>
</div> </div>
@ -40,7 +40,7 @@
<label class="layui-form-label">监听模式</label> <label class="layui-form-label">监听模式</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="pattern"> <select name="pattern">
<option value="请选择"></option> <option value="">请选择</option>
<?php include_once '../view/tpl/pattern.html'; ?> <?php include_once '../view/tpl/pattern.html'; ?>
</select> </select>
</div> </div>
@ -78,9 +78,22 @@
select.innerHTML = option_str; select.innerHTML = option_str;
form.render('select'); form.render('select');
})() })()
// select 事件
form.on('select(select-platform)', function (data) {
const value = data.value; // 获得被选中的值
const field1 = document.querySelector('input[name="password"]').parentNode.parentNode;
const field2 = document.querySelector('select[name="pattern"]').parentNode.parentNode;
if (value === 'wxpay' || value === 'alipay') {
field1.style.display = 'none';
field2.style.display = 'none';
} else {
field1.style.display = 'block';
field2.style.display = 'block';
}
});
form.on('submit(add-account)', function (obj) { form.on('submit(add-account)', function (obj) {
const field = obj.field; let field = obj.field;
field.pattern = field.pattern === '' ? 1 : field.pattern;
(async () => { (async () => {
const url = '/api/PayManage/addAccount'; const url = '/api/PayManage/addAccount';
const info = field; const info = field;

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>添加收款终端</title> <title>添加二维码</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" /> <link rel="stylesheet" href="/component/pear/css/pear.css" />
<style> <style>
.inputTxt { .inputTxt {

View File

@ -0,0 +1,108 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加二维码</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<style>
.inputTxt {
margin-left: 10px;
}
</style>
</head>
<body>
<form id="set-channel" class="layui-form layui-form-pane" action="" lay-filter="channel-edit">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">终端编号</label>
<div class="layui-input-block">
<input type="text" name="channel" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收款通道</label>
<div class="layui-input-block">
<select class="type" lay-filter="select-type">
<option value="">请选择</option>
<!-- <?php if ($platform == 'wxpay') { ?> -->
<option value="wx1">个人码</option>
<option value="wx2">赞赏码</option>
<option value="wx3">经营码</option>
<option value="wx4">商家码</option>
<!-- <?php } ?> -->
<!-- <?php if ($platform == 'alipay') { ?> -->
<option value="ali1">个人码</option>
<option value="ali2">经营码</option>
<!-- <?php } ?> -->
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收款码</label>
<div class="layui-input-block">
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
lay-filter="scanning" class="layui-input">
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</form>
<script src="/component/layui/layui.js"></script>
<script src="/component/pear/pear.js"></script>
<script>
layui.use(['form'], function () {
let form = layui.form;
form.on('input-affix(scanning)', function () {
window.open('https://cli.im/deqr', '_blank');
});
// select 事件
form.on('select(select-type)', function (data) {
const value = data.value; // 获得被选中的值
const channel = document.querySelector('input[name="channel"]');
channel.value = '<?php echo $account ?>' + value;
});
form.on('submit(save)', function (obj) {
let field = obj.field;
field.account_id = '<?php echo $aid ?>';
(async () => {
const url = '/api/PayManage/addChannel';
const info = field;
const res = await fetch(url, { method: 'post', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(info) });
if (res.status !== 200) {
layer.msg('请求失败,请重试!', { tips: 2, time: 1200 });
return false;
}
const rec_info = await res.json();
if (rec_info.code === 0) {
layer.msg(rec_info.msg, { icon: 1, time: 1200 }, () => {
parent.layer.close(parent.layer.getFrameIndex(window.name)); //关闭当前页
parent.window.location.reload();
});
} else {
layer.msg(rec_info.msg, { icon: 2, time: 1200 });
}
})()
return false;
});
})
</script>
</body>
</html>

View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>添加收款通道</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<style>
.inputTxt {
margin-left: 10px;
}
</style>
</head>
<body>
<form id="add-account" class="layui-form layui-form-pane" action="" lay-filter="add-account">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">收款平台</label>
<div class="layui-input-block">
<select name="platform">
<option value="">收款平台</option>
<option value="wxpay">微信支付</option>
<option value="alipay">支付宝</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收款通道</label>
<div class="layui-input-block">
<select name="password">
<option value="">请选择</option>
<optgroup label="微信支付">
<option value="wx1">个人码</option>
<option value="wx2">赞赏码</option>
<option value="wx3">经营码</option>
<option value="wx4">商家码</option>
</optgroup>
<optgroup label="支付宝">
<option value="al1">个人码</option>
<option value="al2">经营码</option>
</optgroup>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收款账号</label>
<div class="layui-input-block">
<input type="text" name="account" autocomplete="off" class="layui-input">
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
lay-filter="add-account">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</form>
<script src="/component/layui/layui.js"></script>
<script src="/component/pear/pear.js"></script>
<script>
layui.use(['form'], function () {
let form = layui.form;
form.on('submit(add-account)', function (obj) {
const field = obj.field;
(async () => {
const url = '/api/PayManage/addCode';
const info = field;
const res = await fetch(url, { method: 'post', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(info) });
if (res.status !== 200) {
layer.msg('请求失败,请重试!', { tips: 2, time: 1200 });
return false;
}
const rec_info = await res.json();
if (rec_info.code === 0) {
layer.msg(rec_info.msg, { icon: 1, time: 1200 }, () => {
parent.layer.close(parent.layer.getFrameIndex(window.name)); //关闭当前页
parent.layui.table.reload("account-table");
});
} else {
layer.msg(rec_info.msg, { icon: 2, time: 1200 });
}
})()
return false;
});
})
</script>
</body>
</html>

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>终端列表</title> <title>收款码</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" /> <link rel="stylesheet" href="/component/pear/css/pear.css" />
<style> <style>
.edit { .edit {
@ -68,7 +68,7 @@
layer.open({ layer.open({
id: 'iframe-channel-add', id: 'iframe-channel-add',
type: 2, type: 2,
title: '添加收款终端', title: '添加收款',
shade: 0.1, shade: 0.1,
area: [common.isModile() ? '80%' : '400px', common.isModile() ? '70%' : '300px'], area: [common.isModile() ? '80%' : '400px', common.isModile() ? '70%' : '300px'],
content: `/PayManage/addChannel?aid=${aid}`, content: `/PayManage/addChannel?aid=${aid}`,
@ -138,7 +138,7 @@
channel.addBtn = function (mainbox, aid) { channel.addBtn = function (mainbox, aid) {
let btn = document.createElement('div'); let btn = document.createElement('div');
btn.className = 'layui-card'; btn.className = 'layui-card';
btn.innerHTML = `<button type="button" lay-on="add" data-aid="${aid}" class="layui-btn layui-btn-fluid">添加收款终端</button>`; btn.innerHTML = `<button type="button" lay-on="add" data-aid="${aid}" class="layui-btn layui-btn-fluid">添加收款</button>`;
mainbox.appendChild(btn); mainbox.appendChild(btn);
} }
// 生成二维码 // 生成二维码

View File

@ -27,7 +27,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">收款平台</label> <label class="layui-form-label">收款平台</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="platform"> <select name="platform" lay-filter="select-platform">
<option value="">收款平台</option> <option value="">收款平台</option>
</select> </select>
</div> </div>
@ -61,7 +61,8 @@
</div> </div>
<div class="layui-form-item layui-form-text"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">查询参数 <label class="layui-form-label">查询参数
<a href="https://www.jyshare.com/front-end/53/" class="layui-font-blue" style="float: right;" target="_blank"> <a href="https://www.jyshare.com/front-end/53/" class="layui-font-blue" style="float: right;"
target="_blank">
<span class="layui-font-gray">JSON工具 </span><span class="icon pear-icon">&#xe6b6;</span> <span class="layui-font-gray">JSON工具 </span><span class="icon pear-icon">&#xe6b6;</span>
</a> </a>
</label> </label>
@ -112,6 +113,20 @@
"params": `<?php echo $params ?>`, "params": `<?php echo $params ?>`,
}); });
})() })()
// select 事件
const platform = "<?php echo $platform ?>";
if (platform === 'wxpay' || platform === 'alipay') {
changePat(false);
}
form.on('select(select-platform)', function (data) {
const value = data.value; // 获得被选中的值
if (value === 'wxpay' || value === 'alipay') {
changePat(false);
} else {
changePat(true);
}
});
// 提交
form.on('submit(save-account)', function (obj) { form.on('submit(save-account)', function (obj) {
let field = obj.field; let field = obj.field;
field.state = 'state' in field ? 1 : 0; field.state = 'state' in field ? 1 : 0;
@ -137,6 +152,21 @@
})() })()
return false; return false;
}); });
// 操作元素显示
function changePat(is_show = true) {
const field1 = document.querySelector('input[name="password"]').parentNode.parentNode;
const field2 = document.querySelector('select[name="pattern"]').parentNode.parentNode;
const field3 = document.querySelector('textarea[name="params"]').parentNode.parentNode;
if (is_show) {
field1.style.display = 'block';
field2.style.display = 'block';
field3.style.display = 'block';
} else {
field1.style.display = 'none';
field2.style.display = 'none';
field3.style.display = 'none';
}
}
}) })
</script> </script>
</body> </body>

View File

@ -66,7 +66,7 @@
</div> </div>
</div> </div>
<script type="text/html" id="account-toolbar"> <script type="text/html" id="account-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="addAccount"> <button class="pear-btn pear-btn-success pear-btn-md" lay-event="addAccount">
<i class="layui-icon layui-icon-add-1"></i> <i class="layui-icon layui-icon-add-1"></i>
添加 添加
</button> </button>
@ -82,6 +82,17 @@
<script type="text/html" id="account-state"> <script type="text/html" id="account-state">
<input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="accountEnable" {{ d.state == 1 ? 'checked' : '' }} /> <input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="accountEnable" {{ d.state == 1 ? 'checked' : '' }} />
</script> </script>
<script type="text/html" id="account-checkUrl">
{{#
if (d.platform == '微信支付') {
return `{"payway":"wxpay","pid":"${d.pid}","aid":"${d.id}","uid":"\{\{UID\}\}","title":"\{\{TITLE\}\}","msg":"\{\{MSG\}\}","time":"\{\{RECEIVE_TIME\}\}","divice":"\{\{DEVICE_NAME\}\}"}`;
} else if (d.platform == '支付宝') {
return `{"payway":"alipay","pid":"${d.pid}","aid":"${d.id}","uid":"\{\{UID\}\}","title":"\{\{TITLE\}\}","msg":"\{\{MSG\}\}","time":"\{\{RECEIVE_TIME\}\}","divice":"\{\{DEVICE_NAME\}\}"}`;
} else {
return '<?php echo $domain ?>/checkPayResult?pid=' + d.pid + '&aid=' + d.id;
}
}}
</script>
<script src="/component/layui/layui.js"></script> <script src="/component/layui/layui.js"></script>
<script src="/component/pear/pear.js"></script> <script src="/component/pear/pear.js"></script>
<script> <script>
@ -107,11 +118,10 @@
{ type: 'checkbox' }, { type: 'checkbox' },
{ title: '平 台', field: 'platform', align: 'center', templet: '' }, { title: '平 台', field: 'platform', align: 'center', templet: '' },
{ title: '账 号', field: 'account', align: 'center' }, { title: '账 号', field: 'account', align: 'center' },
{ title: '密 码', field: 'password', align: 'center' },
{ title: '启用状态', field: 'state', align: 'center', templet: '#account-state' }, { title: '启用状态', field: 'state', align: 'center', templet: '#account-state' },
{ title: '监听模式', field: 'pattern', align: 'center' }, { title: '监听模式', field: 'pattern', align: 'center' },
{ title: '监听地址', field: 'payurl', align: 'center', templet: `<div>{{# return '<?php echo $domain ?>/checkPayResult?pid='+d.pid+'&aid='+d.id }}</div>` }, { title: '监听地址 / 自定义模版', field: 'checkUrl', align: 'center', minWidth: 300, event: 'copy', templet: '#account-checkUrl' },
{ title: '终端数量', field: 'channel', align: 'center', templet: '<div><a href="javascript:;" lay-event="channelList"><span class="layui-badge layui-bg-green">{{= d.channel }}</span></a></div>' }, { title: '收款码数量', field: 'channel', align: 'center', templet: '<div><a href="javascript:;" lay-event="channelList"><span class="layui-badge layui-bg-green">{{= d.channel }}</span></a></div>' },
{ title: '操作', align: 'center', fixed: 'right', templet: '<div><a href="javascript:;" class="layui-font-green" lay-event="edit"><strong>编辑</strong></a></div>' } { title: '操作', align: 'center', fixed: 'right', templet: '<div><a href="javascript:;" class="layui-font-green" lay-event="edit"><strong>编辑</strong></a></div>' }
]] ]]
@ -139,6 +149,8 @@
account.editAccount(id); account.editAccount(id);
} else if (obj.event === 'channelList') { } else if (obj.event === 'channelList') {
account.channelList(id); account.channelList(id);
} else if (obj.event === 'copy') {
console.log(obj.getCol());
} }
}); });
// 表格头部按钮事件 // 表格头部按钮事件
@ -212,7 +224,7 @@
layer.open({ layer.open({
id: 'iframe-channel-list', id: 'iframe-channel-list',
type: 2, type: 2,
title: '收款终端', title: '收款',
shade: 0.1, shade: 0.1,
area: [common.isModile() ? '100%' : '500px', common.isModile() ? '100%' : '700px'], area: [common.isModile() ? '100%' : '500px', common.isModile() ? '100%' : '700px'],
content: `/PayManage/channelList?id=${id}`, content: `/PayManage/channelList?id=${id}`,