Commit deee24e5 authored by jmdhappy's avatar jmdhappy
Browse files

提交转账,退款接口;重构商户通知;修复已知Bug

parent d5333a0d
package org.xxpay.mgr.service;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.xxpay.dal.dao.mapper.RefundOrderMapper;
import org.xxpay.dal.dao.model.RefundOrder;
import org.xxpay.dal.dao.model.RefundOrderExample;
import java.util.List;
/**
* Created by dingzhiwei on 17/11/03.
*/
@Component
public class RefundOrderService {
@Autowired
private RefundOrderMapper refundOrderMapper;
public RefundOrder selectRefundOrder(String refundOrderId) {
return refundOrderMapper.selectByPrimaryKey(refundOrderId);
}
public List<RefundOrder> getRefundOrderList(int offset, int limit, RefundOrder refundOrder) {
RefundOrderExample example = new RefundOrderExample();
example.setOrderByClause("createTime DESC");
example.setOffset(offset);
example.setLimit(limit);
RefundOrderExample.Criteria criteria = example.createCriteria();
setCriteria(criteria, refundOrder);
return refundOrderMapper.selectByExample(example);
}
public Integer count(RefundOrder refundOrder) {
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
setCriteria(criteria, refundOrder);
return refundOrderMapper.countByExample(example);
}
void setCriteria(RefundOrderExample.Criteria criteria, RefundOrder refundOrder) {
if(refundOrder != null) {
if(StringUtils.isNotBlank(refundOrder.getMchId())) criteria.andMchIdEqualTo(refundOrder.getMchId());
if(StringUtils.isNotBlank(refundOrder.getRefundOrderId())) criteria.andRefundOrderIdEqualTo(refundOrder.getRefundOrderId());
if(StringUtils.isNotBlank(refundOrder.getRefundOrderId())) criteria.andMchRefundNoEqualTo(refundOrder.getMchRefundNo());
if(StringUtils.isNotBlank(refundOrder.getChannelOrderNo())) criteria.andChannelOrderNoEqualTo(refundOrder.getChannelOrderNo());
if(refundOrder.getStatus() != null && refundOrder.getStatus() != -99) criteria.andStatusEqualTo(refundOrder.getStatus());
}
}
}
package org.xxpay.mgr.service;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.xxpay.dal.dao.mapper.TransOrderMapper;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dal.dao.model.TransOrderExample;
import java.util.List;
/**
* Created by dingzhiwei on 17/11/03.
*/
@Component
public class TransOrderService {
@Autowired
private TransOrderMapper transOrderMapper;
public TransOrder selectTransOrder(String transOrderId) {
return transOrderMapper.selectByPrimaryKey(transOrderId);
}
public List<TransOrder> getTransOrderList(int offset, int limit, TransOrder transOrder) {
TransOrderExample example = new TransOrderExample();
example.setOrderByClause("createTime DESC");
example.setOffset(offset);
example.setLimit(limit);
TransOrderExample.Criteria criteria = example.createCriteria();
setCriteria(criteria, transOrder);
return transOrderMapper.selectByExample(example);
}
public Integer count(TransOrder transOrder) {
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
setCriteria(criteria, transOrder);
return transOrderMapper.countByExample(example);
}
void setCriteria(TransOrderExample.Criteria criteria, TransOrder transOrder) {
if(transOrder != null) {
if(StringUtils.isNotBlank(transOrder.getMchId())) criteria.andMchIdEqualTo(transOrder.getMchId());
if(StringUtils.isNotBlank(transOrder.getTransOrderId())) criteria.andTransOrderIdEqualTo(transOrder.getTransOrderId());
if(StringUtils.isNotBlank(transOrder.getMchTransNo())) criteria.andMchTransNoEqualTo(transOrder.getMchTransNo());
if(StringUtils.isNotBlank(transOrder.getChannelOrderNo())) criteria.andChannelOrderNoEqualTo(transOrder.getChannelOrderNo());
if(transOrder.getStatus() != null && transOrder.getStatus() != -99) criteria.andStatusEqualTo(transOrder.getStatus());
}
}
}
......@@ -10,6 +10,10 @@ var navs = [{
"title": "支付渠道",
"icon": "&#xe63c;",
"href": "/pay_channel/list.html"
}, {
"title": "商户通知",
"icon": "&#xe63c;",
"href": "/mch_notify/list.html"
}]
},{
"title": "订单管理",
......@@ -19,5 +23,13 @@ var navs = [{
"title": "支付订单",
"icon": "fa-check-square-o",
"href": "/pay_order/list.html"
}, {
"title": "转账订单",
"icon": "fa-check-square-o",
"href": "/trans_order/list.html"
}, {
"title": "退款订单",
"icon": "fa-check-square-o",
"href": "/refund_order/list.html"
}]
}];
\ No newline at end of file
......@@ -77,8 +77,8 @@
</td>
<td>{{ item.createTime }}</td>
<td>
<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">预览</a>
<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="edit" class="layui-btn layui-btn-mini">编辑</a>
<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">详情</a>
<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="notify" class="layui-btn layui-btn-mini">编辑</a>
<!--<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="del" class="layui-btn layui-btn-danger layui-btn-mini">删除</a>-->
</td>
</tr>
......@@ -133,7 +133,7 @@
//绑定所有编辑按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=edit]').on('click', function() {
$that.children('td:last-child').children('a[data-opt=notify]').on('click', function() {
editForm($(this).data('id'));
});
});
......@@ -205,7 +205,7 @@
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: true,
maxmin: false,
full: function(elem) {
var win = window.top === window.self ? window : parent.window;
......@@ -222,6 +222,7 @@
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
......@@ -237,7 +238,7 @@
offset: ['100px', '30%'],
area: ['600px', '450px'],
zIndex: 19950924,
maxmin: true,
maxmin: false,
yes: function(index) {
//触发表单的提交事件
$('form.layui-form').find('button[lay-filter=edit]').click();
......@@ -282,6 +283,7 @@
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
});
......
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>商户通知</title>
<link rel="stylesheet" href="../plugins/layui/css/layui.css" media="all" />
<link rel="stylesheet" href="../css/global.css" media="all">
<link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../css/table.css" />
</head>
<body>
<div class="admin-main">
<blockquote class="layui-elem-quote">
<div class="layui-btn layui-btn-small" id=""></div>
<div class="layui-form" style="float:right;">
<div class="layui-form-item" style="margin:0;">
<label class="layui-form-label">订单号</label>
<div class="layui-input-inline">
<input type="text" name="orderId" id="orderId" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label">商户单号</label>
<div class="layui-input-inline">
<input type="text" name="mchOrderNo" id="mchOrderNo" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label">通知状态</label>
<div class="layui-input-inline">
<select name="status" id="status" lay-search="">
<option value="-99">所有状态</option>
<option value="1" >通知中</option>
<option value="2" >通知成功</option>
<option value="3" >通知失败</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux" style="padding:0;">
<button id="search" lay-filter="search" class="layui-btn" lay-submit><i class="fa fa-search" aria-hidden="true"></i> 查询</button>
</div>
</div>
</div>
</blockquote>
<fieldset class="layui-elem-field">
<legend>通知列表</legend>
<div class="layui-field-box layui-form">
<table class="layui-table admin-table">
<thead>
<tr>
<th style="width: 30px;"><input type="checkbox" lay-filter="allselector" lay-skin="primary"></th>
<th>订单号</th>
<th>商户ID</th>
<th>订单类型</th>
<th>通知次数</th>
<th>状态</th>
<th>最后通知</th>
<th>操作</th>
</tr>
</thead>
<tbody id="content">
</tbody>
</table>
</div>
</fieldset>
<div class="admin-table-page">
<div id="paged" class="page">
</div>
</div>
</div>
<!--模板-->
<script type="text/html" id="tpl">
{{# layui.each(d.list, function(index, item){ }}
<tr>
<td><input type="checkbox" lay-skin="primary"></td>
<td>{{ item.orderId }}</td>
<td>{{ item.mchId }}</td>
<td>
{{# if(item.orderType === '1'){ }} <span>支付</span> {{# } }}
{{# if(item.orderType === '2'){ }} <span>转账</span> {{# } }}
{{# if(item.orderType === '3'){ }} <span>退款</span> {{# } }}
</td>
<td>{{ item.notifyCount }}</td>
<td>
{{# if(item.status === 1){ }} <span style="color: blue">通知中</span> {{# } }}
{{# if(item.status === 2){ }} <span style="color: green">通知成功</span> {{# } }}
{{# if(item.status === 3){ }} <span style="color: red">通知失败</span> {{# } }}
</td>
<td>{{ item.lastNotifyTime }}</td>
<td>
<a href="javascript:;" data-id="{{ item.orderId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">查看详情</a>
<a href="javascript:;" data-id="{{ item.orderId }}" data-opt="edit" class="layui-btn layui-btn-mini">发送通知</a>
<!--<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="del" class="layui-btn layui-btn-danger layui-btn-mini">删除</a>-->
</td>
</tr>
{{# }); }}
</script>
<script type="text/javascript" src="../plugins/layui/layui.js"></script>
<script>
layui.config({
base: '../js/'
});
layui.use(['paging', 'form'], function() {
var $ = layui.jquery,
paging = layui.paging(),
layerTips = parent.layer === undefined ? layui.layer : parent.layer, //获取父窗口的layer对象
layer = layui.layer, //获取当前窗口的layer对象
form = layui.form();
paging.init({
openWait: true,
url: '/mch_notify/list?v=' + new Date().getTime(), //地址
elem: '#content', //内容容器
params: { //发送到服务端的参数
},
type: 'GET',
tempElem: '#tpl', //模块容器
pageConfig: { //分页参数配置
elem: '#paged', //分页容器
pageSize: 10 //分页大小
},
success: function() { //渲染成功的回调
//alert('渲染成功');
},
fail: function(msg) { //获取数据失败的回调
//alert('获取数据失败')
},
complate: function() { //完成的回调
//alert('处理完成');
//重新渲染复选框
form.render('checkbox');
form.on('checkbox(allselector)', function(data) {
var elem = data.elem;
$('#content').children('tr').each(function() {
var $that = $(this);
//全选或反选
$that.children('td').eq(0).children('input[type=checkbox]')[0].checked = elem.checked;
form.render('checkbox');
});
});
//绑定所有预览按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=view]').on('click', function() {
viewForm($(this).data('id'));
});
});
//绑定所有编辑按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=edit]').on('click', function() {
layer.confirm('确定重新发送通知么?', {
btn: ['发送','不发送'] //按钮
}, function(){
layer.msg('功能还再开发中...', {icon: 1});
}, function(){
});
});
});
//绑定所有删除按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=del]').on('click', function() {
layer.msg($(this).data('id'));
});
});
},
});
//获取所有选择的列
$('#getSelected').on('click', function() {
var names = '';
$('#content').children('tr').each(function() {
var $that = $(this);
var $cbx = $that.children('td').eq(0).children('input[type=checkbox]')[0].checked;
if($cbx) {
var n = $that.children('td:last-child').children('a[data-opt=edit]').data('name');
names += n + ',';
}
});
layer.msg('你选择的名称有:' + names);
});
$('#search').on('click', function() {
var mchOrderNo = $("#mchOrderNo").val();
var orderId = $("#orderId").val();
var status = $("#status").val();
paging.get({
"mchOrderNo": mchOrderNo,
"orderId":orderId,
"status":status,
"v":new Date().getTime()
});
});
var addBoxIndex = -1;
$('#import').on('click', function() {
var that = this;
var index = layer.tips('只想提示地精准些', that, { tips: [1, 'white'] });
$('#layui-layer' + index).children('div.layui-layer-content').css('color', '#000000');
});
function viewForm(id) {
//本表单通过ajax加载 --以模板的形式,当然你也可以直接写在页面上读取
$.get('/mch_notify/view.html?orderId=' + id, null, function(form) {
addBoxIndex = layer.open({
type: 1,
title: '订单详情',
content: form,
shade: false,
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: false,
full: function(elem) {
var win = window.top === window.self ? window : parent.window;
$(win).on('resize', function() {
var $this = $(this);
elem.width($this.width()).height($this.height()).css({
top: 0,
left: 0
});
elem.children('div.layui-layer-content').height($this.height() - 95);
});
},
end: function() {
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
});
</script>
</body>
</html>
\ No newline at end of file
<div style="margin: 15px;">
<form class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">订单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.orderId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户ID</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.mchId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.mchOrderNo!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">订单类型</label>
<div class="layui-input-block">
<#if item.status = 1>
<input type="text" disabled="disabled" class="layui-input" value="支付订单" }">
<#elseif item.status = 2>
<input type="text" disabled="disabled" class="layui-input" value="转账订单" }">
<#elseif item.status = 3>
<input type="text" disabled="disabled" class="layui-input" value="退款订单" }">
<#else>
</#if>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知状态</label>
<div class="layui-input-block">
<#if item.status = 1>
<input type="text" style="color: blue" disabled="disabled" class="layui-input" value="通知中" }">
<#elseif item.status = 2>
<input type="text" style="color: green" disabled="disabled" class="layui-input" value="通知成功" }">
<#elseif item.status = 3>
<input type="text" style="color: red" disabled="disabled" class="layui-input" value="通知失败" }">
<#else>
</#if>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知结果</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.result!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知地址</label>
<div class="layui-input-block">
<textarea disabled="disabled" class="layui-textarea">${item.notifyUrl!"" }</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知次数</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.notifyCount!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最后通知</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.lastNotifyTime!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">创建时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.createTime!"" } ">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">更新时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.updateTime!"" } ">
</div>
</div>
<button lay-filter="edit" lay-submit style="display: none;"></button>
</form>
</div>
\ No newline at end of file
......@@ -73,7 +73,7 @@
<td>{{ item.remark }}</td>
<td>{{ item.createTime }}</td>
<td>
<a href="javascript:;" data-id="{{ item.id }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">预览</a>
<a href="javascript:;" data-id="{{ item.id }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">详情</a>
<a href="javascript:;" data-id="{{ item.id }}" data-opt="edit" class="layui-btn layui-btn-mini">编辑</a>
<!--<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="del" class="layui-btn layui-btn-danger layui-btn-mini">删除</a>-->
</td>
......@@ -201,7 +201,7 @@
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: true,
maxmin: false,
full: function(elem) {
var win = window.top === window.self ? window : parent.window;
......@@ -218,6 +218,7 @@
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
......@@ -233,7 +234,7 @@
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: true,
maxmin: false,
yes: function(index) {
//触发表单的提交事件
$('form.layui-form').find('button[lay-filter=edit]').click();
......@@ -276,6 +277,7 @@
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
});
......
......@@ -50,7 +50,6 @@
<tr>
<th style="width: 30px;"><input type="checkbox" lay-filter="allselector" lay-skin="primary"></th>
<th>支付单号</th>
<th>商户单号</th>
<th>商户ID</th>
<th>渠道ID</th>
<th>金额(元)</th>
......@@ -75,7 +74,6 @@
<tr>
<td><input type="checkbox" lay-skin="primary"></td>
<td>{{ item.payOrderId }}</td>
<td>{{ item.mchOrderNo }}</td>
<td>{{ item.mchId }}</td>
<td>{{ item.channelId }}</td>
<td>{{ item.amount }}</td>
......@@ -87,8 +85,8 @@
</td>
<td>{{ item.createTime }}</td>
<td>
<a href="javascript:;" data-id="{{ item.payOrderId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">预览</a>
<!--<a href="javascript:;" data-id="{{ item.payOrderId }}" data-opt="edit" class="layui-btn layui-btn-mini">编辑</a>-->
<a href="javascript:;" data-id="{{ item.payOrderId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">订单详情</a>
<#--<a href="javascript:;" data-id="{{ item.payOrderId }}" data-opt="refund" class="layui-btn layui-btn-mini">发起退款</a>-->
<!--<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="del" class="layui-btn layui-btn-danger layui-btn-mini">删除</a>-->
</td>
</tr>
......@@ -150,10 +148,15 @@
//绑定所有编辑按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=edit]').on('click', function() {
editForm($(this).data('id'));
});
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=refund]').on('click', function() {
layer.confirm('确定发起退款么?', {
btn: ['退款','放弃'] //按钮
}, function(){
layer.msg('功能还再开发中...', {icon: 1});
}, function(){
});
});
});
//绑定所有删除按钮事件
......@@ -212,7 +215,7 @@
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: true,
maxmin: false,
full: function(elem) {
var win = window.top === window.self ? window : parent.window;
......@@ -229,6 +232,7 @@
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
});
......
......@@ -57,12 +57,6 @@
<input type="text" disabled="disabled" class="layui-input" value="${item.body!"" }">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">扩展参数</label>
<div class="layui-input-block">
<textarea disabled="disabled" class="layui-textarea">${item.extra!"" }</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道商户ID</label>
<div class="layui-input-block">
......@@ -87,6 +81,12 @@
<input type="text" disabled="disabled" class="layui-input" value="${item.errMsg!"" }">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">扩展参数</label>
<div class="layui-input-block">
<textarea disabled="disabled" class="layui-textarea">${item.extra!"" }</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数1</label>
<div class="layui-input-block">
......@@ -105,18 +105,6 @@
<input type="text" disabled="disabled" class="layui-input" value="${item.notifyUrl!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知次数</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.notifyCount!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最后通知</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.lastNotifyTime!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">失效时间</label>
<div class="layui-input-block">
......
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>退款订单</title>
<link rel="stylesheet" href="../plugins/layui/css/layui.css" media="all" />
<link rel="stylesheet" href="../css/global.css" media="all">
<link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../css/table.css" />
</head>
<body>
<div class="admin-main">
<blockquote class="layui-elem-quote">
<div class="layui-btn layui-btn-small" id=""></div>
<div class="layui-form" style="float:right;">
<div class="layui-form-item" style="margin:0;">
<label class="layui-form-label">退款单号</label>
<div class="layui-input-inline">
<input type="text" name="refundOrderId" id="refundOrderId" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label">商户ID</label>
<div class="layui-input-inline">
<input type="text" name="mchId" id="mchId" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label">订单状态</label>
<div class="layui-input-inline">
<select name="status" id="status" lay-search="">
<option value="-99">所有状态</option>
<option value="0" >订单生成</option>
<option value="1" >退款中</option>
<option value="2" >退款成功</option>
<option value="3" >退款失败</option>
<option value="4" >处理完成</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux" style="padding:0;">
<button id="search" lay-filter="search" class="layui-btn" lay-submit><i class="fa fa-search" aria-hidden="true"></i> 查询</button>
</div>
</div>
</div>
</blockquote>
<fieldset class="layui-elem-field">
<legend>订单列表</legend>
<div class="layui-field-box layui-form">
<table class="layui-table admin-table">
<thead>
<tr>
<th style="width: 30px;"><input type="checkbox" lay-filter="allselector" lay-skin="primary"></th>
<th>退款单号</th>
<th>商户ID</th>
<th>渠道ID</th>
<th>金额(元)</th>
<th>状态</th>
<th>退款结果</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody id="content">
</tbody>
</table>
</div>
</fieldset>
<div class="admin-table-page">
<div id="paged" class="page">
</div>
</div>
</div>
<!--模板-->
<script type="text/html" id="tpl">
{{# layui.each(d.list, function(index, item){ }}
<tr>
<td><input type="checkbox" lay-skin="primary"></td>
<td>{{ item.refundOrderId }}</td>
<td>{{ item.mchId }}</td>
<td>{{ item.channelId }}</td>
<td>{{ item.amount }}</td>
<td>
{{# if(item.status === 0){ }} <span style="color: black">订单生成</span> {{# } }}
{{# if(item.status === 1){ }} <span style="color: blue">退款中</span> {{# } }}
{{# if(item.status === 2){ }} <span style="color: green">退款成功</span> {{# } }}
{{# if(item.status === 3){ }} <span style="color: red">退款失败</span> {{# } }}
{{# if(item.status === 4){ }} <span style="color: orange">处理完成</span> {{# } }}
</td>
<td>
{{# if(item.result === 0){ }} <span style="color: black">不确定结果</span> {{# } }}
{{# if(item.result === 1){ }} <span style="color: blue">等待手动处理</span> {{# } }}
{{# if(item.result === 2){ }} <span style="color: green">确认成功</span> {{# } }}
{{# if(item.result === 3){ }} <span style="color: red">确认失败</span> {{# } }}
</td>
<td>{{ item.createTime }}</td>
<td>
<a href="javascript:;" data-id="{{ item.refundOrderId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">订单详情</a>
<#--<a href="javascript:;" data-id="{{ item.payOrderId }}" data-opt="refund" class="layui-btn layui-btn-mini">重新退款</a>-->
<!--<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="del" class="layui-btn layui-btn-danger layui-btn-mini">删除</a>-->
</td>
</tr>
{{# }); }}
</script>
<script type="text/javascript" src="../plugins/layui/layui.js"></script>
<script>
layui.config({
base: '../js/'
});
layui.use(['paging', 'form'], function() {
var $ = layui.jquery,
paging = layui.paging(),
layerTips = parent.layer === undefined ? layui.layer : parent.layer, //获取父窗口的layer对象
layer = layui.layer, //获取当前窗口的layer对象
form = layui.form();
paging.init({
openWait: true,
url: '/refund_order/list?v=' + new Date().getTime(), //地址
elem: '#content', //内容容器
params: { //发送到服务端的参数
},
type: 'GET',
tempElem: '#tpl', //模块容器
pageConfig: { //分页参数配置
elem: '#paged', //分页容器
pageSize: 10 //分页大小
},
success: function() { //渲染成功的回调
//alert('渲染成功');
},
fail: function(msg) { //获取数据失败的回调
//alert('获取数据失败')
},
complate: function() { //完成的回调
//alert('处理完成');
//重新渲染复选框
form.render('checkbox');
form.on('checkbox(allselector)', function(data) {
var elem = data.elem;
$('#content').children('tr').each(function() {
var $that = $(this);
//全选或反选
$that.children('td').eq(0).children('input[type=checkbox]')[0].checked = elem.checked;
form.render('checkbox');
});
});
//绑定所有预览按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=view]').on('click', function() {
viewForm($(this).data('id'));
});
});
//绑定所有编辑按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=refund]').on('click', function() {
layer.confirm('确定重新退款么?', {
btn: ['退款','放弃'] //按钮
}, function(){
layer.msg('功能还再开发中...', {icon: 1});
}, function(){
});
});
});
//绑定所有删除按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=del]').on('click', function() {
layer.msg($(this).data('id'));
});
});
},
});
//获取所有选择的列
$('#getSelected').on('click', function() {
var names = '';
$('#content').children('tr').each(function() {
var $that = $(this);
var $cbx = $that.children('td').eq(0).children('input[type=checkbox]')[0].checked;
if($cbx) {
var n = $that.children('td:last-child').children('a[data-opt=edit]').data('name');
names += n + ',';
}
});
layer.msg('你选择的名称有:' + names);
});
$('#search').on('click', function() {
var mchId = $("#mchId").val();
var refundOrderId = $("#refundOrderId").val();
var status = $("#status").val();
paging.get({
"mchId": mchId,
"refundOrderId":refundOrderId,
"status":status,
"v":new Date().getTime()
});
});
var addBoxIndex = -1;
$('#import').on('click', function() {
var that = this;
var index = layer.tips('只想提示地精准些', that, { tips: [1, 'white'] });
$('#layui-layer' + index).children('div.layui-layer-content').css('color', '#000000');
});
function viewForm(id) {
//本表单通过ajax加载 --以模板的形式,当然你也可以直接写在页面上读取
$.get('/refund_order/view.html?refundOrderId=' + id, null, function(form) {
addBoxIndex = layer.open({
type: 1,
title: '订单详情',
content: form,
shade: false,
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: false,
full: function(elem) {
var win = window.top === window.self ? window : parent.window;
$(win).on('resize', function() {
var $this = $(this);
elem.width($this.width()).height($this.height()).css({
top: 0,
left: 0
});
elem.children('div.layui-layer-content').height($this.height() - 95);
});
},
end: function() {
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
});
</script>
</body>
</html>
\ No newline at end of file
<div style="margin: 15px;">
<form class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">退款单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.refundOrderId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">支付单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.payOrderId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户ID</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.mchId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.mchRefundNo!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">金额(元)</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.amount!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">币种</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.currency!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">订单状态</label>
<div class="layui-input-block">
<#if item.status = 0>
<input type="text" style="color: black" disabled="disabled" class="layui-input" value="订单生成" }">
<#elseif item.status = 1>
<input type="text" style="color: blue" disabled="disabled" class="layui-input" value="退款中" }">
<#elseif item.status = 2>
<input type="text" style="color: green" disabled="disabled" class="layui-input" value="退款成功" }">
<#elseif item.status = 3>
<input type="text" style="color: red" disabled="disabled" class="layui-input" value="退款失败" }">
<#elseif item.status = 4>
<input type="text" style="color: orange" disabled="disabled" class="layui-input" value="处理完成" }">
<#else>
</#if>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">退款结果</label>
<div class="layui-input-block">
<#if item.result = 0>
<input type="text" style="color: black" disabled="disabled" class="layui-input" value="不确认结果" }">
<#elseif item.result = 1>
<input type="text" style="color: blue" disabled="disabled" class="layui-input" value="等待手动处理" }">
<#elseif item.result = 2>
<input type="text" style="color: green" disabled="disabled" class="layui-input" value="确认成功" }">
<#elseif item.result = 3>
<input type="text" style="color: red" disabled="disabled" class="layui-input" value="确认失败" }">
<#else>
</#if>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道用户</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelUser!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">用户姓名</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.userName!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道商户ID</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelMchId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelOrderNo!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">错误码</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelErrCode!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">错误消息</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelErrMsg!"" }">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">扩展参数</label>
<div class="layui-input-block">
<textarea disabled="disabled" class="layui-textarea">${item.extra!"" }</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数1</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.param1!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数2</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.param2!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知地址</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.notifyUrl!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">失效时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.expireTime!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">成功时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.refundSuccTime!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">创建时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${(item.createTime?string("yyyy-MM-dd HH:mm:ss"))!''} ">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">更新时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${(item.updateTime?string("yyyy-MM-dd HH:mm:ss"))!''} ">
</div>
</div>
<button lay-filter="edit" lay-submit style="display: none;"></button>
</form>
</div>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>转账订单</title>
<link rel="stylesheet" href="../plugins/layui/css/layui.css" media="all" />
<link rel="stylesheet" href="../css/global.css" media="all">
<link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../css/table.css" />
</head>
<body>
<div class="admin-main">
<blockquote class="layui-elem-quote">
<div class="layui-btn layui-btn-small" id=""></div>
<div class="layui-form" style="float:right;">
<div class="layui-form-item" style="margin:0;">
<label class="layui-form-label">转账单号</label>
<div class="layui-input-inline">
<input type="text" name="transOrderId" id="transOrderId" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label">商户ID</label>
<div class="layui-input-inline">
<input type="text" name="mchId" id="mchId" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label">订单状态</label>
<div class="layui-input-inline">
<select name="status" id="status" lay-search="">
<option value="-99">所有状态</option>
<option value="0" >订单生成</option>
<option value="1" >转账中</option>
<option value="2" >转账成功</option>
<option value="3" >转账失败</option>
<option value="4" >处理完成</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux" style="padding:0;">
<button id="search" lay-filter="search" class="layui-btn" lay-submit><i class="fa fa-search" aria-hidden="true"></i> 查询</button>
</div>
</div>
</div>
</blockquote>
<fieldset class="layui-elem-field">
<legend>订单列表</legend>
<div class="layui-field-box layui-form">
<table class="layui-table admin-table">
<thead>
<tr>
<th style="width: 30px;"><input type="checkbox" lay-filter="allselector" lay-skin="primary"></th>
<th>转账单号</th>
<th>商户ID</th>
<th>渠道ID</th>
<th>金额(元)</th>
<th>状态</th>
<th>转账结果</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody id="content">
</tbody>
</table>
</div>
</fieldset>
<div class="admin-table-page">
<div id="paged" class="page">
</div>
</div>
</div>
<!--模板-->
<script type="text/html" id="tpl">
{{# layui.each(d.list, function(index, item){ }}
<tr>
<td><input type="checkbox" lay-skin="primary"></td>
<td>{{ item.transOrderId }}</td>
<td>{{ item.mchId }}</td>
<td>{{ item.channelId }}</td>
<td>{{ item.amount }}</td>
<td>
{{# if(item.status === 0){ }} <span style="color: black">订单生成</span> {{# } }}
{{# if(item.status === 1){ }} <span style="color: blue">转账中</span> {{# } }}
{{# if(item.status === 2){ }} <span style="color: green">转账成功</span> {{# } }}
{{# if(item.status === 3){ }} <span style="color: red">转账失败</span> {{# } }}
{{# if(item.status === 4){ }} <span style="color: orange">处理完成</span> {{# } }}
</td>
<td>
{{# if(item.result === 0){ }} <span style="color: black">不确定结果</span> {{# } }}
{{# if(item.result === 1){ }} <span style="color: blue">等待手动处理</span> {{# } }}
{{# if(item.result === 2){ }} <span style="color: green">确认成功</span> {{# } }}
{{# if(item.result === 3){ }} <span style="color: red">确认失败</span> {{# } }}
</td>
<td>{{ item.createTime }}</td>
<td>
<a href="javascript:;" data-id="{{ item.transOrderId }}" data-opt="view" class="layui-btn layui-btn-normal layui-btn-mini">订单详情</a>
<#--<a href="javascript:;" data-id="{{ item.transOrderId }}" data-opt="trans" class="layui-btn layui-btn-mini">重新转账</a>-->
<!--<a href="javascript:;" data-id="{{ item.mchId }}" data-opt="del" class="layui-btn layui-btn-danger layui-btn-mini">删除</a>-->
</td>
</tr>
{{# }); }}
</script>
<script type="text/javascript" src="../plugins/layui/layui.js"></script>
<script>
layui.config({
base: '../js/'
});
layui.use(['paging', 'form'], function() {
var $ = layui.jquery,
paging = layui.paging(),
layerTips = parent.layer === undefined ? layui.layer : parent.layer, //获取父窗口的layer对象
layer = layui.layer, //获取当前窗口的layer对象
form = layui.form();
paging.init({
openWait: true,
url: '/trans_order/list?v=' + new Date().getTime(), //地址
elem: '#content', //内容容器
params: { //发送到服务端的参数
},
type: 'GET',
tempElem: '#tpl', //模块容器
pageConfig: { //分页参数配置
elem: '#paged', //分页容器
pageSize: 10 //分页大小
},
success: function() { //渲染成功的回调
//alert('渲染成功');
},
fail: function(msg) { //获取数据失败的回调
//alert('获取数据失败')
},
complate: function() { //完成的回调
//alert('处理完成');
//重新渲染复选框
form.render('checkbox');
form.on('checkbox(allselector)', function(data) {
var elem = data.elem;
$('#content').children('tr').each(function() {
var $that = $(this);
//全选或反选
$that.children('td').eq(0).children('input[type=checkbox]')[0].checked = elem.checked;
form.render('checkbox');
});
});
//绑定所有预览按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=view]').on('click', function() {
viewForm($(this).data('id'));
});
});
//绑定所有编辑按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=trans]').on('click', function() {
layer.confirm('确定重新转账么?', {
btn: ['转账','放弃'] //按钮
}, function(){
layer.msg('功能还再开发中...', {icon: 1});
}, function(){
});
});
});
//绑定所有删除按钮事件
$('#content').children('tr').each(function() {
var $that = $(this);
$that.children('td:last-child').children('a[data-opt=del]').on('click', function() {
layer.msg($(this).data('id'));
});
});
},
});
//获取所有选择的列
$('#getSelected').on('click', function() {
var names = '';
$('#content').children('tr').each(function() {
var $that = $(this);
var $cbx = $that.children('td').eq(0).children('input[type=checkbox]')[0].checked;
if($cbx) {
var n = $that.children('td:last-child').children('a[data-opt=edit]').data('name');
names += n + ',';
}
});
layer.msg('你选择的名称有:' + names);
});
$('#search').on('click', function() {
var mchId = $("#mchId").val();
var transOrderId = $("#transOrderId").val();
var status = $("#status").val();
paging.get({
"mchId": mchId,
"transOrderId":transOrderId,
"status":status,
"v":new Date().getTime()
});
});
var addBoxIndex = -1;
$('#import').on('click', function() {
var that = this;
var index = layer.tips('只想提示地精准些', that, { tips: [1, 'white'] });
$('#layui-layer' + index).children('div.layui-layer-content').css('color', '#000000');
});
function viewForm(id) {
//本表单通过ajax加载 --以模板的形式,当然你也可以直接写在页面上读取
$.get('/trans_order/view.html?transOrderId=' + id, null, function(form) {
addBoxIndex = layer.open({
type: 1,
title: '订单详情',
content: form,
shade: false,
offset: ['100px', '30%'],
area: ['600px', '550px'],
zIndex: 19950924,
maxmin: false,
full: function(elem) {
var win = window.top === window.self ? window : parent.window;
$(win).on('resize', function() {
var $this = $(this);
elem.width($this.width()).height($this.height()).css({
top: 0,
left: 0
});
elem.children('div.layui-layer-content').height($this.height() - 95);
});
},
end: function() {
addBoxIndex = -1;
}
});
layer.full(addBoxIndex);
});
}
});
</script>
</body>
</html>
\ No newline at end of file
<div style="margin: 15px;">
<form class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">转账单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.transOrderId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户ID</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.mchId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商户单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.mchTransNo!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">金额(元)</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.amount!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">币种</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.currency!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转账状态</label>
<div class="layui-input-block">
<#if item.status = 0>
<input type="text" style="color: black" disabled="disabled" class="layui-input" value="订单生成" }">
<#elseif item.status = 1>
<input type="text" style="color: blue" disabled="disabled" class="layui-input" value="转账中" }">
<#elseif item.status = 2>
<input type="text" style="color: green" disabled="disabled" class="layui-input" value="转账成功" }">
<#elseif item.status = 3>
<input type="text" style="color: red" disabled="disabled" class="layui-input" value="转账失败" }">
<#elseif item.status = 4>
<input type="text" style="color: orange" disabled="disabled" class="layui-input" value="处理完成" }">
<#else>
</#if>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转账结果</label>
<div class="layui-input-block">
<#if item.result = 0>
<input type="text" style="color: black" disabled="disabled" class="layui-input" value="不确认结果" }">
<#elseif item.result = 1>
<input type="text" style="color: blue" disabled="disabled" class="layui-input" value="等待手动处理" }">
<#elseif item.result = 2>
<input type="text" style="color: green" disabled="disabled" class="layui-input" value="确认成功" }">
<#elseif item.result = 3>
<input type="text" style="color: red" disabled="disabled" class="layui-input" value="确认失败" }">
<#else>
</#if>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道用户</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelUser!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">用户姓名</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.userName!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道商户ID</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelMchId!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">渠道单号</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelOrderNo!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">错误码</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelErrCode!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">错误消息</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.channelErrMsg!"" }">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">扩展参数</label>
<div class="layui-input-block">
<textarea disabled="disabled" class="layui-textarea">${item.extra!"" }</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数1</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.param1!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数2</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.param2!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知地址</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.notifyUrl!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">失效时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.expireTime!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">成功时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${item.transSuccTime!"" }">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">创建时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${(item.createTime?string("yyyy-MM-dd HH:mm:ss"))!''} ">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">更新时间</label>
<div class="layui-input-block">
<input type="text" disabled="disabled" class="layui-input" value="${(item.updateTime?string("yyyy-MM-dd HH:mm:ss"))!''} ">
</div>
</div>
<button lay-filter="edit" lay-submit style="display: none;"></button>
</form>
</div>
\ No newline at end of file
......@@ -42,9 +42,10 @@ public class GoodsOrderController {
static final String reqKey = "M86l522AV6q613Ii4W6u8K48uW8vM1N6bFgyv769220MdYe9u37N4y7rI5mQ";
// 验签key
static final String resKey = "Hpcl522AV6q613KIi46u6g6XuW8vM1N8bFgyv769770MdYe9u37M4y7rIpl8";
static final String baseUrl = "http://api.xxpay.org/api";
//static final String baseUrl = "http://xxpay.ngrok.cc";
//static final String baseUrl = "http://api.xxpay.org/api";
static final String baseUrl = "http://127.0.0.1:3020/api";
//static final String notifyUrl = "http://shop.xxpay.org/goods/payNotify";
static final String notifyUrl = "http://127.0.0.1:8081/goods/payNotify";
private AtomicLong seq = new AtomicLong(0L);
private final static String QR_PAY_URL = "http://shop.xxpay.org/goods/qrPay.html";
static final String AppID = "wx077cb62e341f8a5c";
......@@ -91,7 +92,7 @@ public class GoodsOrderController {
paramMap.put("device", "WEB"); // 设备
paramMap.put("subject", goodsOrder.getGoodsName());
paramMap.put("body", goodsOrder.getGoodsName());
paramMap.put("notifyUrl", "http://shop.xxpay.org/goods/payNotify"); // 回调URL
paramMap.put("notifyUrl", notifyUrl); // 回调URL
paramMap.put("param1", ""); // 扩展参数1
paramMap.put("param2", ""); // 扩展参数2
paramMap.put("extra", "{\"productId\":\"120989823\",\"openId\":\"o2RvowBf7sOVJf8kJksUEMceaDqo\"}"); // 附加参数
......@@ -137,7 +138,7 @@ public class GoodsOrderController {
paramMap.put("device", "WEB"); // 设备
paramMap.put("subject", goodsOrder.getGoodsName());
paramMap.put("body", goodsOrder.getGoodsName());
paramMap.put("notifyUrl", "http://shop.xxpay.org/goods/payNotify"); // 回调URL
paramMap.put("notifyUrl", notifyUrl); // 回调URL
paramMap.put("param1", ""); // 扩展参数1
paramMap.put("param2", ""); // 扩展参数2
......@@ -382,6 +383,11 @@ public class GoodsOrderController {
_log.info("====== 支付中心通知处理完成 ======");
}
@RequestMapping("/notify_test")
public void notifyTest(HttpServletRequest request, HttpServletResponse response) throws Exception {
outResult(response, "success");
}
@RequestMapping("/toAliPay.html")
@ResponseBody
public String toAliPay(HttpServletRequest request, Long amount, String channelId) {
......@@ -465,7 +471,7 @@ public class GoodsOrderController {
// 根据payOrderId查询业务订单,验证订单是否存在
GoodsOrder goodsOrder = goodsOrderService.getGoodsOrder(mchOrderNo);
if(goodsOrder == null) {
_log.warn("业务订单不存在,payOrderId={},mchOrderNo", payOrderId, mchOrderNo);
_log.warn("业务订单不存在,payOrderId={},mchOrderNo={}", payOrderId, mchOrderNo);
return false;
}
// 核对金额
......
......@@ -17,7 +17,7 @@ public class MgrDemo {
addPayChannel();
}
// 统一下单
// 添加商户
static void addMchInfo() {
JSONObject params = new JSONObject();
params.put("mchId", "20001226");
......@@ -33,7 +33,7 @@ public class MgrDemo {
}
// 统一下单
// 添加渠道
static void addPayChannel() {
JSONObject params = new JSONObject();
params.put("channelId", "WX_NATIVE");//WX_NATIVE
......
......@@ -13,19 +13,20 @@ import java.util.Map;
public class PayOrderDemo {
// 商户ID
static final String mchId = "20001222";//20001223,20001245
static final String mchId = "20001223";//20001223,20001245
// 加签key
static final String reqKey = "M86l522AV6q613Ii4W6u8K48uW8vM1N6bFgyv769220MdYe9u37N4y7rI5mQ";
// 验签key
static final String repKey = "Hpcl522AV6q613KIi46u6g6XuW8vM1N8bFgyv769770MdYe9u37M4y7rIpl8";
static final String baseUrl = "http://api.xxpay.org/api";
//static final String baseUrl = "http://localhost:3020/api";
static final String notifyUrl = "http://www.baidu.com"; // 本地环境测试,可到ngrok.cc网站注册
//static final String baseUrl = "http://api.xxpay.org/api";
static final String baseUrl = "http://localhost:3020/api";
//static final String notifyUrl = "http://www.baidu.com"; // 本地环境测试,可到ngrok.cc网站注册
static final String notifyUrl = "http://shop.xxpay.org/goods/payNotify";
public static void main(String[] args) {
//payOrderTest();
quryPayOrderTest("1494774484058", "P0020170514230805000000");
payOrderTest();
//quryPayOrderTest("1494774484058", "P0020170910211048000001");
}
// 统一下单
......@@ -34,7 +35,7 @@ public class PayOrderDemo {
paramMap.put("mchId", mchId); // 商户ID
paramMap.put("mchOrderNo", System.currentTimeMillis()); // 商户订单号
// 支付渠道ID, WX_NATIVE(微信扫码),WX_JSAPI(微信公众号或微信小程序),WX_APP(微信APP),WX_MWEB(微信H5),ALIPAY_WAP(支付宝手机支付),ALIPAY_PC(支付宝网站支付),ALIPAY_MOBILE(支付宝移动支付)
paramMap.put("channelId", "WX_JSAPI");
paramMap.put("channelId", "WX_NATIVE");
paramMap.put("amount", 1); // 支付金额,单位分
paramMap.put("currency", "cny"); // 币种, cny-人民币
paramMap.put("clientIp", "211.94.116.218"); // 用户地址,微信H5支付时要真实的
......@@ -87,7 +88,7 @@ public class PayOrderDemo {
paramMap.put("mchId", mchId); // 商户ID
paramMap.put("mchOrderNo", mchOrderNo); // 商户订单号
paramMap.put("payOrderId", payOrderId); // 支付订单号
paramMap.put("executeNotify", "false"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
paramMap.put("executeNotify", "true"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
paramMap.put("sign", reqSign); // 签名
......
package org.xxpay.shop.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.xxpay.common.util.PayDigestUtil;
import org.xxpay.common.util.XXPayUtil;
import java.util.Map;
/**
* Created by dingzhiwei on 17/10/30.
*/
public class RefundOrderDemo {
// 商户ID
static final String mchId = "20001223";//20001223,20001245
// 加签key
static final String reqKey = "M86l522AV6q613Ii4W6u8K48uW8vM1N6bFgyv769220MdYe9u37N4y7rI5mQ";
// 验签key
static final String repKey = "Hpcl522AV6q613KIi46u6g6XuW8vM1N8bFgyv769770MdYe9u37M4y7rIpl8";
//static final String baseUrl = "http://api.xxpay.org/api";
static final String baseUrl = "http://localhost:3020/api";
static final String notifyUrl = "http://127.0.0.1:8081/goods/notify_test?rt=success"; // 本地环境测试,可到ngrok.cc网站注册
public static void main(String[] args) {
refundOrderTest();
//quryPayOrderTest("1494774484058", "P0020170910211048000001");
}
// 退款
static String refundOrderTest() {
JSONObject paramMap = new JSONObject();
paramMap.put("mchId", mchId); // 商户ID
paramMap.put("mchRefundNo", "REFUND" + System.currentTimeMillis()); // 商户订单号
// 支付渠道ID, WX_NATIVE(微信扫码),WX_JSAPI(微信公众号或微信小程序),WX_APP(微信APP),WX_MWEB(微信H5),ALIPAY_WAP(支付宝手机支付),ALIPAY_PC(支付宝网站支付),ALIPAY_MOBILE(支付宝移动支付)
paramMap.put("channelId", "ALIPAY_WAP");
paramMap.put("amount", 1); // 退款金额
paramMap.put("currency", "cny"); // 币种, cny-人民币
paramMap.put("clientIp", "211.94.116.218"); // 用户地址,微信H5支付时要真实的
paramMap.put("device", "WEB"); // 设备
paramMap.put("subject", "XXPAY支付测试");
paramMap.put("body", "XXPAY支付测试");
paramMap.put("notifyUrl", notifyUrl); // 回调URL
paramMap.put("param1", ""); // 扩展参数1
paramMap.put("param2", ""); // 扩展参数2
paramMap.put("channelUser", "jmdhappy@126.com"); // 微信openId:oIkQuwhPgPUgl-TvQ48_UUpZUwMs(丁志伟)
paramMap.put("payOrderId", "P0020171114192121000003");
//{"h5_info": {"type":"Wap","wap_url": "https://pay.qq.com","wap_name": "腾讯充值"}}
String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
paramMap.put("sign", reqSign); // 签名
String reqData = "params=" + paramMap.toJSONString();
System.out.println("请求支付中心退款接口,请求数据:" + reqData);
String url = baseUrl + "/refund/create_order?";
String result = XXPayUtil.call4Post(url + reqData);
System.out.println("请求支付中心退款接口,响应数据:" + result);
Map retMap = JSON.parseObject(result);
if("SUCCESS".equals(retMap.get("retCode")) && "SUCCESS".equalsIgnoreCase(retMap.get("resCode").toString())) {
// 验签
String checkSign = PayDigestUtil.getSign(retMap, repKey, "sign", "payParams");
String retSign = (String) retMap.get("sign");
if(checkSign.equals(retSign)) {
System.out.println("=========支付中心退款验签成功=========");
}else {
System.err.println("=========支付中心退款验签失败=========");
return null;
}
}
return retMap.get("transOrderId")+"";
}
static String quryPayOrderTest(String mchOrderNo, String payOrderId) {
JSONObject paramMap = new JSONObject();
paramMap.put("mchId", mchId); // 商户ID
paramMap.put("mchOrderNo", mchOrderNo); // 商户订单号
paramMap.put("payOrderId", payOrderId); // 支付订单号
paramMap.put("executeNotify", "true"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
paramMap.put("sign", reqSign); // 签名
String reqData = "params=" + paramMap.toJSONString();
System.out.println("请求支付中心查单接口,请求数据:" + reqData);
String url = baseUrl + "/pay/query_order?";
String result = XXPayUtil.call4Post(url + reqData);
System.out.println("请求支付中心查单接口,响应数据:" + result);
Map retMap = JSON.parseObject(result);
if("SUCCESS".equals(retMap.get("retCode")) && "SUCCESS".equalsIgnoreCase(retMap.get("resCode").toString())) {
// 验签
String checkSign = PayDigestUtil.getSign(retMap, repKey, "sign", "payParams");
String retSign = (String) retMap.get("sign");
if(checkSign.equals(retSign)) {
System.out.println("=========支付中心查单验签成功=========");
}else {
System.err.println("=========支付中心查单验签失败=========");
return null;
}
}
return retMap.get("payOrderId")+"";
}
}
package org.xxpay.shop.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.xxpay.common.util.PayDigestUtil;
import org.xxpay.common.util.XXPayUtil;
import java.util.Map;
/**
* Created by dingzhiwei on 17/10/30.
*/
public class TransOrderDemo {
// 商户ID
static final String mchId = "20001223";//20001223,20001245
// 加签key
static final String reqKey = "M86l522AV6q613Ii4W6u8K48uW8vM1N6bFgyv769220MdYe9u37N4y7rI5mQ";
// 验签key
static final String repKey = "Hpcl522AV6q613KIi46u6g6XuW8vM1N8bFgyv769770MdYe9u37M4y7rIpl8";
//static final String baseUrl = "http://api.xxpay.org/api";
static final String baseUrl = "http://localhost:3020/api";
static final String notifyUrl = "http://127.0.0.1:8081/goods/notify_test?rt=success"; // 本地环境测试,可到ngrok.cc网站注册
public static void main(String[] args) {
transOrderTest();
//quryPayOrderTest("1494774484058", "P0020170910211048000001");
}
// 统一下单
static String transOrderTest() {
JSONObject paramMap = new JSONObject();
paramMap.put("mchId", mchId); // 商户ID
paramMap.put("mchTransNo", "TRANS" + System.currentTimeMillis()); // 商户订单号
// 支付渠道ID, WX_NATIVE(微信扫码),WX_JSAPI(微信公众号或微信小程序),WX_APP(微信APP),WX_MWEB(微信H5),ALIPAY_WAP(支付宝手机支付),ALIPAY_PC(支付宝网站支付),ALIPAY_MOBILE(支付宝移动支付)
paramMap.put("channelId", "WX_NATIVE");
paramMap.put("amount", 600); // 转行金额,单位分
paramMap.put("currency", "cny"); // 币种, cny-人民币
paramMap.put("clientIp", "211.94.116.218"); // 用户地址,微信H5支付时要真实的
paramMap.put("device", "WEB"); // 设备
paramMap.put("subject", "XXPAY支付测试");
paramMap.put("body", "XXPAY支付测试");
paramMap.put("notifyUrl", notifyUrl); // 回调URL
paramMap.put("param1", ""); // 扩展参数1
paramMap.put("param2", ""); // 扩展参数2
paramMap.put("channelUser", "oIkQuwhPgPUgl-TvQ48_UUpZUwMs"); // 微信openId(丁志伟):oIkQuwhPgPUgl-TvQ48_UUpZUwMs, 支付宝(丁志伟):jmdhappy@126.com
paramMap.put("remarkInfo", "转账测试");
//{"h5_info": {"type":"Wap","wap_url": "https://pay.qq.com","wap_name": "腾讯充值"}}
String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
paramMap.put("sign", reqSign); // 签名
String reqData = "params=" + paramMap.toJSONString();
System.out.println("请求支付中心转账接口,请求数据:" + reqData);
String url = baseUrl + "/trans/create_order?";
String result = XXPayUtil.call4Post(url + reqData);
System.out.println("请求支付中心转账接口,响应数据:" + result);
Map retMap = JSON.parseObject(result);
if("SUCCESS".equals(retMap.get("retCode")) && "SUCCESS".equalsIgnoreCase(retMap.get("resCode").toString())) {
// 验签
String checkSign = PayDigestUtil.getSign(retMap, repKey, "sign", "payParams");
String retSign = (String) retMap.get("sign");
if(checkSign.equals(retSign)) {
System.out.println("=========支付中心转账验签成功=========");
}else {
System.err.println("=========支付中心转账验签失败=========");
return null;
}
}
return retMap.get("transOrderId")+"";
}
static String quryPayOrderTest(String mchOrderNo, String payOrderId) {
JSONObject paramMap = new JSONObject();
paramMap.put("mchId", mchId); // 商户ID
paramMap.put("mchOrderNo", mchOrderNo); // 商户订单号
paramMap.put("payOrderId", payOrderId); // 支付订单号
paramMap.put("executeNotify", "true"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
paramMap.put("sign", reqSign); // 签名
String reqData = "params=" + paramMap.toJSONString();
System.out.println("请求支付中心查单接口,请求数据:" + reqData);
String url = baseUrl + "/pay/query_order?";
String result = XXPayUtil.call4Post(url + reqData);
System.out.println("请求支付中心查单接口,响应数据:" + result);
Map retMap = JSON.parseObject(result);
if("SUCCESS".equals(retMap.get("retCode")) && "SUCCESS".equalsIgnoreCase(retMap.get("resCode").toString())) {
// 验签
String checkSign = PayDigestUtil.getSign(retMap, repKey, "sign", "payParams");
String retSign = (String) retMap.get("sign");
if(checkSign.equals(retSign)) {
System.out.println("=========支付中心查单验签成功=========");
}else {
System.err.println("=========支付中心查单验签失败=========");
return null;
}
}
return retMap.get("payOrderId")+"";
}
}
package org.xxpay.dubbo.api.service;
import java.util.Map;
/**
* @author: dingzhiwei
* @date: 17/10/26
* @description: 商户通知业务
*/
public interface IMchNotifyService {
}
......@@ -17,4 +17,12 @@ public interface IPayChannel4AliService {
Map doAliPayQrReq(String jsonParam);
Map doAliTransReq(String jsonParam);
Map getAliTransReq(String jsonParam);
Map doAliRefundReq(String jsonParam);
Map getAliRefundReq(String jsonParam);
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment