Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Jeepay
Commits
deee24e5
Commit
deee24e5
authored
Nov 15, 2017
by
jmdhappy
Browse files
提交转账,退款接口;重构商户通知;修复已知Bug
parent
d5333a0d
Changes
76
Hide whitespace changes
Inline
Side-by-side
xxpay-mgr/src/main/java/org/xxpay/mgr/service/RefundOrderService.java
0 → 100644
View file @
deee24e5
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
());
}
}
}
xxpay-mgr/src/main/java/org/xxpay/mgr/service/TransOrderService.java
0 → 100644
View file @
deee24e5
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
());
}
}
}
xxpay-mgr/src/main/resources/static/datas/nav.js
View file @
deee24e5
...
...
@@ -10,6 +10,10 @@ var navs = [{
"
title
"
:
"
支付渠道
"
,
"
icon
"
:
"

"
,
"
href
"
:
"
/pay_channel/list.html
"
},
{
"
title
"
:
"
商户通知
"
,
"
icon
"
:
"

"
,
"
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
xxpay-mgr/src/main/resources/templates/mch_info/list.ftl
View file @
deee24e5
...
...
@@ -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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
zIndex
:
19950924
,
maxmin
:
tru
e
,
maxmin
:
fals
e
,
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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
450
px
']
,
zIndex
:
19950924
,
maxmin
:
tru
e
,
maxmin
:
fals
e
,
yes
:
function
(
index
)
{
//触发表单的提交事件
$
(
'
form
.layui-form
'
)
.find
(
'
button
[
lay-filter
=
edit
]'
)
.click
()
;
...
...
@@ -282,6 +283,7 @@
addBoxIndex
=
-1
;
}
})
;
layer
.full
(
addBoxIndex
)
;
})
;
}
}
);
...
...
xxpay-mgr/src/main/resources/templates/mch_notify/list.ftl
0 → 100755
View file @
deee24e5
<!
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
D
ate
()
.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
D
ate
()
.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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
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
xxpay-mgr/src/main/resources/templates/mch_notify/view.ftl
0 → 100755
View file @
deee24e5
<
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
xxpay-mgr/src/main/resources/templates/pay_channel/list.ftl
View file @
deee24e5
...
...
@@ -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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
zIndex
:
19950924
,
maxmin
:
tru
e
,
maxmin
:
fals
e
,
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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
zIndex
:
19950924
,
maxmin
:
tru
e
,
maxmin
:
fals
e
,
yes
:
function
(
index
)
{
//触发表单的提交事件
$
(
'
form
.layui-form
'
)
.find
(
'
button
[
lay-filter
=
edit
]'
)
.click
()
;
...
...
@@ -276,6 +277,7 @@
addBoxIndex
=
-1
;
}
})
;
layer
.full
(
addBoxIndex
)
;
})
;
}
}
);
...
...
xxpay-mgr/src/main/resources/templates/pay_order/list.ftl
View file @
deee24e5
...
...
@@ -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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
zIndex
:
19950924
,
maxmin
:
tru
e
,
maxmin
:
fals
e
,
full
:
function
(
elem
)
{
var
win
=
window
.top
===
window
.self
?
window
:
parent
.window
;
...
...
@@ -229,6 +232,7 @@
addBoxIndex
=
-1
;
}
})
;
layer
.full
(
addBoxIndex
)
;
})
;
}
}
);
...
...
xxpay-mgr/src/main/resources/templates/pay_order/view.ftl
View file @
deee24e5
...
...
@@ -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">
...
...
xxpay-mgr/src/main/resources/templates/refund_order/list.ftl
0 → 100755
View file @
deee24e5
<!
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
D
ate
()
.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
D
ate
()
.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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
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
xxpay-mgr/src/main/resources/templates/refund_order/view.ftl
0 → 100755
View file @
deee24e5
<
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
xxpay-mgr/src/main/resources/templates/trans_order/list.ftl
0 → 100755
View file @
deee24e5
<!
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
D
ate
()
.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
D
ate
()
.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
:
['
100
px
'
,
'
30
%']
,
area
:
['
600
px
'
,
'
550
px
']
,
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
xxpay-mgr/src/main/resources/templates/trans_order/view.ftl
0 → 100755
View file @
deee24e5
<
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
xxpay-shop/src/main/java/org/xxpay/shop/controller/GoodsOrderController.java
View file @
deee24e5
...
...
@@ -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/payN
otify
"
);
// 回调URL
paramMap
.
put
(
"notifyUrl"
,
n
otify
Url
);
// 回调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/payN
otify
"
);
// 回调URL
paramMap
.
put
(
"notifyUrl"
,
n
otify
Url
);
// 回调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
;
}
// 核对金额
...
...
xxpay-shop/src/main/java/org/xxpay/shop/demo/MgrDemo.java
View file @
deee24e5
...
...
@@ -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
...
...
xxpay-shop/src/main/java/org/xxpay/shop/demo/PayOrderDemo.java
View file @
deee24e5
...
...
@@ -13,19 +13,20 @@ import java.util.Map;
public
class
PayOrderDemo
{
// 商户ID
static
final
String
mchId
=
"2000122
2
"
;
//20001223,20001245
static
final
String
mchId
=
"2000122
3
"
;
//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"
,
"P0020170
514230805
00000
0
"
);
payOrderTest
();
//
quryPayOrderTest("1494774484058", "P0020170
910211048
00000
1
");
}
// 统一下单
...
...
@@ -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"
,
"
fals
e"
);
// 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
paramMap
.
put
(
"executeNotify"
,
"
tru
e"
);
// 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
String
reqSign
=
PayDigestUtil
.
getSign
(
paramMap
,
reqKey
);
paramMap
.
put
(
"sign"
,
reqSign
);
// 签名
...
...
xxpay-shop/src/main/java/org/xxpay/shop/demo/RefundOrderDemo.java
0 → 100644
View file @
deee24e5
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"
)+
""
;
}
}
xxpay-shop/src/main/java/org/xxpay/shop/demo/TransOrderDemo.java
0 → 100644
View file @
deee24e5
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"
)+
""
;
}
}
xxpay4dubbo/xxpay4dubbo-api/src/main/java/org/xxpay/dubbo/api/service/IMchNotifyService.java
0 → 100644
View file @
deee24e5
package
org.xxpay.dubbo.api.service
;
import
java.util.Map
;
/**
* @author: dingzhiwei
* @date: 17/10/26
* @description: 商户通知业务
*/
public
interface
IMchNotifyService
{
}
xxpay4dubbo/xxpay4dubbo-api/src/main/java/org/xxpay/dubbo/api/service/IPayChannel4AliService.java
View file @
deee24e5
...
...
@@ -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
);
}
Prev
1
2
3
4
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment