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
Litemall
Commits
1fddef33
Commit
1fddef33
authored
Oct 23, 2019
by
beaver383
Browse files
微信支付(公众号支付和H5支付)
parent
69f9daef
Changes
4
Hide whitespace changes
Inline
Side-by-side
litemall-vue/src/api/api.js
View file @
1fddef33
...
...
@@ -300,6 +300,14 @@ export function orderPrepay(data) {
data
})
}
const
OrderH5pay
=
'
wx/order/h5pay
'
;
// h5支付
export
function
orderH5pay
(
data
)
{
return
request
({
url
:
OrderH5pay
,
method
:
'
post
'
,
data
});
}
export
const
OrderList
=
'
wx/order/list
'
;
//订单列表
export
function
orderList
(
query
)
{
return
request
({
...
...
litemall-vue/src/views/order/payment/index.vue
View file @
1fddef33
...
...
@@ -39,8 +39,9 @@
<
script
>
import
{
Radio
,
RadioGroup
,
Dialog
}
from
'
vant
'
;
import
{
orderDetail
,
orderPrepay
}
from
'
@/api/api
'
;
import
{
orderDetail
,
orderPrepay
,
orderH5pay
}
from
'
@/api/api
'
;
import
_
from
'
lodash
'
;
import
{
getLocalStorage
,
setLocalStorage
}
from
'
@/utils/local-storage
'
;
export
default
{
name
:
'
payment
'
,
...
...
@@ -72,20 +73,109 @@ export default {
Dialog
.
alert
({
message
:
'
你选择了
'
+
(
this
.
payWay
===
'
wx
'
?
'
微信支付
'
:
'
支付宝支付
'
)
}).
then
(()
=>
{
if
(
this
.
payWay
===
'
wx
'
)
{
let
ua
=
navigator
.
userAgent
.
toLowerCase
();
let
isWeixin
=
ua
.
indexOf
(
'
micromessenger
'
)
!=
-
1
;
if
(
isWeixin
)
{
orderPrepay
({
orderId
:
this
.
orderId
})
.
then
(
res
=>
{
let
data
=
res
.
data
.
data
;
let
prepay_data
=
JSON
.
stringify
({
appId
:
data
.
appId
,
timeStamp
:
data
.
timeStamp
,
nonceStr
:
data
.
nonceStr
,
package
:
data
.
packageValue
,
signType
:
'
MD5
'
,
paySign
:
data
.
paySign
});
setLocalStorage
({
prepay_data
:
prepay_data
});
this
.
$router
.
push
({
name
:
'
paymentStatus
'
,
params
:
{
status
:
'
success
'
if
(
typeof
WeixinJSBridge
==
'
undefined
'
)
{
if
(
document
.
addEventListener
)
{
document
.
addEventListener
(
'
WeixinJSBridgeReady
'
,
this
.
onBridgeReady
,
false
);
}
else
if
(
document
.
attachEvent
)
{
document
.
attachEvent
(
'
WeixinJSBridgeReady
'
,
this
.
onBridgeReady
);
document
.
attachEvent
(
'
onWeixinJSBridgeReady
'
,
this
.
onBridgeReady
);
}
}
else
{
this
.
onBridgeReady
();
}
})
.
catch
(
err
=>
{
Dialog
.
alert
({
message
:
err
.
data
.
errmsg
});
that
.
$router
.
replace
({
name
:
'
paymentStatus
'
,
params
:
{
status
:
'
failed
'
}
});
});
}
else
{
orderH5pay
({
orderId
:
this
.
orderId
})
.
then
(
res
=>
{
let
data
=
res
.
data
.
data
;
window
.
location
.
replace
(
data
.
mwebUrl
+
'
&redirect_url=
'
+
encodeURIComponent
(
window
.
location
.
origin
+
'
/#/?orderId=
'
+
this
.
orderId
+
'
&tip=yes
'
)
);
})
.
catch
(
err
=>
{
Dialog
.
alert
({
message
:
err
.
data
.
errmsg
});
});
}
});
}
else
{
//todo : alipay
}
});
// // 利用weixin-js-sdk调用微信支付
// orderPrepay({orderId: this.orderId}).then(res => {
// var payParams = res.data.data;
// });
},
onBridgeReady
()
{
let
that
=
this
;
let
data
=
getLocalStorage
(
'
prepay_data
'
);
// eslint-disable-next-line no-undef
WeixinJSBridge
.
invoke
(
'
getBrandWCPayRequest
'
,
JSON
.
parse
(
data
.
prepay_data
),
function
(
res
)
{
if
(
res
.
err_msg
==
'
get_brand_wcpay_request:ok
'
)
{
that
.
$router
.
replace
({
name
:
'
paymentStatus
'
,
params
:
{
status
:
'
success
'
}
});
}
else
if
(
res
.
err_msg
==
'
get_brand_wcpay_request:cancel
'
)
{
that
.
$router
.
replace
({
name
:
'
paymentStatus
'
,
params
:
{
status
:
'
cancel
'
}
});
}
else
{
that
.
$router
.
replace
({
name
:
'
paymentStatus
'
,
params
:
{
status
:
'
failed
'
}
});
}
}
);
}
},
...
...
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java
View file @
1fddef33
...
...
@@ -3,6 +3,7 @@ package org.linlinjava.litemall.wx.service;
import
com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse
;
import
com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult
;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult
;
import
com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest
;
import
com.github.binarywang.wxpay.bean.result.BaseWxPayResult
;
import
com.github.binarywang.wxpay.constant.WxPayConstants
;
...
...
@@ -562,6 +563,60 @@ public class WxOrderService {
return
ResponseUtil
.
ok
(
result
);
}
/**
* 微信H5支付
*
* @param userId
* @param body
* @param request
* @return
*/
@Transactional
public
Object
h5pay
(
Integer
userId
,
String
body
,
HttpServletRequest
request
)
{
if
(
userId
==
null
)
{
return
ResponseUtil
.
unlogin
();
}
Integer
orderId
=
JacksonUtil
.
parseInteger
(
body
,
"orderId"
);
if
(
orderId
==
null
)
{
return
ResponseUtil
.
badArgument
();
}
LitemallOrder
order
=
orderService
.
findById
(
orderId
);
if
(
order
==
null
)
{
return
ResponseUtil
.
badArgumentValue
();
}
if
(!
order
.
getUserId
().
equals
(
userId
))
{
return
ResponseUtil
.
badArgumentValue
();
}
// 检测是否能够取消
OrderHandleOption
handleOption
=
OrderUtil
.
build
(
order
);
if
(!
handleOption
.
isPay
())
{
return
ResponseUtil
.
fail
(
ORDER_INVALID_OPERATION
,
"订单不能支付"
);
}
WxPayMwebOrderResult
result
=
null
;
try
{
WxPayUnifiedOrderRequest
orderRequest
=
new
WxPayUnifiedOrderRequest
();
orderRequest
.
setOutTradeNo
(
order
.
getOrderSn
());
orderRequest
.
setTradeType
(
"MWEB"
);
orderRequest
.
setBody
(
"订单:"
+
order
.
getOrderSn
());
// 元转成分
int
fee
=
0
;
BigDecimal
actualPrice
=
order
.
getActualPrice
();
fee
=
actualPrice
.
multiply
(
new
BigDecimal
(
100
)).
intValue
();
orderRequest
.
setTotalFee
(
fee
);
orderRequest
.
setSpbillCreateIp
(
IpUtil
.
getIpAddr
(
request
));
result
=
wxPayService
.
createOrder
(
orderRequest
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
ResponseUtil
.
ok
(
result
);
}
/**
* 微信付款成功或失败回调接口
* <p>
...
...
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java
View file @
1fddef33
...
...
@@ -90,6 +90,18 @@ public class WxOrderController {
return
wxOrderService
.
prepay
(
userId
,
body
,
request
);
}
/**
* 微信H5支付
* @param userId
* @param body
* @param request
* @return
*/
@PostMapping
(
"h5pay"
)
public
Object
h5pay
(
@LoginUser
Integer
userId
,
@RequestBody
String
body
,
HttpServletRequest
request
)
{
return
wxOrderService
.
h5pay
(
userId
,
body
,
request
);
}
/**
* 微信付款成功或失败回调接口
* <p>
...
...
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