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
252369f9
Commit
252369f9
authored
Jun 16, 2021
by
terrfly
Browse files
支付网关支持商户应用配置项的下单操作;
parent
bc3a2fa5
Changes
59
Hide whitespace changes
Inline
Side-by-side
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/kits/WxpayKit.java
View file @
252369f9
...
...
@@ -20,7 +20,7 @@ import com.github.binarywang.wxpay.exception.WxPayException;
import
com.jeequan.jeepay.core.constants.CS
;
import
com.jeequan.jeepay.core.model.params.wxpay.WxpayIsvsubMchParams
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
/*
...
...
@@ -33,14 +33,14 @@ import org.apache.commons.lang3.StringUtils;
public
class
WxpayKit
{
/** 放置 isv特殊信息 **/
public
static
void
putApiIsvInfo
(
MchConfigContext
mchConfigContext
,
BaseWxPayRequest
req
){
public
static
void
putApiIsvInfo
(
Mch
App
ConfigContext
mch
App
ConfigContext
,
BaseWxPayRequest
req
){
//不是特约商户, 无需放置此值
if
(!
mchConfigContext
.
isIsvsubMch
()){
if
(!
mch
App
ConfigContext
.
isIsvsubMch
()){
return
;
}
WxpayIsvsubMchParams
isvsubMchParams
=
mchConfigContext
.
getIsvsubMchParamsByIfCode
(
CS
.
IF_CODE
.
WXPAY
,
WxpayIsvsubMchParams
.
class
);
WxpayIsvsubMchParams
isvsubMchParams
=
mch
App
ConfigContext
.
getIsvsubMchParamsByIfCode
(
CS
.
IF_CODE
.
WXPAY
,
WxpayIsvsubMchParams
.
class
);
req
.
setSubMchId
(
isvsubMchParams
.
getSubMchId
());
req
.
setSubAppId
(
isvsubMchParams
.
getSubMchAppId
());
}
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/payway/WxApp.java
View file @
252369f9
...
...
@@ -30,7 +30,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxAppOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -49,9 +49,9 @@ public class WxApp extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mchConfigContext
);
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mch
App
ConfigContext
);
req
.
setTradeType
(
WxPayConstants
.
TradeType
.
APP
);
// 构造函数响应数据
...
...
@@ -62,7 +62,7 @@ public class WxApp extends WxpayPaymentService {
// 调起上游接口:
// 1. 如果抛异常,则订单状态为: 生成状态,此时没有查单处理操作。 订单将超时关闭
// 2. 接口调用成功, 后续异常需进行捕捉, 如果 逻辑代码出现异常则需要走完正常流程,此时订单状态为: 支付中, 需要查单处理。
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
try
{
WxPayAppOrderResult
payResult
=
wxPayService
.
createOrder
(
req
);
JSONObject
resJSON
=
(
JSONObject
)
JSON
.
toJSON
(
payResult
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/payway/WxBar.java
View file @
252369f9
...
...
@@ -30,7 +30,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -56,7 +56,7 @@ public class WxBar extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxBarOrderRQ
bizRQ
=
(
WxBarOrderRQ
)
rq
;
...
...
@@ -71,7 +71,7 @@ public class WxBar extends WxpayPaymentService {
request
.
setAuthCode
(
bizRQ
.
getAuthCode
());
//放置isv信息
WxpayKit
.
putApiIsvInfo
(
mchConfigContext
,
request
);
WxpayKit
.
putApiIsvInfo
(
mch
App
ConfigContext
,
request
);
// 构造函数响应数据
WxBarOrderRS
res
=
ApiResBuilder
.
buildSuccess
(
WxBarOrderRS
.
class
);
...
...
@@ -81,7 +81,7 @@ public class WxBar extends WxpayPaymentService {
// 调起上游接口:
// 1. 如果抛异常,则订单状态为: 生成状态,此时没有查单处理操作。 订单将超时关闭
// 2. 接口调用成功, 后续异常需进行捕捉, 如果 逻辑代码出现异常则需要走完正常流程,此时订单状态为: 支付中, 需要查单处理。
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
try
{
WxPayMicropayResult
wxPayMicropayResult
=
wxPayService
.
micropay
(
request
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/payway/WxH5.java
View file @
252369f9
...
...
@@ -30,7 +30,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxH5OrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxH5OrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -49,11 +49,11 @@ public class WxH5 extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
{
WxH5OrderRQ
bizRQ
=
(
WxH5OrderRQ
)
rq
;
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mchConfigContext
);
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mch
App
ConfigContext
);
req
.
setTradeType
(
WxPayConstants
.
TradeType
.
MWEB
);
// 构造函数响应数据
...
...
@@ -64,7 +64,7 @@ public class WxH5 extends WxpayPaymentService {
// 调起上游接口:
// 1. 如果抛异常,则订单状态为: 生成状态,此时没有查单处理操作。 订单将超时关闭
// 2. 接口调用成功, 后续异常需进行捕捉, 如果 逻辑代码出现异常则需要走完正常流程,此时订单状态为: 支付中, 需要查单处理。
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
try
{
WxPayMwebOrderResult
wxPayMwebOrderResult
=
wxPayService
.
createOrder
(
req
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/payway/WxJsapi.java
View file @
252369f9
...
...
@@ -32,7 +32,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -60,11 +60,11 @@ public class WxJsapi extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxJsapiOrderRQ
bizRQ
=
(
WxJsapiOrderRQ
)
rq
;
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mchConfigContext
);
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mch
App
ConfigContext
);
req
.
setTradeType
(
WxPayConstants
.
TradeType
.
JSAPI
);
req
.
setOpenid
(
bizRQ
.
getOpenid
());
...
...
@@ -76,7 +76,7 @@ public class WxJsapi extends WxpayPaymentService {
// 调起上游接口:
// 1. 如果抛异常,则订单状态为: 生成状态,此时没有查单处理操作。 订单将超时关闭
// 2. 接口调用成功, 后续异常需进行捕捉, 如果 逻辑代码出现异常则需要走完正常流程,此时订单状态为: 支付中, 需要查单处理。
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
try
{
WxPayMpOrderResult
payResult
=
wxPayService
.
createOrder
(
req
);
JSONObject
resJSON
=
(
JSONObject
)
JSON
.
toJSON
(
payResult
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/payway/WxLite.java
View file @
252369f9
...
...
@@ -32,7 +32,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -58,11 +58,11 @@ public class WxLite extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxJsapiOrderRQ
bizRQ
=
(
WxJsapiOrderRQ
)
rq
;
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mchConfigContext
);
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mch
App
ConfigContext
);
req
.
setTradeType
(
WxPayConstants
.
TradeType
.
JSAPI
);
req
.
setOpenid
(
bizRQ
.
getOpenid
());
...
...
@@ -74,7 +74,7 @@ public class WxLite extends WxpayPaymentService {
// 调起上游接口:
// 1. 如果抛异常,则订单状态为: 生成状态,此时没有查单处理操作。 订单将超时关闭
// 2. 接口调用成功, 后续异常需进行捕捉, 如果 逻辑代码出现异常则需要走完正常流程,此时订单状态为: 支付中, 需要查单处理。
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
try
{
WxPayMpOrderResult
payResult
=
wxPayService
.
createOrder
(
req
);
JSONObject
resJSON
=
(
JSONObject
)
JSON
.
toJSON
(
payResult
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/payway/WxNative.java
View file @
252369f9
...
...
@@ -30,7 +30,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxNativeOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxNativeOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -50,11 +50,11 @@ public class WxNative extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxNativeOrderRQ
bizRQ
=
(
WxNativeOrderRQ
)
rq
;
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mchConfigContext
);
WxPayUnifiedOrderRequest
req
=
buildUnifiedOrderRequest
(
payOrder
,
mch
App
ConfigContext
);
req
.
setTradeType
(
WxPayConstants
.
TradeType
.
NATIVE
);
// 构造函数响应数据
...
...
@@ -65,7 +65,7 @@ public class WxNative extends WxpayPaymentService {
// 调起上游接口:
// 1. 如果抛异常,则订单状态为: 生成状态,此时没有查单处理操作。 订单将超时关闭
// 2. 接口调用成功, 后续异常需进行捕捉, 如果 逻辑代码出现异常则需要走完正常流程,此时订单状态为: 支付中, 需要查单处理。
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
try
{
WxPayNativeOrderResult
wxPayNativeOrderResult
=
wxPayService
.
createOrder
(
req
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/paywayV3/WxApp.java
View file @
252369f9
...
...
@@ -28,7 +28,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxAppOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -47,15 +47,15 @@ public class WxApp extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
{
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
// 构造请求数据
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mchConfigContext
);
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mch
App
ConfigContext
);
String
reqUrl
;
// 请求地址
if
(
mchConfigContext
.
isIsvsubMch
()){
// 特约商户
if
(
mch
App
ConfigContext
.
isIsvsubMch
()){
// 特约商户
reqUrl
=
WxpayV3Util
.
ISV_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
APP
);
}
else
{
reqUrl
=
WxpayV3Util
.
NORMALMCH_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
APP
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/paywayV3/WxBar.java
View file @
252369f9
...
...
@@ -18,7 +18,7 @@ package com.jeequan.jeepay.pay.channel.wxpay.paywayV3;
import
com.jeequan.jeepay.core.entity.PayOrder
;
import
com.jeequan.jeepay.pay.channel.wxpay.WxpayPaymentService
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
com.jeequan.jeepay.pay.rqrs.AbstractRS
;
import
com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -43,7 +43,7 @@ public class WxBar extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
return
wxBar
.
pay
(
rq
,
payOrder
,
mchConfigContext
);
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
return
wxBar
.
pay
(
rq
,
payOrder
,
mch
App
ConfigContext
);
}
}
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/paywayV3/WxH5.java
View file @
252369f9
...
...
@@ -30,7 +30,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxH5OrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxH5OrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -49,14 +49,14 @@ public class WxH5 extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
{
WxH5OrderRQ
bizRQ
=
(
WxH5OrderRQ
)
rq
;
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
// 构造请求数据
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mchConfigContext
);
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mch
App
ConfigContext
);
JSONObject
sceneInfo
=
reqJSON
.
getJSONObject
(
"scene_info"
);
...
...
@@ -67,7 +67,7 @@ public class WxH5 extends WxpayPaymentService {
reqJSON
.
put
(
"scene_info"
,
sceneInfo
);
String
reqUrl
;
// 请求地址
if
(
mchConfigContext
.
isIsvsubMch
()){
// 特约商户
if
(
mch
App
ConfigContext
.
isIsvsubMch
()){
// 特约商户
reqUrl
=
WxpayV3Util
.
ISV_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
MWEB
);
}
else
{
reqUrl
=
WxpayV3Util
.
NORMALMCH_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
MWEB
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/paywayV3/WxJsapi.java
View file @
252369f9
...
...
@@ -29,7 +29,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -49,16 +49,16 @@ public class WxJsapi extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxJsapiOrderRQ
bizRQ
=
(
WxJsapiOrderRQ
)
rq
;
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
// 构造请求数据
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mchConfigContext
);
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mch
App
ConfigContext
);
String
reqUrl
;
// 请求地址
if
(
mchConfigContext
.
isIsvsubMch
()){
// 特约商户
if
(
mch
App
ConfigContext
.
isIsvsubMch
()){
// 特约商户
reqUrl
=
WxpayV3Util
.
ISV_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
JSAPI
);
JSONObject
payer
=
new
JSONObject
();
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/paywayV3/WxLite.java
View file @
252369f9
...
...
@@ -29,7 +29,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.springframework.stereotype.Service
;
/*
...
...
@@ -49,16 +49,16 @@ public class WxLite extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
WxJsapiOrderRQ
bizRQ
=
(
WxJsapiOrderRQ
)
rq
;
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
// 构造请求数据
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mchConfigContext
);
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mch
App
ConfigContext
);
String
reqUrl
;
// 请求地址
if
(
mchConfigContext
.
isIsvsubMch
()){
// 特约商户
if
(
mch
App
ConfigContext
.
isIsvsubMch
()){
// 特约商户
reqUrl
=
WxpayV3Util
.
ISV_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
JSAPI
);
JSONObject
payer
=
new
JSONObject
();
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/paywayV3/WxNative.java
View file @
252369f9
...
...
@@ -24,7 +24,7 @@ import com.jeequan.jeepay.core.entity.PayOrder;
import
com.jeequan.jeepay.pay.channel.wxpay.WxpayPaymentService
;
import
com.jeequan.jeepay.pay.channel.wxpay.kits.WxpayKit
;
import
com.jeequan.jeepay.pay.channel.wxpay.kits.WxpayV3Util
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
com.jeequan.jeepay.pay.rqrs.AbstractRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ
;
...
...
@@ -49,17 +49,17 @@ public class WxNative extends WxpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
{
WxNativeOrderRQ
bizRQ
=
(
WxNativeOrderRQ
)
rq
;
WxPayService
wxPayService
=
mchConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
WxPayService
wxPayService
=
mch
App
ConfigContext
.
getWxServiceWrapper
().
getWxPayService
();
// 构造请求数据
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mchConfigContext
);
JSONObject
reqJSON
=
buildV3OrderRequest
(
payOrder
,
mch
App
ConfigContext
);
String
reqUrl
;
// 请求地址
if
(
mchConfigContext
.
isIsvsubMch
()){
// 特约商户
if
(
mch
App
ConfigContext
.
isIsvsubMch
()){
// 特约商户
reqUrl
=
WxpayV3Util
.
ISV_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
NATIVE
);
}
else
{
reqUrl
=
WxpayV3Util
.
NORMALMCH_URL_MAP
.
get
(
WxPayConstants
.
TradeType
.
NATIVE
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/YsfpayChannelNoticeService.java
View file @
252369f9
...
...
@@ -24,7 +24,7 @@ import com.jeequan.jeepay.pay.channel.AbstractChannelNoticeService;
import
com.jeequan.jeepay.pay.channel.ysfpay.utils.YsfSignUtils
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.model.IsvConfigContext
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.tuple.MutablePair
;
...
...
@@ -65,7 +65,7 @@ public class YsfpayChannelNoticeService extends AbstractChannelNoticeService {
}
@Override
public
ChannelRetMsg
doNotice
(
HttpServletRequest
request
,
Object
params
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
,
NoticeTypeEnum
noticeTypeEnum
)
{
public
ChannelRetMsg
doNotice
(
HttpServletRequest
request
,
Object
params
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
,
NoticeTypeEnum
noticeTypeEnum
)
{
try
{
ChannelRetMsg
result
=
ChannelRetMsg
.
confirmSuccess
(
null
);
...
...
@@ -77,7 +77,7 @@ public class YsfpayChannelNoticeService extends AbstractChannelNoticeService {
log
.
info
(
"{} 回调参数, jsonParams:{}"
,
logPrefix
,
jsonParams
);
// 校验支付回调
boolean
verifyResult
=
verifyParams
(
jsonParams
,
payOrder
,
mchConfigContext
.
getIsvConfigContext
());
boolean
verifyResult
=
verifyParams
(
jsonParams
,
payOrder
,
mch
App
ConfigContext
.
getIsvConfigContext
());
// 验证参数失败
if
(!
verifyResult
){
throw
ResponseException
.
buildText
(
"ERROR"
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/YsfpayPayOrderQueryService.java
View file @
252369f9
...
...
@@ -21,7 +21,7 @@ import com.jeequan.jeepay.core.entity.PayOrder;
import
com.jeequan.jeepay.pay.channel.IPayOrderQueryService
;
import
com.jeequan.jeepay.pay.channel.ysfpay.utils.YsfHttpUtil
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -46,7 +46,7 @@ public class YsfpayPayOrderQueryService implements IPayOrderQueryService {
private
YsfpayPaymentService
ysfpayPaymentService
;
@Override
public
ChannelRetMsg
query
(
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
ChannelRetMsg
query
(
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
JSONObject
reqParams
=
new
JSONObject
();
String
orderType
=
YsfHttpUtil
.
getOrderTypeByCommon
(
payOrder
.
getWayCode
());
String
logPrefix
=
"【云闪付("
+
orderType
+
")查单】"
;
...
...
@@ -56,7 +56,7 @@ public class YsfpayPayOrderQueryService implements IPayOrderQueryService {
reqParams
.
put
(
"orderType"
,
orderType
);
//订单类型
//封装公共参数 & 签名 & 调起http请求 & 返回响应数据并包装为json格式。
JSONObject
resJSON
=
ysfpayPaymentService
.
packageParamAndReq
(
"/gateway/api/pay/queryOrder"
,
reqParams
,
logPrefix
,
mchConfigContext
.
getIsvConfigContext
(),
mchConfigContext
);
JSONObject
resJSON
=
ysfpayPaymentService
.
packageParamAndReq
(
"/gateway/api/pay/queryOrder"
,
reqParams
,
logPrefix
,
mch
App
ConfigContext
.
getIsvConfigContext
(),
mch
App
ConfigContext
);
log
.
info
(
"查询订单 payorderId:{}, 返回结果:{}"
,
payOrder
.
getPayOrderId
(),
resJSON
);
if
(
resJSON
==
null
){
return
ChannelRetMsg
.
waiting
();
//支付中
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/YsfpayPaymentService.java
View file @
252369f9
...
...
@@ -29,7 +29,7 @@ import com.jeequan.jeepay.pay.channel.ysfpay.utils.YsfHttpUtil;
import
com.jeequan.jeepay.pay.channel.ysfpay.utils.YsfSignUtils
;
import
com.jeequan.jeepay.pay.config.SystemYmlConfig
;
import
com.jeequan.jeepay.pay.model.IsvConfigContext
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
com.jeequan.jeepay.pay.rqrs.AbstractRS
;
import
com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ
;
import
com.jeequan.jeepay.pay.util.PaywayUtil
;
...
...
@@ -38,7 +38,6 @@ import org.apache.commons.lang3.StringUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
import
java.util.Date
;
/**
...
...
@@ -70,13 +69,13 @@ public class YsfpayPaymentService extends AbstractPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
return
PaywayUtil
.
getRealPaywayService
(
this
,
payOrder
.
getWayCode
()).
pay
(
rq
,
payOrder
,
mchConfigContext
);
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
return
PaywayUtil
.
getRealPaywayService
(
this
,
payOrder
.
getWayCode
()).
pay
(
rq
,
payOrder
,
mch
App
ConfigContext
);
}
/** 封装参数 & 统一请求 **/
public
JSONObject
packageParamAndReq
(
String
apiUri
,
JSONObject
reqParams
,
String
logPrefix
,
IsvConfigContext
isvConfigContext
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
JSONObject
packageParamAndReq
(
String
apiUri
,
JSONObject
reqParams
,
String
logPrefix
,
IsvConfigContext
isvConfigContext
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
YsfpayIsvParams
isvParams
=
isvConfigContext
.
getIsvParamsByIfCode
(
getIfCode
(),
YsfpayIsvParams
.
class
);
...
...
@@ -86,7 +85,7 @@ public class YsfpayPaymentService extends AbstractPaymentService {
}
reqParams
.
put
(
"serProvId"
,
isvParams
.
getSerProvId
());
//云闪付服务商标识
YsfpayIsvsubMchParams
isvsubMchParams
=
mchConfigContext
.
getIsvsubMchParamsByIfCode
(
getIfCode
(),
YsfpayIsvsubMchParams
.
class
);
YsfpayIsvsubMchParams
isvsubMchParams
=
mch
App
ConfigContext
.
getIsvsubMchParamsByIfCode
(
getIfCode
(),
YsfpayIsvsubMchParams
.
class
);
reqParams
.
put
(
"merId"
,
isvsubMchParams
.
getMerId
());
// 商户号
//签名
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/payway/AliBar.java
View file @
252369f9
...
...
@@ -25,7 +25,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.AliBarOrderRS;
import
com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -51,7 +51,7 @@ public class AliBar extends YsfpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
String
logPrefix
=
"【云闪付条码(alipay)支付】"
;
AliBarOrderRQ
bizRQ
=
(
AliBarOrderRQ
)
rq
;
AliBarOrderRS
res
=
ApiResBuilder
.
buildSuccess
(
AliBarOrderRS
.
class
);
...
...
@@ -67,7 +67,7 @@ public class AliBar extends YsfpayPaymentService {
reqParams
.
put
(
"termInfo"
,
"{\"ip\": \""
+
StringUtils
.
defaultIfEmpty
(
payOrder
.
getClientIp
(),
"127.0.0.1"
)+
"\"}"
);
//终端信息
// 发送请求
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/micropay"
,
reqParams
,
logPrefix
,
mchConfigContext
.
getIsvConfigContext
(),
mchConfigContext
);
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/micropay"
,
reqParams
,
logPrefix
,
mch
App
ConfigContext
.
getIsvConfigContext
(),
mch
App
ConfigContext
);
//请求 & 响应成功, 判断业务逻辑
String
respCode
=
resJSON
.
getString
(
"respCode"
);
//应答码
String
respMsg
=
resJSON
.
getString
(
"respMsg"
);
//应答信息
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/payway/AliJsapi.java
View file @
252369f9
...
...
@@ -25,7 +25,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.AliJsapiOrderRS;
import
com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -49,7 +49,7 @@ public class AliJsapi extends YsfpayPaymentService {
return
null
;
}
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
String
logPrefix
=
"【云闪付(alipayJs)jsapi支付】"
;
JSONObject
reqParams
=
new
JSONObject
();
AliJsapiOrderRS
res
=
ApiResBuilder
.
buildSuccess
(
AliJsapiOrderRS
.
class
);
...
...
@@ -67,7 +67,7 @@ public class AliJsapi extends YsfpayPaymentService {
reqParams
.
put
(
"customerIp"
,
StringUtils
.
defaultIfEmpty
(
payOrder
.
getClientIp
(),
"127.0.0.1"
));
// 发送请求并返回订单状态
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/unifiedorder"
,
reqParams
,
logPrefix
,
mchConfigContext
.
getIsvConfigContext
(),
mchConfigContext
);
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/unifiedorder"
,
reqParams
,
logPrefix
,
mch
App
ConfigContext
.
getIsvConfigContext
(),
mch
App
ConfigContext
);
//请求 & 响应成功, 判断业务逻辑
String
respCode
=
resJSON
.
getString
(
"respCode"
);
//应答码
String
respMsg
=
resJSON
.
getString
(
"respMsg"
);
//应答信息
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/payway/WxBar.java
View file @
252369f9
...
...
@@ -25,7 +25,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -49,7 +49,7 @@ public class WxBar extends YsfpayPaymentService {
return
null
;
}
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
String
logPrefix
=
"【云闪付条码(wechat)支付】"
;
WxBarOrderRQ
bizRQ
=
(
WxBarOrderRQ
)
rq
;
...
...
@@ -67,7 +67,7 @@ public class WxBar extends YsfpayPaymentService {
reqParams
.
put
(
"termInfo"
,
"{\"ip\": \""
+
StringUtils
.
defaultIfEmpty
(
payOrder
.
getClientIp
(),
"127.0.0.1"
)+
"\"}"
);
//终端信息
// 发送请求
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/micropay"
,
reqParams
,
logPrefix
,
mchConfigContext
.
getIsvConfigContext
(),
mchConfigContext
);
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/micropay"
,
reqParams
,
logPrefix
,
mch
App
ConfigContext
.
getIsvConfigContext
(),
mch
App
ConfigContext
);
//请求 & 响应成功, 判断业务逻辑
String
respCode
=
resJSON
.
getString
(
"respCode"
);
//应答码
String
respMsg
=
resJSON
.
getString
(
"respMsg"
);
//应答信息
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/ysfpay/payway/WxJsapi.java
View file @
252369f9
...
...
@@ -25,7 +25,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRQ;
import
com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRS
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.util.ApiResBuilder
;
import
com.jeequan.jeepay.pay.model.MchConfigContext
;
import
com.jeequan.jeepay.pay.model.Mch
App
ConfigContext
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
...
...
@@ -50,7 +50,7 @@ public class WxJsapi extends YsfpayPaymentService {
}
@Override
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
MchConfigContext
mchConfigContext
)
throws
Exception
{
public
AbstractRS
pay
(
UnifiedOrderRQ
rq
,
PayOrder
payOrder
,
Mch
App
ConfigContext
mch
App
ConfigContext
)
throws
Exception
{
String
logPrefix
=
"【云闪付(wechatJs)jsapi支付】"
;
JSONObject
reqParams
=
new
JSONObject
();
WxJsapiOrderRS
res
=
ApiResBuilder
.
buildSuccess
(
WxJsapiOrderRS
.
class
);
...
...
@@ -68,7 +68,7 @@ public class WxJsapi extends YsfpayPaymentService {
reqParams
.
put
(
"customerIp"
,
StringUtils
.
defaultIfEmpty
(
payOrder
.
getClientIp
(),
"127.0.0.1"
));
// 发送请求并返回订单状态
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/unifiedorder"
,
reqParams
,
logPrefix
,
mchConfigContext
.
getIsvConfigContext
(),
mchConfigContext
);
JSONObject
resJSON
=
packageParamAndReq
(
"/gateway/api/pay/unifiedorder"
,
reqParams
,
logPrefix
,
mch
App
ConfigContext
.
getIsvConfigContext
(),
mch
App
ConfigContext
);
//请求 & 响应成功, 判断业务逻辑
String
respCode
=
resJSON
.
getString
(
"respCode"
);
//应答码
String
respMsg
=
resJSON
.
getString
(
"respMsg"
);
//应答信息
...
...
Prev
1
2
3
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