mirror of
https://gitee.com/technical-laohu/mpay.git
synced 2025-09-21 03:06:39 +08:00
修复安装时模板引用报错问题,
添加二维码图片上传功能,可以支持远程图片地址和生成二维码图片。
This commit is contained in:
parent
16513960ad
commit
40f07d9023
2
.env
2
.env
@ -1,4 +1,4 @@
|
|||||||
APP_DEBUG = false
|
APP_DEBUG = true
|
||||||
|
|
||||||
DB_TYPE = mysql
|
DB_TYPE = mysql
|
||||||
DB_HOST = 127.0.0.1
|
DB_HOST = 127.0.0.1
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
* 平台容易因为资质问题导致关站;
|
* 平台容易因为资质问题导致关站;
|
||||||
* 收取的手续费价格偏高;
|
* 收取的手续费价格偏高;
|
||||||
* 个人码在微信H5环境无法长按识别付款,能只技术PC端相机扫码付款。
|
* 个人码在微信H5环境无法长按识别付款,只能通过PC端,相机扫码付款。
|
||||||
|
|
||||||
#### 码支付(mpay)
|
#### 码支付(mpay)
|
||||||
|
|
||||||
|
@ -143,7 +143,22 @@ class PayManageController extends BaseController
|
|||||||
unlink($path);
|
unlink($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 上传二维码图片
|
||||||
|
public function uploadQrcode()
|
||||||
|
{
|
||||||
|
$img = $this->request->file('codeimg');
|
||||||
|
$path = public_path() . '/files/qrcode/';
|
||||||
|
if (!is_dir($path)) {
|
||||||
|
mkdir($path, 0777, true);
|
||||||
|
}
|
||||||
|
$info = $img->move($path, 'img' . time() . '.' . $img->getOriginalExtension());
|
||||||
|
if ($info) {
|
||||||
|
$imgpath = '/files/qrcode/';
|
||||||
|
return json(backMsg(0, '上传成功', ['imgpath' => $imgpath . $info->getFilename()]));
|
||||||
|
} else {
|
||||||
|
return json(backMsg(1, '上传失败'));
|
||||||
|
}
|
||||||
|
}
|
||||||
// 生成账号配置
|
// 生成账号配置
|
||||||
private function createAccountConfig($acc)
|
private function createAccountConfig($acc)
|
||||||
{
|
{
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 47 KiB |
@ -25,7 +25,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="type">
|
<select name="type" lay-filter="type">
|
||||||
<option value="">请选择</option>
|
<option value="">请选择</option>
|
||||||
<option value="0">付款链接</option>
|
<option value="0">付款链接</option>
|
||||||
<option value="1">图片地址</option>
|
<option value="1">图片地址</option>
|
||||||
@ -36,7 +36,7 @@
|
|||||||
<label class="layui-form-label">收款码</label>
|
<label class="layui-form-label">收款码</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
|
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
|
||||||
lay-filter="scanning" class="layui-input">
|
lay-filter="scanning" class="layui-input" data-type="">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -61,10 +61,34 @@
|
|||||||
layui.use(['form'], function () {
|
layui.use(['form'], function () {
|
||||||
let form = layui.form;
|
let form = layui.form;
|
||||||
|
|
||||||
form.on('input-affix(scanning)', function () {
|
form.on('input-affix(scanning)', function (obj) {
|
||||||
window.open('https://cli.im/deqr', '_blank');
|
const type = obj.elem.getAttribute('data-type');
|
||||||
|
if (type === '') {
|
||||||
|
layer.msg('请先选择二维码类型!', { tips: 2, time: 1200 });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type === 'img') {
|
||||||
|
uploadCodeImg(obj.elem);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type === 'link') {
|
||||||
|
window.open('https://cli.im/deqr', '_blank');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
form.on('select(type)', function (data) {
|
||||||
|
const form = data.elem.form;
|
||||||
|
const value = data.value;
|
||||||
|
const inuptelem = form.querySelector('input[name="qrcode"]');
|
||||||
|
if (value === '0') {
|
||||||
|
inuptelem.setAttribute('data-type', 'link');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (value === '1') {
|
||||||
|
inuptelem.setAttribute('data-type', 'img');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
form.on('submit(save)', function (obj) {
|
form.on('submit(save)', function (obj) {
|
||||||
let field = obj.field;
|
let field = obj.field;
|
||||||
field.account_id = '<?php echo $aid ?>';
|
field.account_id = '<?php echo $aid ?>';
|
||||||
@ -88,6 +112,40 @@
|
|||||||
})()
|
})()
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
// 上传二维码图片
|
||||||
|
async function uploadCodeImg(elem) {
|
||||||
|
const input = document.createElement('input');
|
||||||
|
input.type = 'file';
|
||||||
|
input.accept = 'image/*';
|
||||||
|
input.onchange = async (event) => {
|
||||||
|
const file = event.target.files[0];
|
||||||
|
if (file) {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('codeimg', file);
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/PayManage/uploadQrcode', {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData,
|
||||||
|
});
|
||||||
|
if (response.ok) {
|
||||||
|
const result = await response.json();
|
||||||
|
if (result.code === 0) {
|
||||||
|
layer.msg(result.msg, { icon: 1, time: 1200 });
|
||||||
|
elem.value = result.data.imgpath;
|
||||||
|
return result.data.imgpath;
|
||||||
|
} else {
|
||||||
|
layer.msg('上传失败:' + result.message, { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
layer.msg('上传失败:服务器错误', { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
layer.msg('上传失败:' + error.message, { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
input.click();
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -43,7 +43,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="type">
|
<select name="type" lay-filter="type">
|
||||||
<option value="">请选择</option>
|
<option value="">请选择</option>
|
||||||
<option value="0">付款链接</option>
|
<option value="0">付款链接</option>
|
||||||
<option value="1">图片地址</option>
|
<option value="1">图片地址</option>
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<label class="layui-form-label">收款码</label>
|
<label class="layui-form-label">收款码</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
|
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
|
||||||
lay-filter="scanning" class="layui-input">
|
lay-filter="scanning" class="layui-input" data-type="">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -79,9 +79,35 @@
|
|||||||
layui.use(['form'], function () {
|
layui.use(['form'], function () {
|
||||||
let form = layui.form;
|
let form = layui.form;
|
||||||
|
|
||||||
form.on('input-affix(scanning)', function () {
|
form.on('input-affix(scanning)', function (obj) {
|
||||||
window.open('https://cli.im/deqr', '_blank');
|
const type = obj.elem.getAttribute('data-type');
|
||||||
|
if (type === '') {
|
||||||
|
layer.msg('请先选择二维码类型!', { tips: 2, time: 1200 });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type === 'img') {
|
||||||
|
uploadCodeImg(obj.elem);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type === 'link') {
|
||||||
|
window.open('https://cli.im/deqr', '_blank');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
form.on('select(type)', function (data) {
|
||||||
|
const form = data.elem.form;
|
||||||
|
const value = data.value;
|
||||||
|
const inuptelem = form.querySelector('input[name="qrcode"]');
|
||||||
|
if (value === '0') {
|
||||||
|
inuptelem.setAttribute('data-type', 'link');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (value === '1') {
|
||||||
|
inuptelem.setAttribute('data-type', 'img');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// select 事件
|
// select 事件
|
||||||
form.on('select(select-type)', function (data) {
|
form.on('select(select-type)', function (data) {
|
||||||
const value = data.value; // 获得被选中的值
|
const value = data.value; // 获得被选中的值
|
||||||
@ -111,6 +137,40 @@
|
|||||||
})()
|
})()
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
// 上传二维码图片
|
||||||
|
async function uploadCodeImg(elem) {
|
||||||
|
const input = document.createElement('input');
|
||||||
|
input.type = 'file';
|
||||||
|
input.accept = 'image/*';
|
||||||
|
input.onchange = async (event) => {
|
||||||
|
const file = event.target.files[0];
|
||||||
|
if (file) {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('codeimg', file);
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/PayManage/uploadQrcode', {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData,
|
||||||
|
});
|
||||||
|
if (response.ok) {
|
||||||
|
const result = await response.json();
|
||||||
|
if (result.code === 0) {
|
||||||
|
layer.msg(result.msg, { icon: 1, time: 1200 });
|
||||||
|
elem.value = result.data.imgpath;
|
||||||
|
return result.data.imgpath;
|
||||||
|
} else {
|
||||||
|
layer.msg('上传失败:' + result.message, { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
layer.msg('上传失败:服务器错误', { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
layer.msg('上传失败:' + error.message, { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
input.click();
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -41,7 +41,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="type">
|
<select name="type" lay-filter="type">
|
||||||
<option value="">请选择</option>
|
<option value="">请选择</option>
|
||||||
<option value="0">付款链接</option>
|
<option value="0">付款链接</option>
|
||||||
<option value="1">图片地址</option>
|
<option value="1">图片地址</option>
|
||||||
@ -49,10 +49,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<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">
|
||||||
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
|
<input type="text" name="qrcode" autocomplete="off" lay-affix="upload-drag"
|
||||||
lay-filter="scanning" class="layui-input">
|
lay-filter="scanning" class="layui-input" data-type="<?php echo match ((int)$type) {0 => 'link',1 => 'img',default => ''}; ?>">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item" pane>
|
<div class="layui-form-item" pane>
|
||||||
@ -98,8 +98,33 @@
|
|||||||
"type": '<?php echo $type ?>'
|
"type": '<?php echo $type ?>'
|
||||||
});
|
});
|
||||||
|
|
||||||
form.on('input-affix(scanning)', function () {
|
form.on('input-affix(scanning)', function (obj) {
|
||||||
window.open('https://cli.im/deqr', '_blank');
|
const type = obj.elem.getAttribute('data-type');
|
||||||
|
if (type === '') {
|
||||||
|
layer.msg('请先选择二维码类型!', { tips: 2, time: 1200 });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type === 'img') {
|
||||||
|
uploadCodeImg(obj.elem);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type === 'link') {
|
||||||
|
window.open('https://cli.im/deqr', '_blank');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
form.on('select(type)', function (data) {
|
||||||
|
const form = data.elem.form;
|
||||||
|
const value = data.value;
|
||||||
|
const inuptelem = form.querySelector('input[name="qrcode"]');
|
||||||
|
if (value === '0') {
|
||||||
|
inuptelem.setAttribute('data-type', 'link');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (value === '1') {
|
||||||
|
inuptelem.setAttribute('data-type', 'img');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
form.on('submit(save)', function (obj) {
|
form.on('submit(save)', function (obj) {
|
||||||
@ -126,6 +151,40 @@
|
|||||||
})()
|
})()
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
// 上传二维码图片
|
||||||
|
async function uploadCodeImg(elem) {
|
||||||
|
const input = document.createElement('input');
|
||||||
|
input.type = 'file';
|
||||||
|
input.accept = 'image/*';
|
||||||
|
input.onchange = async (event) => {
|
||||||
|
const file = event.target.files[0];
|
||||||
|
if (file) {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('codeimg', file);
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/PayManage/uploadQrcode', {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData,
|
||||||
|
});
|
||||||
|
if (response.ok) {
|
||||||
|
const result = await response.json();
|
||||||
|
if (result.code === 0) {
|
||||||
|
layer.msg(result.msg, { icon: 1, time: 1200 });
|
||||||
|
elem.value = result.data.imgpath;
|
||||||
|
return result.data.imgpath;
|
||||||
|
} else {
|
||||||
|
layer.msg('上传失败:' + result.message, { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
layer.msg('上传失败:服务器错误', { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
layer.msg('上传失败:' + error.message, { tips: 2, time: 1200 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
input.click();
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
|
Loading…
Reference in New Issue
Block a user