记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
5a7178e2
Commit
5a7178e2
authored
Nov 23, 2021
by
zhengfuxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改银联支付,app支付。
parent
a593c8d9
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
44 additions
and
35 deletions
+44
-35
liquidnet-service-dragon-dev.yml
...-config/liquidnet-config/liquidnet-service-dragon-dev.yml
+2
-0
UnionpayBiz.java
...dnet/service/dragon/channel/unionpay/biz/UnionpayBiz.java
+9
-14
AbstractUnionPayStrategy.java
...nnel/unionpay/strategy/impl/AbstractUnionPayStrategy.java
+21
-19
UnionpayStrategyAppImpl.java
...annel/unionpay/strategy/impl/UnionpayStrategyAppImpl.java
+11
-1
DragonOrderRefundsServiceImpl.java
...ce/dragon/service/impl/DragonOrderRefundsServiceImpl.java
+1
-1
No files found.
liquidnet-bus-config/liquidnet-config/liquidnet-service-dragon-dev.yml
View file @
5a7178e2
...
@@ -43,6 +43,8 @@ liquidnet:
...
@@ -43,6 +43,8 @@ liquidnet:
acpsdk
:
acpsdk
:
## 消费接口
## 消费接口
frontTransUrl
:
${liquidnet.dragon.unionpay.gateway-url}/gateway/api/frontTransReq.do
frontTransUrl
:
${liquidnet.dragon.unionpay.gateway-url}/gateway/api/frontTransReq.do
## app 消费接口
appTransUrl
:
${liquidnet.dragon.unionpay.gateway-url}/gateway/api/appTransReq.do
## 交易状态查询
## 交易状态查询
backTransUrl
:
${liquidnet.dragon.unionpay.gateway-url}/gateway/api/backTransReq.do
backTransUrl
:
${liquidnet.dragon.unionpay.gateway-url}/gateway/api/backTransReq.do
## 退款路径 (https://gateway.95516.com/gateway/api/backTransReq.do)
## 退款路径 (https://gateway.95516.com/gateway/api/backTransReq.do)
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/unionpay/biz/UnionpayBiz.java
View file @
5a7178e2
...
@@ -66,7 +66,7 @@ public class UnionpayBiz {
...
@@ -66,7 +66,7 @@ public class UnionpayBiz {
/***商户接入参数***/
/***商户接入参数***/
requestData
.
put
(
"merId"
,
payReq
.
getMerId
());
//商户号码,请改成自己申请的正式商户号或者open上注册得来的777测试商户号
requestData
.
put
(
"merId"
,
payReq
.
getMerId
());
//商户号码,请改成自己申请的正式商户号或者open上注册得来的777测试商户号
requestData
.
put
(
"accessType"
,
"0"
);
//接入类型,0:直连商户
requestData
.
put
(
"accessType"
,
"0"
);
//接入类型,0:直连商户
requestData
.
put
(
"orderId"
,
orderId
);
//商户订单号,8-40位数字字母,不能含“-”或“_”,可以自行定制规则
requestData
.
put
(
"orderId"
,
payReq
.
getOrderId
()
);
//商户订单号,8-40位数字字母,不能含“-”或“_”,可以自行定制规则
requestData
.
put
(
"txnTime"
,
txnTime
);
//订单发送时间,取系统时间,格式为yyyyMMddHHmmss,必须取当前时间,否则会报txnTime无效
requestData
.
put
(
"txnTime"
,
txnTime
);
//订单发送时间,取系统时间,格式为yyyyMMddHHmmss,必须取当前时间,否则会报txnTime无效
requestData
.
put
(
"currencyCode"
,
"156"
);
//交易币种(境内商户一般是156 人民币)
requestData
.
put
(
"currencyCode"
,
"156"
);
//交易币种(境内商户一般是156 人民币)
requestData
.
put
(
"txnAmt"
,
payReq
.
getTxnAmt
());
//交易金额,单位分,不要带小数点
requestData
.
put
(
"txnAmt"
,
payReq
.
getTxnAmt
());
//交易金额,单位分,不要带小数点
...
@@ -111,13 +111,9 @@ public class UnionpayBiz {
...
@@ -111,13 +111,9 @@ public class UnionpayBiz {
*/
*/
public
Map
<
String
,
String
>
tradeAppPay
(
UnionpayTradePayReq
payReq
)
{
public
Map
<
String
,
String
>
tradeAppPay
(
UnionpayTradePayReq
payReq
)
{
log
.
info
(
"UnionpayBiz.tradeAppPay-->> req : {}"
,
payReq
.
toString
());
log
.
info
(
"UnionpayBiz.tradeAppPay-->> req : {}"
,
payReq
.
toString
());
String
txnAmt
=
"100"
;
String
orderId
=
IDGenerator
.
payCode
();
//设置订单过期时间
//设置订单过期时间
String
txnTime
=
DateUtil
.
format
(
LocalDateTime
.
now
(),
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
);
String
txnTime
=
DateUtil
.
format
(
LocalDateTime
.
now
(),
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
);
Map
<
String
,
String
>
contentData
=
new
HashMap
<
String
,
String
>();
Map
<
String
,
String
>
contentData
=
new
HashMap
<
String
,
String
>();
/***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
/***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
contentData
.
put
(
"version"
,
sdkConfig
.
getVersion
());
//版本号 全渠道默认值
contentData
.
put
(
"version"
,
sdkConfig
.
getVersion
());
//版本号 全渠道默认值
contentData
.
put
(
"encoding"
,
UnionpayConstant
.
encoding
);
//字符集编码 可以使用UTF-8,GBK两种方式
contentData
.
put
(
"encoding"
,
UnionpayConstant
.
encoding
);
//字符集编码 可以使用UTF-8,GBK两种方式
...
@@ -130,10 +126,10 @@ public class UnionpayBiz {
...
@@ -130,10 +126,10 @@ public class UnionpayBiz {
/***商户接入参数***/
/***商户接入参数***/
contentData
.
put
(
"merId"
,
payReq
.
getMerId
());
//商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
contentData
.
put
(
"merId"
,
payReq
.
getMerId
());
//商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
contentData
.
put
(
"accessType"
,
"0"
);
//接入类型,商户接入填0 ,不需修改(0:直连商户, 1: 收单机构 2:平台商户)
contentData
.
put
(
"accessType"
,
"0"
);
//接入类型,商户接入填0 ,不需修改(0:直连商户, 1: 收单机构 2:平台商户)
contentData
.
put
(
"orderId"
,
orderId
);
//商户订单号,8-40位数字字母,不能含“-”或“_”,可以自行定制规则
contentData
.
put
(
"orderId"
,
payReq
.
getOrderId
()
);
//商户订单号,8-40位数字字母,不能含“-”或“_”,可以自行定制规则
contentData
.
put
(
"txnTime"
,
txnTime
);
//订单发送时间,取系统时间,格式为yyyyMMddHHmmss,必须取当前时间,否则会报txnTime无效
contentData
.
put
(
"txnTime"
,
txnTime
);
//订单发送时间,取系统时间,格式为yyyyMMddHHmmss,必须取当前时间,否则会报txnTime无效
contentData
.
put
(
"accType"
,
"01"
);
//账号类型 01:银行卡02:存折03:IC卡帐号类型(卡介质)
contentData
.
put
(
"accType"
,
"01"
);
//账号类型 01:银行卡02:存折03:IC卡帐号类型(卡介质)
contentData
.
put
(
"txnAmt"
,
txnAmt
);
//交易金额 单位为分,不能带小数点
contentData
.
put
(
"txnAmt"
,
payReq
.
getTxnAmt
()
);
//交易金额 单位为分,不能带小数点
contentData
.
put
(
"currencyCode"
,
"156"
);
//境内商户固定 156 人民币
contentData
.
put
(
"currencyCode"
,
"156"
);
//境内商户固定 156 人民币
// 请求方保留域,
// 请求方保留域,
...
@@ -153,13 +149,13 @@ public class UnionpayBiz {
...
@@ -153,13 +149,13 @@ public class UnionpayBiz {
//注意:1.需设置为外网能访问,否则收不到通知 2.http https均可 3.收单后台通知后需要10秒内返回http200或302状态码
//注意:1.需设置为外网能访问,否则收不到通知 2.http https均可 3.收单后台通知后需要10秒内返回http200或302状态码
// 4.如果银联通知服务器发送通知后10秒内未收到返回状态码或者应答码非http200或302,那么银联会间隔一段时间再次发送。总共发送5次,银联后续间隔1、2、4、5 分钟后会再次通知。
// 4.如果银联通知服务器发送通知后10秒内未收到返回状态码或者应答码非http200或302,那么银联会间隔一段时间再次发送。总共发送5次,银联后续间隔1、2、4、5 分钟后会再次通知。
// 5.后台通知地址如果上送了带有?的参数,例如:http://abc/web?a=b&c=d 在后台通知处理程序验证签名之前需要编写逻辑将这些字段去掉再验签,否则将会验签失败
// 5.后台通知地址如果上送了带有?的参数,例如:http://abc/web?a=b&c=d 在后台通知处理程序验证签名之前需要编写逻辑将这些字段去掉再验签,否则将会验签失败
contentData
.
put
(
"backUrl"
,
sdkConfig
.
getBackUrl
());
contentData
.
put
(
"backUrl"
,
payReq
.
getBackUrl
());
/**对请求参数进行签名并发送http post请求,接收同步应答报文**/
/**对请求参数进行签名并发送http post请求,接收同步应答报文**/
Map
<
String
,
String
>
reqData
=
acpService
.
sign
(
contentData
,
UnionpayConstant
.
encoding
);
//报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
Map
<
String
,
String
>
reqData
=
acpService
.
sign
(
contentData
,
UnionpayConstant
.
encoding
);
//报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。
String
requestAppUrl
=
sdkConfig
.
getAppTransUrl
();
//交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.backTransUrl
String
requestAppUrl
=
sdkConfig
.
getAppTransUrl
();
//交易请求url从配置文件读取对应属性文件acp_sdk.properties中的 acpsdk.backTransUrl
Map
<
String
,
String
>
rspData
=
acpService
.
post
(
reqData
,
requestAppUrl
,
UnionpayConstant
.
encoding
);
//发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
Map
<
String
,
String
>
rspData
=
acpService
.
post
(
reqData
,
requestAppUrl
,
UnionpayConstant
.
encoding
);
//发送请求报文并接受同步应答(默认连接超时时间30秒,读取返回结果超时时间30秒);这里调用signData之后,调用submitUrl之前不能对submitFromData中的键值对做任何修改,如果修改会导致验签不通过
log
.
info
(
"银联App支付返参{}"
,
rspData
);
/**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
/**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
//应答码规范参考open.unionpay.com帮助中心 下载 产品接口规范 《平台接入接口规范-第5部分-附录》
//应答码规范参考open.unionpay.com帮助中心 下载 产品接口规范 《平台接入接口规范-第5部分-附录》
if
(!
rspData
.
isEmpty
()){
if
(!
rspData
.
isEmpty
()){
...
@@ -169,26 +165,25 @@ public class UnionpayBiz {
...
@@ -169,26 +165,25 @@ public class UnionpayBiz {
if
((
"00"
).
equals
(
respCode
)){
if
((
"00"
).
equals
(
respCode
)){
//成功,获取tn号
//成功,获取tn号
//String tn = resmap.get("tn");
//String tn = resmap.get("tn");
//TODO
log
.
info
(
"成功返回结果 :{}"
);
}
else
{
}
else
{
//其他应答码为失败请排查原因或做失败处理
//其他应答码为失败请排查原因或做失败处理
//TODO
//TODO
String
respMsg
=
rspData
.
get
(
"respMsg"
)
;
String
respMsg
=
rspData
.
get
(
"respMsg"
)
;
log
.
info
(
"失败返回结果 respMsg:{}"
,
respMsg
);
log
.
info
(
"失败返回结果 respMsg:{}"
,
respMsg
);
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_PARAM_ERROR
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_PARAM_ERROR
.
getMessage
());
}
}
}
else
{
}
else
{
log
.
error
(
"验证签名失败"
);
log
.
error
(
"验证签名失败"
);
//TODO 检查验证签名失败的原因
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_UNIONPAY_SIGN_ERROR
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_UNIONPAY_SIGN_ERROR
.
getMessage
());
}
}
}
else
{
}
else
{
//未返回正确的http状态
//未返回正确的http状态
log
.
error
(
"未获取到返回报文或返回http状态码非200"
);
log
.
error
(
"未获取到返回报文或返回http状态码非200"
);
}
}
String
reqMessage
=
this
.
genHtmlResult
(
reqData
);
/*
String reqMessage = this.genHtmlResult(reqData);
String rspMessage = this.genHtmlResult(rspData);
String rspMessage = this.genHtmlResult(rspData);
log.info("请求报文:<br/>"+reqMessage+"<br/>");
log.info("请求报文:<br/>"+reqMessage+"<br/>");
log
.
info
(
"应答报文:</br>"
+
rspMessage
+
""
);
log.info("应答报文:</br>"+rspMessage+"");
*/
return
rspData
;
return
rspData
;
}
}
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/unionpay/strategy/impl/AbstractUnionPayStrategy.java
View file @
5a7178e2
...
@@ -43,8 +43,8 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
...
@@ -43,8 +43,8 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
@Override
@Override
public
ResponseDto
<
DragonPayBaseRespDto
>
dragonPay
(
DragonPayBaseReqDto
dragonPayBaseReqDto
)
{
public
ResponseDto
<
DragonPayBaseRespDto
>
dragonPay
(
DragonPayBaseReqDto
dragonPayBaseReqDto
)
{
try
{
//构造公共请求参数
//构造公共请求参数
UnionpayTradePayReq
payReq
=
this
.
buildRequestParamMap
(
dragonPayBaseReqDto
);
UnionpayTradePayReq
payReq
=
this
.
buildRequestParamMap
(
dragonPayBaseReqDto
);
//构造个性化参数
//构造个性化参数
payReq
=
this
.
appendRequestParam
(
payReq
,
dragonPayBaseReqDto
);
payReq
=
this
.
appendRequestParam
(
payReq
,
dragonPayBaseReqDto
);
...
@@ -52,16 +52,18 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
...
@@ -52,16 +52,18 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
//调用支付
//调用支付
long
startTime
=
System
.
currentTimeMillis
();
long
startTime
=
System
.
currentTimeMillis
();
Map
<
String
,
String
>
result
=
this
.
executePay
(
payReq
);
Map
<
String
,
String
>
result
=
this
.
executePay
(
payReq
);
log
.
debug
(
"dragonPay:unionpay:"
+
dragonPayBaseReqDto
.
getDeviceFrom
()+
" response xmlStr
: {} "
,
JSON
.
toJSONString
(
result
));
log
.
debug
(
"dragonPay:unionpay:"
+
dragonPayBaseReqDto
.
getDeviceFrom
()+
" response
: {} "
,
JSON
.
toJSONString
(
result
));
log
.
info
(
"unionpay-dragonPay->耗时:{}"
,(
System
.
currentTimeMillis
()
-
startTime
)+
"毫秒"
);
log
.
info
(
"unionpay-dragonPay->耗时:{}"
,(
System
.
currentTimeMillis
()
-
startTime
)+
"毫秒"
);
//拼接返回参数
//拼接返回参数
DragonPayBaseRespDto
respDto
=
buildCommonRespDto
(
dragonPayBaseReqDto
);
DragonPayBaseRespDto
respDto
=
buildCommonRespDto
(
dragonPayBaseReqDto
);
respDto
=
this
.
buildResponseDto
(
respDto
,
result
);
respDto
=
this
.
buildResponseDto
(
respDto
,
result
);
//支付订单持久化
//支付订单持久化
dragonServiceCommonBiz
.
buildPayOrders
(
dragonPayBaseReqDto
,
null
);
dragonServiceCommonBiz
.
buildPayOrders
(
dragonPayBaseReqDto
,
null
);
return
ResponseDto
.
success
(
respDto
);
return
ResponseDto
.
success
(
respDto
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
return
null
;
}
}
/**
/**
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/unionpay/strategy/impl/UnionpayStrategyAppImpl.java
View file @
5a7178e2
package
com
.
liquidnet
.
service
.
dragon
.
channel
.
unionpay
.
strategy
.
impl
;
package
com
.
liquidnet
.
service
.
dragon
.
channel
.
unionpay
.
strategy
.
impl
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.dragon.channel.unionpay.biz.UnionpayBiz
;
import
com.liquidnet.service.dragon.channel.unionpay.biz.UnionpayBiz
;
import
com.liquidnet.service.dragon.channel.unionpay.req.UnionpayTradePayReq
;
import
com.liquidnet.service.dragon.channel.unionpay.req.UnionpayTradePayReq
;
import
com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConfig
;
import
com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler
;
import
com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseReqDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseReqDto
;
...
@@ -37,6 +39,9 @@ public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy {
...
@@ -37,6 +39,9 @@ public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy {
@Autowired
@Autowired
private
UnionpayBiz
unionpayBiz
;
private
UnionpayBiz
unionpayBiz
;
@Autowired
private
SDKConfig
sdkConfig
;
@Override
@Override
protected
Map
<
String
,
String
>
executePay
(
UnionpayTradePayReq
payReq
)
{
protected
Map
<
String
,
String
>
executePay
(
UnionpayTradePayReq
payReq
)
{
return
unionpayBiz
.
tradeAppPay
(
payReq
);
return
unionpayBiz
.
tradeAppPay
(
payReq
);
...
@@ -56,9 +61,14 @@ public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy {
...
@@ -56,9 +61,14 @@ public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy {
@Override
@Override
DragonPayBaseRespDto
buildResponseDto
(
DragonPayBaseRespDto
payBaseRespDto
,
Map
<
String
,
String
>
respResult
)
{
DragonPayBaseRespDto
buildResponseDto
(
DragonPayBaseRespDto
payBaseRespDto
,
Map
<
String
,
String
>
respResult
)
{
if
(
StringUtil
.
isNotNull
(
respResult
)&&
respResult
.
get
(
"tn"
)!=
null
){
/*
if(StringUtil.isNotNull(respResult)&&respResult.get("tn")!=null){
payBaseRespDto.getPayData().setPrepayId(respResult.get("tn"));
payBaseRespDto.getPayData().setPrepayId(respResult.get("tn"));
}*/
payBaseRespDto
.
getPayData
().
setRedirectUrl
(
sdkConfig
.
getFrontTransUrl
());
if
(
StringUtil
.
isNotNull
(
respResult
)){
payBaseRespDto
.
getPayData
().
setOrderStr
(
JsonUtils
.
toJson
(
respResult
));
}
}
return
payBaseRespDto
;
return
payBaseRespDto
;
}
}
}
}
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/service/impl/DragonOrderRefundsServiceImpl.java
View file @
5a7178e2
...
@@ -159,7 +159,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -159,7 +159,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
data
.
put
(
"signMethod"
,
sdkConfig
.
getSignMethod
());
//签名方法
data
.
put
(
"signMethod"
,
sdkConfig
.
getSignMethod
());
//签名方法
data
.
put
(
"txnType"
,
"04"
);
//交易类型 04-退货
data
.
put
(
"txnType"
,
"04"
);
//交易类型 04-退货
data
.
put
(
"txnSubType"
,
"00"
);
//交易子类型 默认00
data
.
put
(
"txnSubType"
,
"00"
);
//交易子类型 默认00
data
.
put
(
"bizType"
,
"0201"
);
//业务类型
data
.
put
(
"bizType"
,
"0
00
201"
);
//业务类型
data
.
put
(
"channelType"
,
"08"
);
//渠道类型,07-PC,08-手机
data
.
put
(
"channelType"
,
"08"
);
//渠道类型,07-PC,08-手机
/***商户接入参数***/
/***商户接入参数***/
data
.
put
(
"merId"
,
unionMerchantId
);
//商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
data
.
put
(
"merId"
,
unionMerchantId
);
//商户号码,请改成自己申请的商户号或者open上注册得来的777商户号测试
...
...
Write
Preview
Markdown
is supported
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