记得上下班打卡 | 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
7c0788cb
Commit
7c0788cb
authored
Jul 13, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
62f43927
e56d8f2f
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
447 additions
and
577 deletions
+447
-577
AdamLoginController.java
...iquidnet/service/adam/controller/AdamLoginController.java
+2
-2
PayChannelStrategyWepayImpl.java
...on/channel/strategy/impl/PayChannelStrategyWepayImpl.java
+2
-2
AbstractWepayStrategy.java
...on/channel/wepay/strategy/impl/AbstractWepayStrategy.java
+5
-4
WepayStrategyAppImpl.java
...gon/channel/wepay/strategy/impl/WepayStrategyAppImpl.java
+2
-0
WepayStrategyAppletImpl.java
.../channel/wepay/strategy/impl/WepayStrategyAppletImpl.java
+2
-0
WepayStrategyJsImpl.java
...agon/channel/wepay/strategy/impl/WepayStrategyJsImpl.java
+2
-0
WepayStrategyWapImpl.java
...gon/channel/wepay/strategy/impl/WepayStrategyWapImpl.java
+2
-0
WepayUtil.java
...iquidnet/service/dragon/channel/wepay/util/WepayUtil.java
+345
-467
PayController.java
...om/liquidnet/service/dragon/controller/PayController.java
+5
-2
DragonOrderRefundsServiceImpl.java
...ce/dragon/service/impl/DragonOrderRefundsServiceImpl.java
+28
-92
PayWepayUtils.java
...ava/com/liquidnet/service/dragon/utils/PayWepayUtils.java
+50
-7
KylinOrderTicketsServiceImpl.java
...vice/order/service/impl/KylinOrderTicketsServiceImpl.java
+2
-1
No files found.
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/src/main/java/com/liquidnet/service/adam/controller/AdamLoginController.java
View file @
7c0788cb
...
@@ -343,7 +343,7 @@ public class AdamLoginController {
...
@@ -343,7 +343,7 @@ public class AdamLoginController {
if
(
null
==
respJNode
)
{
if
(
null
==
respJNode
)
{
return
ResponseDto
.
success
(
null
);
return
ResponseDto
.
success
(
null
);
}
}
openId
=
String
.
valueOf
(
respJNode
.
get
(
"openid"
)
);
openId
=
respJNode
.
get
(
"openid"
).
asText
(
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"WX.API调用异常"
,
e
);
log
.
error
(
"WX.API调用异常"
,
e
);
}
}
...
@@ -363,7 +363,7 @@ public class AdamLoginController {
...
@@ -363,7 +363,7 @@ public class AdamLoginController {
if
(
null
==
respJNode
||
!
respJNode
.
get
(
"errcode"
).
isEmpty
())
{
if
(
null
==
respJNode
||
!
respJNode
.
get
(
"errcode"
).
isEmpty
())
{
return
ResponseDto
.
success
(
null
);
return
ResponseDto
.
success
(
null
);
}
}
openId
=
String
.
valueOf
(
respJNode
.
get
(
"openid"
)
);
openId
=
respJNode
.
get
(
"openid"
).
asText
(
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"WX.API调用异常"
,
e
);
log
.
error
(
"WX.API调用异常"
,
e
);
}
}
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/strategy/impl/PayChannelStrategyWepayImpl.java
View file @
7c0788cb
...
@@ -5,10 +5,10 @@ import com.liquidnet.service.base.ResponseDto;
...
@@ -5,10 +5,10 @@ import com.liquidnet.service.base.ResponseDto;
import
com.liquidnet.service.dragon.channel.strategy.IPayChannelStrategy
;
import
com.liquidnet.service.dragon.channel.strategy.IPayChannelStrategy
;
import
com.liquidnet.service.dragon.channel.strategy.annotation.StrategyPayChannelHandler
;
import
com.liquidnet.service.dragon.channel.strategy.annotation.StrategyPayChannelHandler
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.WepayStrategyContext
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.WepayStrategyContext
;
import
com.liquidnet.service.dragon.channel.wepay.util.WepayUtil
;
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
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -46,7 +46,7 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy {
...
@@ -46,7 +46,7 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy {
InputStream
inputStream
=
request
.
getInputStream
();
// 从request中取得输入流
InputStream
inputStream
=
request
.
getInputStream
();
// 从request中取得输入流
Map
<
String
,
String
>
notifyMap
=
new
HashMap
<
String
,
String
>();
Map
<
String
,
String
>
notifyMap
=
new
HashMap
<
String
,
String
>();
try
{
try
{
notifyMap
=
WepayUtil
.
parseXml
(
inputStream
);
notifyMap
=
PayWepayUtils
.
parseXml
(
inputStream
);
log
.
info
(
"dragonNotify-->wepay json : {}"
,
JSON
.
toJSONString
(
notifyMap
));
log
.
info
(
"dragonNotify-->wepay json : {}"
,
JSON
.
toJSONString
(
notifyMap
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/wepay/strategy/impl/AbstractWepayStrategy.java
View file @
7c0788cb
...
@@ -4,7 +4,6 @@ import com.liquidnet.commons.lang.util.DateUtil;
...
@@ -4,7 +4,6 @@ import com.liquidnet.commons.lang.util.DateUtil;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto
;
import
com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.IWepayStrategy
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.IWepayStrategy
;
import
com.liquidnet.service.dragon.channel.wepay.util.WepayUtil
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseReqDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseReqDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
...
@@ -44,10 +43,11 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
...
@@ -44,10 +43,11 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
//追加请求参数
//追加请求参数
SortedMap
<
String
,
Object
>
parameters
=
appendRequestParam
(
commonParams
);
SortedMap
<
String
,
Object
>
parameters
=
appendRequestParam
(
commonParams
);
//生成签名
//生成签名
String
sign
=
WepayUtil
.
getSign
(
parameters
,
parentKey
);
String
sign
=
PayWepayUtils
.
getInstance
().
createSign
(
parameters
);
parameters
.
put
(
"sign"
,
sign
);
parameters
.
put
(
"sign"
,
sign
);
//构造支付请求xml
//构造支付请求xml
String
data
=
WepayUtil
.
mapTo
Xml
(
parameters
);
String
data
=
PayWepayUtils
.
getInstance
().
getRequest
Xml
(
parameters
);
HttpPost
httpost
=
new
HttpPost
(
this
.
getRequestUrl
());
HttpPost
httpost
=
new
HttpPost
(
this
.
getRequestUrl
());
httpost
.
setEntity
(
new
StringEntity
(
data
,
"UTF-8"
));
httpost
.
setEntity
(
new
StringEntity
(
data
,
"UTF-8"
));
...
@@ -87,6 +87,8 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
...
@@ -87,6 +87,8 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
payData
.
setPaySign
(
respWepayDto
.
getSign
());
payData
.
setPaySign
(
respWepayDto
.
getSign
());
payData
.
setSignType
(
"MD5"
);
payData
.
setSignType
(
"MD5"
);
payData
.
setTimeStamp
(
Long
.
valueOf
(
DateUtil
.
now
().
getTime
()).
toString
());
payData
.
setTimeStamp
(
Long
.
valueOf
(
DateUtil
.
now
().
getTime
()).
toString
());
payData
.
setPartnerId
(
respWepayDto
.
getMchId
());
payData
.
setPrepayId
(
respWepayDto
.
getPrepayId
());
respDto
.
setPayData
(
payData
);
respDto
.
setPayData
(
payData
);
return
respDto
;
return
respDto
;
}
}
...
@@ -99,7 +101,6 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
...
@@ -99,7 +101,6 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
String
nonceStr
=
PayWepayUtils
.
getInstance
().
getNonceStr
();
String
nonceStr
=
PayWepayUtils
.
getInstance
().
getNonceStr
();
SortedMap
<
String
,
Object
>
parameters
=
new
TreeMap
<>();
SortedMap
<
String
,
Object
>
parameters
=
new
TreeMap
<>();
parameters
.
put
(
"mch_id"
,
PayWepayUtils
.
getInstance
().
getMerchantId
());
parameters
.
put
(
"mch_id"
,
PayWepayUtils
.
getInstance
().
getMerchantId
());
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getAppId
());
parameters
.
put
(
"nonce_str"
,
nonceStr
);
parameters
.
put
(
"nonce_str"
,
nonceStr
);
parameters
.
put
(
"spbill_create_ip"
,
dragonPayBaseReqDto
.
getClientIp
());
parameters
.
put
(
"spbill_create_ip"
,
dragonPayBaseReqDto
.
getClientIp
());
parameters
.
put
(
"total_fee"
,
dragonPayBaseReqDto
.
getPrice
().
multiply
(
BigDecimal
.
valueOf
(
100L
)).
intValue
());
parameters
.
put
(
"total_fee"
,
dragonPayBaseReqDto
.
getPrice
().
multiply
(
BigDecimal
.
valueOf
(
100L
)).
intValue
());
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/wepay/strategy/impl/WepayStrategyAppImpl.java
View file @
7c0788cb
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -29,6 +30,7 @@ public class WepayStrategyAppImpl extends AbstractWepayStrategy {
...
@@ -29,6 +30,7 @@ public class WepayStrategyAppImpl extends AbstractWepayStrategy {
@Override
@Override
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
requestMap
.
put
(
"trade_type"
,
"APP"
);
requestMap
.
put
(
"trade_type"
,
"APP"
);
requestMap
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getAPP_ID
());
return
requestMap
;
return
requestMap
;
}
}
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/wepay/strategy/impl/WepayStrategyAppletImpl.java
View file @
7c0788cb
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -30,6 +31,7 @@ public class WepayStrategyAppletImpl extends AbstractWepayStrategy{
...
@@ -30,6 +31,7 @@ public class WepayStrategyAppletImpl extends AbstractWepayStrategy{
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
requestMap
.
put
(
"trade_type"
,
"JSAPI"
);
requestMap
.
put
(
"trade_type"
,
"JSAPI"
);
requestMap
.
put
(
"openid"
,
requestMap
.
get
(
"openId"
));
requestMap
.
put
(
"openid"
,
requestMap
.
get
(
"openId"
));
requestMap
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getAPPLET_APP_ID
());
return
requestMap
;
return
requestMap
;
}
}
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/wepay/strategy/impl/WepayStrategyJsImpl.java
View file @
7c0788cb
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -30,6 +31,7 @@ public class WepayStrategyJsImpl extends AbstractWepayStrategy{
...
@@ -30,6 +31,7 @@ public class WepayStrategyJsImpl extends AbstractWepayStrategy{
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
requestMap
.
put
(
"trade_type"
,
"JSAPI"
);
requestMap
.
put
(
"trade_type"
,
"JSAPI"
);
requestMap
.
put
(
"openid"
,
requestMap
.
get
(
"openId"
));
requestMap
.
put
(
"openid"
,
requestMap
.
get
(
"openId"
));
requestMap
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getJS_APP_ID
());
return
requestMap
;
return
requestMap
;
}
}
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/wepay/strategy/impl/WepayStrategyWapImpl.java
View file @
7c0788cb
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
...
@@ -4,6 +4,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.constant.DragonConstant
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -29,6 +30,7 @@ public class WepayStrategyWapImpl extends AbstractWepayStrategy{
...
@@ -29,6 +30,7 @@ public class WepayStrategyWapImpl extends AbstractWepayStrategy{
@Override
@Override
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
SortedMap
<
String
,
Object
>
appendRequestParam
(
SortedMap
<
String
,
Object
>
requestMap
)
{
requestMap
.
put
(
"trade_type"
,
"MWEB"
);
requestMap
.
put
(
"trade_type"
,
"MWEB"
);
requestMap
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getWAP_APP_ID
());
return
requestMap
;
return
requestMap
;
}
}
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/wepay/util/WepayUtil.java
View file @
7c0788cb
package
com
.
liquidnet
.
service
.
dragon
.
channel
.
wepay
.
util
;
//package com.liquidnet.service.dragon.channel.wepay.util;
//
import
com.liquidnet.commons.lang.util.StringUtil
;
//import com.liquidnet.commons.lang.util.StringUtil;
import
com.liquidnet.service.dragon.channel.wepay.config.WeixinConfigUtil
;
//import com.liquidnet.service.dragon.channel.wepay.req.WepayPrePayReq;
import
com.liquidnet.service.dragon.channel.wepay.req.WepayPrePayReq
;
//import lombok.extern.slf4j.Slf4j;
import
lombok.extern.slf4j.Slf4j
;
//import org.dom4j.Document;
import
org.dom4j.Document
;
//import org.dom4j.Element;
import
org.dom4j.Element
;
//import org.dom4j.io.SAXReader;
import
org.dom4j.io.SAXReader
;
//import org.slf4j.Logger;
import
org.slf4j.Logger
;
//import org.slf4j.LoggerFactory;
import
org.slf4j.LoggerFactory
;
//
//import javax.net.ssl.HttpsURLConnection;
import
javax.net.ssl.HttpsURLConnection
;
//import java.io.IOException;
import
java.io.IOException
;
//import java.io.InputStream;
import
java.io.InputStream
;
//import java.io.InputStreamReader;
import
java.io.InputStreamReader
;
//import java.io.OutputStream;
import
java.io.OutputStream
;
//import java.net.MalformedURLException;
import
java.math.BigDecimal
;
//import java.net.URL;
import
java.net.MalformedURLException
;
//import java.util.*;
import
java.net.URL
;
//
import
java.util.*
;
///**
// * @author AnJiabin <anjiabin@zhengzai.tv>
/**
// * @version V1.0
* @author AnJiabin <anjiabin@zhengzai.tv>
// * @Description: TODO
* @version V1.0
// * @class: WepayUtil
* @Description: TODO
// * @Package com.liquidnet.service.dragon.channel.wepay.util
* @class: WepayUtil
// * @Copyright: LightNet @ Copyright (c) 2021
* @Package com.liquidnet.service.dragon.channel.wepay.util
// * @date 2021/7/9 15:20
* @Copyright: LightNet @ Copyright (c) 2021
// */
* @date 2021/7/9 15:20
//@Slf4j
*/
//public class WepayUtil {
@Slf4j
// private static final Logger logger = LoggerFactory.getLogger(WepayUtil.class);
public
class
WepayUtil
{
//
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
WepayUtil
.
class
);
// private WepayUtil() {
//
private
WepayUtil
()
{
// }
//
}
// /**
// * 生成随机字符串
/**
// *
* 微信被扫(扫码设备)
// * @return
*
// */
* @param outTradeNo
// public static String getnonceStr() {
* @param body
// Random random = new Random();
* @param totalAmount
// StringBuilder nonceStrBuilder = new StringBuilder();
* @param spbillCreateIp
// for (int i = 0; i < 31; i++) {
* @param authCode
// nonceStrBuilder.append(random.nextInt(10));
* @return
// }
*/
// return nonceStrBuilder.toString();
public
static
Map
<
String
,
Object
>
micropay
(
String
outTradeNo
,
String
body
,
BigDecimal
totalAmount
,
String
spbillCreateIp
,
String
authCode
)
{
// }
String
nonce_str
=
getnonceStr
();
//
Integer
total_fee
=
totalAmount
.
multiply
(
BigDecimal
.
valueOf
(
100L
)).
intValue
();
// /**
// * 转xml格式
SortedMap
<
String
,
Object
>
paramMap
=
new
TreeMap
<>();
// *
paramMap
.
put
(
"appid"
,
WeixinConfigUtil
.
appId
);
// * @param paramMap
paramMap
.
put
(
"mch_id"
,
WeixinConfigUtil
.
mch_id
);
// * @return
paramMap
.
put
(
"nonce_str"
,
nonce_str
);
// */
paramMap
.
put
(
"sign_type"
,
"MD5"
);
// public static String mapToXml(SortedMap<String, Object> paramMap) {
paramMap
.
put
(
"body"
,
body
);
// StringBuilder dataBuilder = new StringBuilder("<xml>");
paramMap
.
put
(
"out_trade_no"
,
outTradeNo
);
// for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
paramMap
.
put
(
"total_fee"
,
total_fee
);
// if (!StringUtil.isEmpty(entry.getValue())) {
paramMap
.
put
(
"fee_type"
,
"CNY"
);
// dataBuilder.append("<").append(entry.getKey()).append(">").append(entry.getValue()).append("</").append(entry.getKey()).append(">");
paramMap
.
put
(
"spbill_create_ip"
,
spbillCreateIp
);
// }
paramMap
.
put
(
"auth_code"
,
authCode
);
// }
paramMap
.
put
(
"sign"
,
getSign
(
paramMap
,
WeixinConfigUtil
.
partnerKey
));
// dataBuilder.append("</xml>");
String
data
=
mapToXml
(
paramMap
);
// logger.info("Map转Xml结果:{}", dataBuilder.toString());
logger
.
info
(
"微信条码请求报文:{}"
,
data
);
// return dataBuilder.toString();
Map
<
String
,
Object
>
resultMap
=
httpXmlRequest
(
"https://api.mch.weixin.qq.com/pay/micropay"
,
"POST"
,
data
);
// }
logger
.
info
(
"微信条码返回报文:{}"
,
resultMap
);
//
if
(
resultMap
==
null
||
resultMap
.
isEmpty
())
{
// /**
return
null
;
// * 发送xml数据,获取返回结果
}
// *
SortedMap
<
String
,
Object
>
responseMap
=
new
TreeMap
<>();
// * @param requestUrl
responseMap
.
putAll
(
resultMap
);
// * @param requestMethod
String
resultSign
=
getSign
(
responseMap
,
WeixinConfigUtil
.
partnerKey
);
// * @param xmlStr
if
(
resultSign
.
equals
(
resultMap
.
get
(
"sign"
)))
{
// * @return
resultMap
.
put
(
"verify"
,
"YES"
);
// */
}
else
{
// public static Map<String, Object> httpXmlRequest(String requestUrl, String requestMethod, String xmlStr) {
logger
.
info
(
"返回报文验签失败,返回报文签名:{},返回签名:{}"
,
resultSign
,
resultMap
.
get
(
"sign"
));
// // 将解析结果存储在HashMap中
resultMap
.
put
(
"verify"
,
"NO"
);
// Map<String, Object> map = new HashMap<String, Object>();
}
// try {
return
resultMap
;
// HttpsURLConnection urlCon = (HttpsURLConnection) (new URL(requestUrl)).openConnection();
}
// urlCon.setDoInput(true);
// urlCon.setDoOutput(true);
/**
// // 设置请求方式(GET/POST)
* 小程序支付
// urlCon.setRequestMethod(requestMethod);
*
//
* @return
// if ("GET".equalsIgnoreCase(requestMethod)) {
*/
// urlCon.connect();
public
static
Map
<
String
,
Object
>
appletPay
(
String
outTradeNo
,
String
body
,
BigDecimal
totalAmount
,
String
spbillCreateIp
,
String
notifyUrl
,
String
openid
)
{
String
nonce_str
=
getnonceStr
();
Integer
totalFee
=
totalAmount
.
multiply
(
BigDecimal
.
valueOf
(
100L
)).
intValue
();
String
tradeType
=
"JSAPI"
;
SortedMap
<
String
,
Object
>
paramMap
=
new
TreeMap
<>();
paramMap
.
put
(
"appid"
,
WeixinConfigUtil
.
xAppId
);
paramMap
.
put
(
"mch_id"
,
WeixinConfigUtil
.
xMchId
);
paramMap
.
put
(
"nonce_str"
,
nonce_str
);
paramMap
.
put
(
"sign_type"
,
"MD5"
);
paramMap
.
put
(
"body"
,
body
);
paramMap
.
put
(
"out_trade_no"
,
outTradeNo
);
paramMap
.
put
(
"total_fee"
,
totalFee
);
paramMap
.
put
(
"spbill_create_ip"
,
spbillCreateIp
);
paramMap
.
put
(
"notify_url"
,
notifyUrl
);
paramMap
.
put
(
"trade_type"
,
tradeType
);
paramMap
.
put
(
"openid"
,
openid
);
// if (goodsDetails != null && !goodsDetails.isEmpty()) {
// List<SortedMap<String, Object>> goodList = new ArrayList<>();
// for (RoncooPayGoodsDetails goodsDetail : goodsDetails) {
// SortedMap<String, Object> goodsDetailMap = new TreeMap<>();
// goodsDetailMap.put("goods_id", goodsDetail.getGoodsId());
// goodsDetailMap.put("quantity", goodsDetail.getNums());
// goodsDetailMap.put("goods_name", goodsDetail.getGoodsName());
// goodsDetailMap.put("price", goodsDetail.getSinglePrice());
// goodList.add(goodsDetailMap);
// }
// }
// JSONObject goodsDetailJson = new JSONObject();
//
// goodsDetailJson.put("goods_detail", goodList);
// urlCon.setRequestProperty("Content-Length", String.valueOf(xmlStr.getBytes().length));
// paramMap.put("detail", goodsDetailJson.toJSONString());
// urlCon.setUseCaches(false);
// // 设置为gbk可以解决服务器接收时读取的数据中文乱码问题
// if (null != xmlStr) {
// OutputStream outputStream = urlCon.getOutputStream();
// outputStream.write(xmlStr.getBytes("UTF-8"));
// outputStream.flush();
// outputStream.close();
// }
// InputStream inputStream = urlCon.getInputStream();
// InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
// // 读取输入流
// SAXReader reader = new SAXReader();
// Document document = reader.read(inputStreamReader);
// // 得到xml根元素
// Element root = document.getRootElement();
// // 得到根元素的所有子节点
// @SuppressWarnings("unchecked")
// List<Element> elementList = root.elements();
// // 遍历所有子节点
// for (Element e : elementList) {
// map.put(e.getName(), e.getText());
// }
// log.info("微信查询返回结果:"+map.toString());
// inputStreamReader.close();
// inputStream.close();
// inputStream = null;
// urlCon.disconnect();
// } catch (MalformedURLException e) {
// log.error(e.getMessage());
// } catch (IOException e) {
// log.error(e.getMessage());
// } catch (Exception e) {
// log.error(e.getMessage());
// }
// return map;
// }
//
// /**
// * 生成预支付XML
// *
// * @param WepayPrePayReq
// * @param partnerKey
// * @return
// */
// public static String getPrePayXml(WepayPrePayReq WepayPrePayReq, String partnerKey) {
//
// getPrePaySign(WepayPrePayReq, partnerKey);// 生成预支付请求签名
//
// StringBuilder sb = new StringBuilder();
// sb.append("<xml><appid>").append(WepayPrePayReq.getAppid()).append("</appid>");
// sb.append("<body>").append(WepayPrePayReq.getBody()).append("</body>");
// sb.append("<device_info>").append(WepayPrePayReq.getDeviceInfo()).append("</device_info>");
// sb.append("<mch_id>").append(WepayPrePayReq.getMchId()).append("</mch_id>");
// sb.append("<nonce_str>").append(WepayPrePayReq.getNonceStr()).append("</nonce_str>");
// sb.append("<notify_url>").append(WepayPrePayReq.getNotifyUrl()).append("</notify_url>");
//// if (WeiXinTradeTypeEnum.NATIVE.name().equals(WepayPrePayReq.getTradeType())) {
//// sb.append("<product_id>").append(WepayPrePayReq.getProductId()).append("</product_id>");
//// } else if (WeiXinTradeTypeEnum.JSAPI.name().equals(WepayPrePayReq.getTradeType())) {
//// sb.append("<openid>").append(WepayPrePayReq.getOpenid()).append("</openid>");
//// }
// sb.append("<out_trade_no>").append(WepayPrePayReq.getOutTradeNo()).append("</out_trade_no>");
// sb.append("<spbill_create_ip>").append(WepayPrePayReq.getSpbillCreateIp()).append("</spbill_create_ip>");
// sb.append("<time_start>").append(WepayPrePayReq.getTimeStart()).append("</time_start>");
// sb.append("<time_expire>").append(WepayPrePayReq.getTimeExpire()).append("</time_expire>");
// sb.append("<total_fee>").append(WepayPrePayReq.getTotalFee()).append("</total_fee>");
//// sb.append("<trade_type>").append(WepayPrePayReq.getTradeType().name()).append("</trade_type>");
// sb.append("<sign>").append(WepayPrePayReq.getSign()).append("</sign>");
// sb.append("</xml>");
//
// return sb.toString();
// }
//
// /**
// * 微信拼接签名参数
// *
// * @param appid 公众账号ID
// * @param mch_id 商户号
// * @param device_info 设备号
// * @param trade_type 交易类型
// * @param prePay 预支付返回Map
// * @param partnerKey 签名EY
// * @return
// */
// public static String geWeiXintPrePaySign(String appid, String mch_id, String device_info, String trade_type,
// Map<String, Object> prePay, String partnerKey) {
// Map<String, Object> preParams = new HashMap<String, Object>();
// if (!StringUtil.isEmpty(prePay.get("return_code"))) {
// preParams.put("return_code", prePay.get("return_code"));
// }
// if (!StringUtil.isEmpty(prePay.get("return_msg"))) {
// preParams.put("return_msg", prePay.get("return_msg"));
// }
// if (!StringUtil.isEmpty(prePay.get("appid"))) {
// preParams.put("appid", appid);
// }
// if (!StringUtil.isEmpty(prePay.get("mch_id"))) {
// preParams.put("mch_id", mch_id);
// }
// if (!StringUtil.isEmpty(prePay.get("device_info"))) {
// preParams.put("device_info", device_info);
// }
// if (!StringUtil.isEmpty(prePay.get("nonce_str"))) {
// preParams.put("nonce_str", prePay.get("nonce_str"));
// }
// if (!StringUtil.isEmpty(prePay.get("result_code"))) {
// preParams.put("result_code", prePay.get("result_code"));
// }
// if ("FAIL".equals(prePay.get("result_code"))) {
// if (!StringUtil.isEmpty(prePay.get("err_code"))) {
// preParams.put("err_code", prePay.get("err_code"));
// }
// if (!StringUtil.isEmpty(prePay.get("err_code_des"))) {
// preParams.put("err_code_des", prePay.get("err_code_des"));
// }
// }
// if (!StringUtil.isEmpty(prePay.get("trade_type"))) {
// preParams.put("trade_type", trade_type);
// }
// if (!StringUtil.isEmpty(prePay.get("prepay_id"))) {
// preParams.put("prepay_id", prePay.get("prepay_id"));
// }
// if (!StringUtil.isEmpty(prePay.get("code_url"))) {
// preParams.put("code_url", prePay.get("code_url"));
// }
// String argPreSign = getStringByMap(preParams) + "&key=" + partnerKey;
// String preSign = MD5Util.encode(argPreSign).toUpperCase();
// return preSign;
// }
//
// public static boolean notifySign(Map<String, String> result, String sign, String partnerKey) {
// String argNotifySign = getStringByStringMap(result) + "&key=" + partnerKey;
// String notifySign = MD5Util.encode(argNotifySign).toUpperCase();
// if (notifySign.equals(sign)) {
// return true;
// } else {
// return false;
// }
// }
//
// /**
// * 获取预支付请求签名
// *
// * @param WepayPrePayReq
// * @param partnerKey
// * @return
// */
// private static void getPrePaySign(WepayPrePayReq WepayPrePayReq, String partnerKey) {
//
// Map<String, Object> prePayMap = new HashMap<String, Object>();
// prePayMap.put("appid", WepayPrePayReq.getAppid());// 公众账号ID
// prePayMap.put("mch_id", WepayPrePayReq.getMchId()); // 商户号
// prePayMap.put("device_info", WepayPrePayReq.getDeviceInfo());
// prePayMap.put("nonce_str", WepayPrePayReq.getNonceStr()); // 随机字符串
// prePayMap.put("body", WepayPrePayReq.getBody()); // 商品描述
// prePayMap.put("out_trade_no", WepayPrePayReq.getOutTradeNo()); // 商户订单号
// prePayMap.put("total_fee", WepayPrePayReq.getTotalFee()); // 总金额
// prePayMap.put("spbill_create_ip", WepayPrePayReq.getSpbillCreateIp()); // 终端IP
// prePayMap.put("time_start", WepayPrePayReq.getTimeStart()); // 开始时间
// prePayMap.put("time_expire", WepayPrePayReq.getTimeExpire()); // 截止时间
// prePayMap.put("notify_url", WepayPrePayReq.getNotifyUrl()); // 接收财付通通知的URL
//// prePayMap.put("trade_type", WepayPrePayReq.getTradeType().name()); // 交易类型
//// if (WeiXinTradeTypeEnum.NATIVE.name().equals(WepayPrePayReq.getTradeType())) {
//// prePayMap.put("product_id", WepayPrePayReq.getProductId()); // 商品ID
//// } else if (WeiXinTradeTypeEnum.JSAPI.name().equals(WepayPrePayReq.getTradeType())) {
//// prePayMap.put("openid", WepayPrePayReq.getOpenid()); // openid
//// }
//
// String argPreSign = getStringByMap(prePayMap) + "&key=" + partnerKey;
// String preSign = MD5Util.encode(argPreSign).toUpperCase();
// WepayPrePayReq.setSign(preSign);
// }
//
// /**
// * 根据Map获取排序拼接后的字符串
// *
// * @param map
// * @return
// */
// public static String getStringByMap(Map<String, Object> map) {
// SortedMap<String, Object> smap = new TreeMap<String, Object>(map);
// StringBuffer sb = new StringBuffer();
// for (Map.Entry<String, Object> m : smap.entrySet()) {
// sb.append(m.getKey()).append("=").append(m.getValue()).append("&");
// }
// sb.delete(sb.length() - 1, sb.length());
// return sb.toString();
// }
//
// public static String getStringByStringMap(Map<String, String> map) {
// SortedMap<String, Object> smap = new TreeMap<String, Object>(map);
// StringBuffer sb = new StringBuffer();
// for (Map.Entry<String, Object> m : smap.entrySet()) {
// sb.append(m.getKey()).append("=").append(m.getValue()).append("&");
// }
// sb.delete(sb.length() - 1, sb.length());
// return sb.toString();
// }
//
// /**
// * 解析微信发来的请求(XML)
// *
// * @param inputStream
// * @return
// * @throws Exception
// */
// @SuppressWarnings("unchecked")
// public static Map<String, String> parseXml(InputStream inputStream) throws Exception {
//
// if (inputStream == null) {
// return null;
// }
//
// Map<String, String> map = new HashMap<String, String>();// 将解析结果存储在HashMap中
// SAXReader reader = new SAXReader();// 读取输入流
// Document document = reader.read(inputStream);
// Element root = document.getRootElement();// 得到xml根元素
// List<Element> elementList = root.elements();// 得到根元素的所有子节点
// for (Element e : elementList) { // 遍历所有子节点
// map.put(e.getName(), e.getText());
// }
// }
paramMap
.
put
(
"sign"
,
getSign
(
paramMap
,
WeixinConfigUtil
.
xPayKey
));
//
String
data
=
mapToXml
(
paramMap
);
// inputStream.close(); // 释放资源
logger
.
info
(
"微信小程序统一下单,请求报文:{}"
,
data
);
// inputStream = null;
Map
<
String
,
Object
>
resultMap
=
httpXmlRequest
(
"https://api.mch.weixin.qq.com/pay/unifiedorder"
,
"POST"
,
data
);
//
logger
.
info
(
"微信小程序统一下单,返回报文:{}"
,
resultMap
);
// return map;
if
(
resultMap
==
null
||
resultMap
.
isEmpty
())
{
// }
return
null
;
//
}
// /**
SortedMap
<
String
,
Object
>
responseMap
=
new
TreeMap
<>();
// * 订单查询
responseMap
.
putAll
(
resultMap
);
// *
String
resultSign
=
getSign
(
responseMap
,
WeixinConfigUtil
.
xPayKey
);
// * @param outTradeNo
if
(
resultSign
.
equals
(
resultMap
.
get
(
"sign"
)))
{
// * @return
resultMap
.
put
(
"verify"
,
"YES"
);
// */
}
else
{
// public static Map<String, Object> orderQuery(String outTradeNo, String appId, String MchId, String partnerKey) {
logger
.
info
(
"返回报文验签失败,返回报文签名:{},返回签名:{}"
,
resultSign
,
resultMap
.
get
(
"sign"
));
// Random random = new Random();
resultMap
.
put
(
"verify"
,
"NO"
);
// Map<String, Object> paramMap = new HashMap<>();
}
// paramMap.put("appid", appId);
return
resultMap
;
// paramMap.put("mch_id", MchId);
}
// String nonce_str = "";
// for (int i = 0; i < 31; i++) {
/**
// nonce_str += random.nextInt(10);
* 生成随机字符串
*
* @return
*/
public
static
String
getnonceStr
()
{
Random
random
=
new
Random
();
StringBuilder
nonceStrBuilder
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
31
;
i
++)
{
nonceStrBuilder
.
append
(
random
.
nextInt
(
10
));
}
return
nonceStrBuilder
.
toString
();
}
/**
* 签名
*
* @param paramMap
* @param key
* @return
*/
public
static
String
getSign
(
SortedMap
<
String
,
Object
>
paramMap
,
String
key
)
{
StringBuilder
signBuilder
=
new
StringBuilder
();
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
paramMap
.
entrySet
())
{
if
(!
"sign"
.
equals
(
entry
.
getKey
())
&&
!
StringUtil
.
isEmpty
(
entry
.
getValue
()))
{
signBuilder
.
append
(
entry
.
getKey
()).
append
(
"="
).
append
(
entry
.
getValue
()).
append
(
"&"
);
}
}
signBuilder
.
append
(
"key="
).
append
(
key
);
logger
.
info
(
"微信待签名参数字符串:{}"
,
signBuilder
.
toString
());
return
MD5Util
.
encode
(
signBuilder
.
toString
()).
toUpperCase
();
}
/**
* 转xml格式
*
* @param paramMap
* @return
*/
public
static
String
mapToXml
(
SortedMap
<
String
,
Object
>
paramMap
)
{
StringBuilder
dataBuilder
=
new
StringBuilder
(
"<xml>"
);
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
paramMap
.
entrySet
())
{
if
(!
StringUtil
.
isEmpty
(
entry
.
getValue
()))
{
dataBuilder
.
append
(
"<"
).
append
(
entry
.
getKey
()).
append
(
">"
).
append
(
entry
.
getValue
()).
append
(
"</"
).
append
(
entry
.
getKey
()).
append
(
">"
);
}
}
dataBuilder
.
append
(
"</xml>"
);
logger
.
info
(
"Map转Xml结果:{}"
,
dataBuilder
.
toString
());
return
dataBuilder
.
toString
();
}
/**
* 发送xml数据,获取返回结果
*
* @param requestUrl
* @param requestMethod
* @param xmlStr
* @return
*/
public
static
Map
<
String
,
Object
>
httpXmlRequest
(
String
requestUrl
,
String
requestMethod
,
String
xmlStr
)
{
// 将解析结果存储在HashMap中
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
try
{
HttpsURLConnection
urlCon
=
(
HttpsURLConnection
)
(
new
URL
(
requestUrl
)).
openConnection
();
urlCon
.
setDoInput
(
true
);
urlCon
.
setDoOutput
(
true
);
// 设置请求方式(GET/POST)
urlCon
.
setRequestMethod
(
requestMethod
);
if
(
"GET"
.
equalsIgnoreCase
(
requestMethod
))
{
urlCon
.
connect
();
}
urlCon
.
setRequestProperty
(
"Content-Length"
,
String
.
valueOf
(
xmlStr
.
getBytes
().
length
));
urlCon
.
setUseCaches
(
false
);
// 设置为gbk可以解决服务器接收时读取的数据中文乱码问题
if
(
null
!=
xmlStr
)
{
OutputStream
outputStream
=
urlCon
.
getOutputStream
();
outputStream
.
write
(
xmlStr
.
getBytes
(
"UTF-8"
));
outputStream
.
flush
();
outputStream
.
close
();
}
InputStream
inputStream
=
urlCon
.
getInputStream
();
InputStreamReader
inputStreamReader
=
new
InputStreamReader
(
inputStream
,
"UTF-8"
);
// 读取输入流
SAXReader
reader
=
new
SAXReader
();
Document
document
=
reader
.
read
(
inputStreamReader
);
// 得到xml根元素
Element
root
=
document
.
getRootElement
();
// 得到根元素的所有子节点
@SuppressWarnings
(
"unchecked"
)
List
<
Element
>
elementList
=
root
.
elements
();
// 遍历所有子节点
for
(
Element
e
:
elementList
)
{
map
.
put
(
e
.
getName
(),
e
.
getText
());
}
log
.
info
(
"微信查询返回结果:"
+
map
.
toString
());
inputStreamReader
.
close
();
inputStream
.
close
();
inputStream
=
null
;
urlCon
.
disconnect
();
}
catch
(
MalformedURLException
e
)
{
log
.
error
(
e
.
getMessage
());
}
catch
(
IOException
e
)
{
log
.
error
(
e
.
getMessage
());
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
}
return
map
;
}
/**
* 生成预支付XML
*
* @param WepayPrePayReq
* @param partnerKey
* @return
*/
public
static
String
getPrePayXml
(
WepayPrePayReq
WepayPrePayReq
,
String
partnerKey
)
{
getPrePaySign
(
WepayPrePayReq
,
partnerKey
);
// 生成预支付请求签名
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"<xml><appid>"
).
append
(
WepayPrePayReq
.
getAppid
()).
append
(
"</appid>"
);
sb
.
append
(
"<body>"
).
append
(
WepayPrePayReq
.
getBody
()).
append
(
"</body>"
);
sb
.
append
(
"<device_info>"
).
append
(
WepayPrePayReq
.
getDeviceInfo
()).
append
(
"</device_info>"
);
sb
.
append
(
"<mch_id>"
).
append
(
WepayPrePayReq
.
getMchId
()).
append
(
"</mch_id>"
);
sb
.
append
(
"<nonce_str>"
).
append
(
WepayPrePayReq
.
getNonceStr
()).
append
(
"</nonce_str>"
);
sb
.
append
(
"<notify_url>"
).
append
(
WepayPrePayReq
.
getNotifyUrl
()).
append
(
"</notify_url>"
);
// if (WeiXinTradeTypeEnum.NATIVE.name().equals(WepayPrePayReq.getTradeType())) {
// sb.append("<product_id>").append(WepayPrePayReq.getProductId()).append("</product_id>");
// } else if (WeiXinTradeTypeEnum.JSAPI.name().equals(WepayPrePayReq.getTradeType())) {
// sb.append("<openid>").append(WepayPrePayReq.getOpenid()).append("</openid>");
// }
// }
sb
.
append
(
"<out_trade_no>"
).
append
(
WepayPrePayReq
.
getOutTradeNo
()).
append
(
"</out_trade_no>"
);
// paramMap.put("nonce_str", nonce_str);
sb
.
append
(
"<spbill_create_ip>"
).
append
(
WepayPrePayReq
.
getSpbillCreateIp
()).
append
(
"</spbill_create_ip>"
);
// paramMap.put("out_trade_no", outTradeNo);
sb
.
append
(
"<time_start>"
).
append
(
WepayPrePayReq
.
getTimeStart
()).
append
(
"</time_start>"
);
// String signStr = getStringByMap(paramMap) + "&key=" + partnerKey;
sb
.
append
(
"<time_expire>"
).
append
(
WepayPrePayReq
.
getTimeExpire
()).
append
(
"</time_expire>"
);
// paramMap.put("sign", MD5Util.encode(signStr).toUpperCase());
sb
.
append
(
"<total_fee>"
).
append
(
WepayPrePayReq
.
getTotalFee
()).
append
(
"</total_fee>"
);
// Set<String> ks = paramMap.keySet();
// sb.append("<trade_type>").append(WepayPrePayReq.getTradeType().name()).append("</trade_type>");
// StringBuilder sb = new StringBuilder("<xml>");
sb
.
append
(
"<sign>"
).
append
(
WepayPrePayReq
.
getSign
()).
append
(
"</sign>"
);
// for (String key : ks) {
sb
.
append
(
"</xml>"
);
// sb.append("<" + key + ">" + paramMap.get(key) + "</" + key + ">");
return
sb
.
toString
();
}
/**
* 微信拼接签名参数
*
* @param appid 公众账号ID
* @param mch_id 商户号
* @param device_info 设备号
* @param trade_type 交易类型
* @param prePay 预支付返回Map
* @param partnerKey 签名EY
* @return
*/
public
static
String
geWeiXintPrePaySign
(
String
appid
,
String
mch_id
,
String
device_info
,
String
trade_type
,
Map
<
String
,
Object
>
prePay
,
String
partnerKey
)
{
Map
<
String
,
Object
>
preParams
=
new
HashMap
<
String
,
Object
>();
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"return_code"
)))
{
preParams
.
put
(
"return_code"
,
prePay
.
get
(
"return_code"
));
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"return_msg"
)))
{
preParams
.
put
(
"return_msg"
,
prePay
.
get
(
"return_msg"
));
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"appid"
)))
{
preParams
.
put
(
"appid"
,
appid
);
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"mch_id"
)))
{
preParams
.
put
(
"mch_id"
,
mch_id
);
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"device_info"
)))
{
preParams
.
put
(
"device_info"
,
device_info
);
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"nonce_str"
)))
{
preParams
.
put
(
"nonce_str"
,
prePay
.
get
(
"nonce_str"
));
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"result_code"
)))
{
preParams
.
put
(
"result_code"
,
prePay
.
get
(
"result_code"
));
}
if
(
"FAIL"
.
equals
(
prePay
.
get
(
"result_code"
)))
{
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"err_code"
)))
{
preParams
.
put
(
"err_code"
,
prePay
.
get
(
"err_code"
));
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"err_code_des"
)))
{
preParams
.
put
(
"err_code_des"
,
prePay
.
get
(
"err_code_des"
));
}
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"trade_type"
)))
{
preParams
.
put
(
"trade_type"
,
trade_type
);
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"prepay_id"
)))
{
preParams
.
put
(
"prepay_id"
,
prePay
.
get
(
"prepay_id"
));
}
if
(!
StringUtil
.
isEmpty
(
prePay
.
get
(
"code_url"
)))
{
preParams
.
put
(
"code_url"
,
prePay
.
get
(
"code_url"
));
}
String
argPreSign
=
getStringByMap
(
preParams
)
+
"&key="
+
partnerKey
;
String
preSign
=
MD5Util
.
encode
(
argPreSign
).
toUpperCase
();
return
preSign
;
}
public
static
boolean
notifySign
(
Map
<
String
,
String
>
result
,
String
sign
,
String
partnerKey
)
{
String
argNotifySign
=
getStringByStringMap
(
result
)
+
"&key="
+
partnerKey
;
String
notifySign
=
MD5Util
.
encode
(
argNotifySign
).
toUpperCase
();
if
(
notifySign
.
equals
(
sign
))
{
return
true
;
}
else
{
return
false
;
}
}
/**
* 获取预支付请求签名
*
* @param WepayPrePayReq
* @param partnerKey
* @return
*/
private
static
void
getPrePaySign
(
WepayPrePayReq
WepayPrePayReq
,
String
partnerKey
)
{
Map
<
String
,
Object
>
prePayMap
=
new
HashMap
<
String
,
Object
>();
prePayMap
.
put
(
"appid"
,
WepayPrePayReq
.
getAppid
());
// 公众账号ID
prePayMap
.
put
(
"mch_id"
,
WepayPrePayReq
.
getMchId
());
// 商户号
prePayMap
.
put
(
"device_info"
,
WepayPrePayReq
.
getDeviceInfo
());
prePayMap
.
put
(
"nonce_str"
,
WepayPrePayReq
.
getNonceStr
());
// 随机字符串
prePayMap
.
put
(
"body"
,
WepayPrePayReq
.
getBody
());
// 商品描述
prePayMap
.
put
(
"out_trade_no"
,
WepayPrePayReq
.
getOutTradeNo
());
// 商户订单号
prePayMap
.
put
(
"total_fee"
,
WepayPrePayReq
.
getTotalFee
());
// 总金额
prePayMap
.
put
(
"spbill_create_ip"
,
WepayPrePayReq
.
getSpbillCreateIp
());
// 终端IP
prePayMap
.
put
(
"time_start"
,
WepayPrePayReq
.
getTimeStart
());
// 开始时间
prePayMap
.
put
(
"time_expire"
,
WepayPrePayReq
.
getTimeExpire
());
// 截止时间
prePayMap
.
put
(
"notify_url"
,
WepayPrePayReq
.
getNotifyUrl
());
// 接收财付通通知的URL
// prePayMap.put("trade_type", WepayPrePayReq.getTradeType().name()); // 交易类型
// if (WeiXinTradeTypeEnum.NATIVE.name().equals(WepayPrePayReq.getTradeType())) {
// prePayMap.put("product_id", WepayPrePayReq.getProductId()); // 商品ID
// } else if (WeiXinTradeTypeEnum.JSAPI.name().equals(WepayPrePayReq.getTradeType())) {
// prePayMap.put("openid", WepayPrePayReq.getOpenid()); // openid
// }
// }
// sb.append("</xml>");
String
argPreSign
=
getStringByMap
(
prePayMap
)
+
"&key="
+
partnerKey
;
// Map<String, Object> resultMap = httpXmlRequest("https://api.mch.weixin.qq.com/pay/orderquery", "POST",
String
preSign
=
MD5Util
.
encode
(
argPreSign
).
toUpperCase
();
// sb.toString());
WepayPrePayReq
.
setSign
(
preSign
);
// return resultMap;
}
// }
//}
/**
* 根据Map获取排序拼接后的字符串
*
* @param map
* @return
*/
public
static
String
getStringByMap
(
Map
<
String
,
Object
>
map
)
{
SortedMap
<
String
,
Object
>
smap
=
new
TreeMap
<
String
,
Object
>(
map
);
StringBuffer
sb
=
new
StringBuffer
();
for
(
Map
.
Entry
<
String
,
Object
>
m
:
smap
.
entrySet
())
{
sb
.
append
(
m
.
getKey
()).
append
(
"="
).
append
(
m
.
getValue
()).
append
(
"&"
);
}
sb
.
delete
(
sb
.
length
()
-
1
,
sb
.
length
());
return
sb
.
toString
();
}
public
static
String
getStringByStringMap
(
Map
<
String
,
String
>
map
)
{
SortedMap
<
String
,
Object
>
smap
=
new
TreeMap
<
String
,
Object
>(
map
);
StringBuffer
sb
=
new
StringBuffer
();
for
(
Map
.
Entry
<
String
,
Object
>
m
:
smap
.
entrySet
())
{
sb
.
append
(
m
.
getKey
()).
append
(
"="
).
append
(
m
.
getValue
()).
append
(
"&"
);
}
sb
.
delete
(
sb
.
length
()
-
1
,
sb
.
length
());
return
sb
.
toString
();
}
/**
* 解析微信发来的请求(XML)
*
* @param inputStream
* @return
* @throws Exception
*/
@SuppressWarnings
(
"unchecked"
)
public
static
Map
<
String
,
String
>
parseXml
(
InputStream
inputStream
)
throws
Exception
{
if
(
inputStream
==
null
)
{
return
null
;
}
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
// 将解析结果存储在HashMap中
SAXReader
reader
=
new
SAXReader
();
// 读取输入流
Document
document
=
reader
.
read
(
inputStream
);
Element
root
=
document
.
getRootElement
();
// 得到xml根元素
List
<
Element
>
elementList
=
root
.
elements
();
// 得到根元素的所有子节点
for
(
Element
e
:
elementList
)
{
// 遍历所有子节点
map
.
put
(
e
.
getName
(),
e
.
getText
());
}
inputStream
.
close
();
// 释放资源
inputStream
=
null
;
return
map
;
}
/**
* 订单查询
*
* @param outTradeNo
* @return
*/
public
static
Map
<
String
,
Object
>
orderQuery
(
String
outTradeNo
,
String
appId
,
String
MchId
,
String
partnerKey
)
{
Random
random
=
new
Random
();
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"appid"
,
appId
);
paramMap
.
put
(
"mch_id"
,
MchId
);
String
nonce_str
=
""
;
for
(
int
i
=
0
;
i
<
31
;
i
++)
{
nonce_str
+=
random
.
nextInt
(
10
);
}
paramMap
.
put
(
"nonce_str"
,
nonce_str
);
paramMap
.
put
(
"out_trade_no"
,
outTradeNo
);
String
signStr
=
getStringByMap
(
paramMap
)
+
"&key="
+
partnerKey
;
paramMap
.
put
(
"sign"
,
MD5Util
.
encode
(
signStr
).
toUpperCase
());
Set
<
String
>
ks
=
paramMap
.
keySet
();
StringBuilder
sb
=
new
StringBuilder
(
"<xml>"
);
for
(
String
key
:
ks
)
{
sb
.
append
(
"<"
+
key
+
">"
+
paramMap
.
get
(
key
)
+
"</"
+
key
+
">"
);
}
sb
.
append
(
"</xml>"
);
Map
<
String
,
Object
>
resultMap
=
httpXmlRequest
(
"https://api.mch.weixin.qq.com/pay/orderquery"
,
"POST"
,
sb
.
toString
());
return
resultMap
;
}
}
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/controller/PayController.java
View file @
7c0788cb
...
@@ -72,8 +72,10 @@ public class PayController {
...
@@ -72,8 +72,10 @@ public class PayController {
@RequestParam
(
value
=
"expireTime"
,
required
=
true
)
String
expireTime
){
@RequestParam
(
value
=
"expireTime"
,
required
=
true
)
String
expireTime
){
//为什么在js和applet中才需要判断open_id?
//为什么在js和applet中才需要判断open_id?
if
(
payType
.
equalsIgnoreCase
(
DragonConstant
.
PayChannelEnum
.
WEPAY
.
getCode
())){
if
(
payType
.
equalsIgnoreCase
(
DragonConstant
.
PayChannelEnum
.
WEPAY
.
getCode
())){
if
(
StringUtil
.
isEmpty
(
openId
)){
if
(
deviceFrom
.
equalsIgnoreCase
(
DragonConstant
.
DeviceFromEnum
.
JS
.
getCode
())||
deviceFrom
.
equalsIgnoreCase
(
DragonConstant
.
DeviceFromEnum
.
APPLET
.
getCode
()))
{
return
ResponseDto
.
failure
(
"微信支付openId不能为空!"
);
if
(
StringUtil
.
isEmpty
(
openId
))
{
return
ResponseDto
.
failure
(
"微信支付openId不能为空!"
);
}
}
}
}
}
DragonPayBaseReqDto
dragonPayBaseReqDto
=
new
DragonPayBaseReqDto
();
DragonPayBaseReqDto
dragonPayBaseReqDto
=
new
DragonPayBaseReqDto
();
...
@@ -95,6 +97,7 @@ public class PayController {
...
@@ -95,6 +97,7 @@ public class PayController {
dragonPayBaseReqDto
.
setExpireTime
(
expireTime
);
dragonPayBaseReqDto
.
setExpireTime
(
expireTime
);
return
dragonOrdersService
.
dragonPay
(
dragonPayBaseReqDto
);
return
dragonOrdersService
.
dragonPay
(
dragonPayBaseReqDto
);
}
}
@PostMapping
(
"/checkOrder"
)
@PostMapping
(
"/checkOrder"
)
@ApiOperation
(
"订单查询"
)
@ApiOperation
(
"订单查询"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/service/impl/DragonOrderRefundsServiceImpl.java
View file @
7c0788cb
...
@@ -63,33 +63,33 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -63,33 +63,33 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
//创建退款单
//创建退款单
boolean
insertResult
=
sendMySqlRedis
(
boolean
insertResult
=
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund.insert"
),
SqlMapping
.
get
(
"dragon_order_refund.insert"
),
new
Object
[]{
orderRefundC
ode
,
refundCode
,
orderRefundCode
,
price
,
reason
,
notifyUrl
,
paymentType
,
nowTime
,
nowTime
}
new
Object
[]{
c
ode
,
refundCode
,
orderRefundCode
,
price
,
reason
,
notifyUrl
,
paymentType
,
nowTime
,
nowTime
}
);
);
redisUtil
.
set
(
DragonConstant
.
REFUND_REDIS_KET
+
orderRefundC
ode
,
notifyUrl
);
redisUtil
.
set
(
DragonConstant
.
REFUND_REDIS_KET
+
c
ode
,
notifyUrl
);
DragonRefundChannelDto
dto
=
null
;
DragonRefundChannelDto
dto
=
null
;
String
localWePayCallBackUrl
=
url
+
"/refund/callBack/wepay"
;
String
localWePayCallBackUrl
=
url
+
"/refund/callBack/wepay"
;
if
(
insertResult
)
{
if
(
insertResult
)
{
switch
(
paymentType
)
{
switch
(
paymentType
)
{
case
DragonConstant
.
REFUND_TYPE_APP_ALIPAY
:
case
DragonConstant
.
REFUND_TYPE_APP_ALIPAY
:
dto
=
aliPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
paymentId
,
paymentType
,
nowTime
);
dto
=
aliPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
paymentId
,
paymentType
,
nowTime
);
break
;
break
;
case
DragonConstant
.
REFUND_TYPE_WAP_ALIPAY
:
case
DragonConstant
.
REFUND_TYPE_WAP_ALIPAY
:
dto
=
aliPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
paymentId
,
paymentType
,
nowTime
);
dto
=
aliPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
paymentId
,
paymentType
,
nowTime
);
break
;
break
;
case
DragonConstant
.
REFUND_TYPE_WEB_ALIPAY
:
case
DragonConstant
.
REFUND_TYPE_WEB_ALIPAY
:
dto
=
aliPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
paymentId
,
paymentType
,
nowTime
);
dto
=
aliPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
paymentId
,
paymentType
,
nowTime
);
break
;
break
;
case
DragonConstant
.
REFUND_TYPE_APP_WEPAY
:
case
DragonConstant
.
REFUND_TYPE_APP_WEPAY
:
dto
=
weyPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
dto
=
weyPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
break
;
break
;
case
DragonConstant
.
REFUND_TYPE_WAP_WEPAY
:
case
DragonConstant
.
REFUND_TYPE_WAP_WEPAY
:
dto
=
weyPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
dto
=
weyPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
break
;
break
;
case
DragonConstant
.
REFUND_TYPE_WEB_WEPAY
:
case
DragonConstant
.
REFUND_TYPE_WEB_WEPAY
:
dto
=
weyPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
dto
=
weyPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
break
;
break
;
case
DragonConstant
.
REFUND_TYPE_JS_WEPAY
:
case
DragonConstant
.
REFUND_TYPE_JS_WEPAY
:
dto
=
weyPayRefund
(
orderRefundC
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
dto
=
weyPayRefund
(
c
ode
,
orderRefundCode
,
code
,
reason
,
price
,
priceTotal
,
paymentId
,
paymentType
,
localWePayCallBackUrl
,
nowTime
);
break
;
break
;
}
}
...
@@ -129,14 +129,24 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -129,14 +129,24 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
DragonRefundChannelDto
channelDto
=
new
DragonRefundChannelDto
();
DragonRefundChannelDto
channelDto
=
new
DragonRefundChannelDto
();
RefundContentDto
contentDto
=
new
RefundContentDto
();
RefundContentDto
contentDto
=
new
RefundContentDto
();
String
nonceStr
=
PayWepayUtils
.
getInstance
().
getNonceStr
();
String
nonceStr
=
PayWepayUtils
.
getInstance
().
getNonceStr
();
SortedMap
<
Object
,
Object
>
parameters
=
new
TreeMap
<>();
SortedMap
<
String
,
Object
>
parameters
=
new
TreeMap
<>();
parameters
.
put
(
"mch_id"
,
PayWepayUtils
.
getInstance
().
getMerchantId
());
parameters
.
put
(
"mch_id"
,
PayWepayUtils
.
getInstance
().
getMerchantId
());
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getAppId
());
if
(
paymentType
.
equalsIgnoreCase
(
DragonConstant
.
PayTypeEnum
.
PAYMENT_TYPE_JS_WEPAY
.
getCode
()))
{
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getJS_APP_ID
());
}
else
if
(
paymentType
.
equalsIgnoreCase
(
DragonConstant
.
PayTypeEnum
.
PAYMENT_TYPE_WEB_WEPAY
.
getCode
()))
{
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getWEB_APP_ID
());
}
else
if
(
paymentType
.
equalsIgnoreCase
(
DragonConstant
.
PayTypeEnum
.
PAYMENT_TYPE_APP_WEPAY
.
getCode
()))
{
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getAPP_ID
());
}
else
if
(
paymentType
.
equalsIgnoreCase
(
DragonConstant
.
PayTypeEnum
.
PAYMENT_TYPE_APPLET_WEPAY
.
getCode
()))
{
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getAPPLET_APP_ID
());
}
else
if
(
paymentType
.
equalsIgnoreCase
(
DragonConstant
.
PayTypeEnum
.
PAYMENT_TYPE_WAP_WEPAY
.
getCode
()))
{
parameters
.
put
(
"appid"
,
PayWepayUtils
.
getInstance
().
getWAP_APP_ID
());
}
parameters
.
put
(
"nonce_str"
,
nonceStr
);
parameters
.
put
(
"nonce_str"
,
nonceStr
);
parameters
.
put
(
"out_refund_no"
,
refundCode
);
parameters
.
put
(
"out_refund_no"
,
refundCode
);
parameters
.
put
(
"out_trade_no"
,
code
);
parameters
.
put
(
"out_trade_no"
,
code
);
parameters
.
put
(
"refund_fee"
,
(
int
)
(
price
.
doubleValue
()
*
100
)+
""
);
parameters
.
put
(
"refund_fee"
,
(
int
)
(
price
.
doubleValue
()
*
100
)
+
""
);
parameters
.
put
(
"total_fee"
,
(
int
)
(
priceTotal
.
doubleValue
()
*
100
)+
""
);
parameters
.
put
(
"total_fee"
,
(
int
)
(
priceTotal
.
doubleValue
()
*
100
)
+
""
);
parameters
.
put
(
"notify_url"
,
notifyUrl
);
parameters
.
put
(
"notify_url"
,
notifyUrl
);
parameters
.
put
(
"refund_desc"
,
reason
);
parameters
.
put
(
"refund_desc"
,
reason
);
parameters
.
put
(
"refund_account"
,
"REFUND_SOURCE_RECHARGE_FUNDS"
);
parameters
.
put
(
"refund_account"
,
"REFUND_SOURCE_RECHARGE_FUNDS"
);
...
@@ -167,7 +177,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -167,7 +177,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
// 修改退款订单
// 修改退款订单
sendMySqlRedis
(
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_error.update"
),
SqlMapping
.
get
(
"dragon_order_refund_error.update"
),
new
Object
[]{
nowTime
,
refundError
,
refundStatus
,
refundC
ode
}
new
Object
[]{
nowTime
,
refundError
,
refundStatus
,
c
ode
}
);
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -199,7 +209,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -199,7 +209,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
}
}
sendMySqlRedis
(
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_success.update"
),
SqlMapping
.
get
(
"dragon_order_refund_success.update"
),
new
Object
[]{
nowTime
,
null
,
refundStatus
,
refundC
ode
}
new
Object
[]{
nowTime
,
null
,
refundStatus
,
c
ode
}
);
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -257,7 +267,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -257,7 +267,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
// 修改退款订单
// 修改退款订单
sendMySqlRedis
(
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_error.update"
),
SqlMapping
.
get
(
"dragon_order_refund_error.update"
),
new
Object
[]{
nowTime
,
refundError
,
refundStatus
,
refundC
ode
}
new
Object
[]{
nowTime
,
refundError
,
refundStatus
,
c
ode
}
);
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -293,7 +303,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -293,7 +303,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
}
}
sendMySqlRedis
(
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_success.update"
),
SqlMapping
.
get
(
"dragon_order_refund_success.update"
),
new
Object
[]{
nowTime
,
refundAt
,
refundStatus
,
refundC
ode
}
new
Object
[]{
nowTime
,
refundAt
,
refundStatus
,
c
ode
}
);
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -394,80 +404,6 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -394,80 +404,6 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
}
}
}
}
public
String
aliPayRefundCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
InputStream
inStream
;
ByteArrayOutputStream
outSteam
;
LocalDateTime
nowTime
=
LocalDateTime
.
now
();
try
{
inStream
=
request
.
getInputStream
();
outSteam
=
new
ByteArrayOutputStream
();
byte
[]
buffer
=
new
byte
[
1024
];
int
len
=
0
;
while
((
len
=
inStream
.
read
(
buffer
))
!=
-
1
)
{
outSteam
.
write
(
buffer
,
0
,
len
);
}
// 获取微信调用我们notify_url的返回信息
String
jsonStr
=
new
String
(
outSteam
.
toByteArray
(),
"utf-8"
);
outSteam
.
close
();
inStream
.
close
();
log
.
debug
(
"JSON = "
+
jsonStr
);
WePayRefundReturnCallBackDto
callBackDto
=
XmlUtil
.
toBean
(
jsonStr
,
WePayRefundReturnCallBackDto
.
class
);
log
.
debug
(
"DATA = "
+
callBackDto
);
if
(
callBackDto
.
getReturnCode
().
equalsIgnoreCase
(
"SUCCESS"
))
{
String
reqInfo
=
PayWepayUtils
.
getInstance
().
unCodeReqInfo
(
callBackDto
.
getReqInfo
());
log
.
debug
(
"REQINFO = "
+
reqInfo
);
WePayRefundReturnCallBackInfoDto
info
=
XmlUtil
.
toBean
(
reqInfo
,
WePayRefundReturnCallBackInfoDto
.
class
);
String
outRefundNo
=
info
.
getOutRefundNo
();
String
refundAt
=
info
.
getSuccessTime
();
try
{
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_log.insert"
),
new
Object
[]{
outRefundNo
,
info
.
getRefundRequestSource
(),
JSON
.
toJSONString
(
info
),
nowTime
,
nowTime
}
);
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_success.update"
),
new
Object
[]{
nowTime
,
refundAt
,
DragonConstant
.
RefundStatusEnum
.
STATUS_REFUNDED
.
getCode
(),
outRefundNo
}
);
NotifyUrlDto
dto
=
new
NotifyUrlDto
();
if
(
info
.
getRefundStatus
().
equalsIgnoreCase
(
"SUCCESS"
))
{
dto
.
setStatus
(
1
);
}
else
{
dto
.
setStatus
(
0
);
}
// dto.setOrderCode();
// dto.setCode();
// dto.setType();
// dto.setPrice();
// dto.setPaymentType();
// dto.setPaymentId();
// dto.setPaymentAt();
dto
.
setOrderRefundCode
(
info
.
getOutRefundNo
());
dto
.
setRefundCode
(
info
.
getOutTradeNo
());
dto
.
setRefundPrice
(
info
.
getRefundFee
());
// dto.setRefundReason();
dto
.
setRefundId
(
info
.
getRefundId
());
// dto.setRefundType(info.getrefund);
dto
.
setRefundAt
(
refundAt
);
dto
.
setRefundError
(
callBackDto
.
getReturnMsg
());
sendNotifyUrl
(
dto
);
return
"<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
""
);
return
"<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>"
;
}
}
else
{
return
"<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>"
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
""
);
return
"<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>"
;
}
}
/**
/**
* 给 REDIS 队列发送消息 数据库相关
* 给 REDIS 队列发送消息 数据库相关
*
*
...
@@ -506,7 +442,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
...
@@ -506,7 +442,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
params
.
add
(
"refundPrice"
,
notifyUrlDto
.
getRefundPrice
());
params
.
add
(
"refundPrice"
,
notifyUrlDto
.
getRefundPrice
());
params
.
add
(
"status"
,
notifyUrlDto
.
getStatus
().
toString
());
params
.
add
(
"status"
,
notifyUrlDto
.
getStatus
().
toString
());
String
response
=
HttpUtil
.
post
((
String
)
redisUtil
.
get
(
DragonConstant
.
REFUND_REDIS_KET
+
notifyUrlDto
.
getOrderRefundCode
()),
params
);
String
response
=
HttpUtil
.
post
((
String
)
redisUtil
.
get
(
DragonConstant
.
REFUND_REDIS_KET
+
notifyUrlDto
.
getOrderRefundCode
()),
params
);
log
.
debug
(
"RETURN RESPONSE="
+
response
);
log
.
debug
(
"RETURN RESPONSE="
+
response
);
if
(
response
.
equals
(
"success"
))
{
if
(
response
.
equals
(
"success"
))
{
sendMySqlRedis
(
sendMySqlRedis
(
SqlMapping
.
get
(
"dragon_order_refund_call_back.update"
),
SqlMapping
.
get
(
"dragon_order_refund_call_back.update"
),
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/utils/PayWepayUtils.java
View file @
7c0788cb
...
@@ -2,13 +2,14 @@ package com.liquidnet.service.dragon.utils;
...
@@ -2,13 +2,14 @@ package com.liquidnet.service.dragon.utils;
import
com.alipay.api.internal.util.file.IOUtils
;
import
com.alipay.api.internal.util.file.IOUtils
;
import
com.liquidnet.commons.lang.util.MD5Utils
;
import
com.liquidnet.commons.lang.util.MD5Utils
;
import
com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnDto
;
import
org.apache.http.conn.ssl.SSLConnectionSocketFactory
;
import
org.apache.http.conn.ssl.SSLConnectionSocketFactory
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.ssl.SSLContexts
;
import
org.apache.http.ssl.SSLContexts
;
import
org.bouncycastle.jce.provider.BouncyCastleProvider
;
import
org.bouncycastle.jce.provider.BouncyCastleProvider
;
import
org.dom4j.DocumentException
;
import
org.dom4j.Document
;
import
org.dom4j.Element
;
import
org.dom4j.io.SAXReader
;
import
javax.crypto.Cipher
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.SecretKeySpec
;
import
javax.crypto.spec.SecretKeySpec
;
...
@@ -24,9 +25,13 @@ public class PayWepayUtils {
...
@@ -24,9 +25,13 @@ public class PayWepayUtils {
private
static
PayWepayUtils
instance
=
new
PayWepayUtils
();
private
static
PayWepayUtils
instance
=
new
PayWepayUtils
();
private
final
String
merchantId
=
"1551961491"
;
private
final
String
merchantId
=
"1551961491"
;
private
final
String
appId
=
"wx3498304dda39c5a1"
;
private
final
String
parentKey
=
"itIuO65O9yKmemOu3S8g1S4orqvCGwXK"
;
private
final
String
parentKey
=
"itIuO65O9yKmemOu3S8g1S4orqvCGwXK"
;
private
final
String
APP_ID
=
"wx86f9777acf2cb585"
;
private
final
String
WEB_APP_ID
=
"wx3498304dda39c5a1"
;
private
final
String
JS_APP_ID
=
"wx3498304dda39c5a1"
;
private
final
String
WAP_APP_ID
=
"wx3498304dda39c5a1"
;
private
final
String
APPLET_APP_ID
=
"wx4732efeaa2b08086"
;
public
PayWepayUtils
()
{
public
PayWepayUtils
()
{
}
}
...
@@ -36,8 +41,24 @@ public class PayWepayUtils {
...
@@ -36,8 +41,24 @@ public class PayWepayUtils {
}
}
public
String
getAppId
()
{
public
String
getAPP_ID
()
{
return
appId
;
return
APP_ID
;
}
public
String
getAPPLET_APP_ID
()
{
return
APPLET_APP_ID
;
}
public
String
getJS_APP_ID
()
{
return
JS_APP_ID
;
}
public
String
getWEB_APP_ID
()
{
return
WEB_APP_ID
;
}
public
String
getWAP_APP_ID
()
{
return
WAP_APP_ID
;
}
}
public
String
getMerchantId
()
{
public
String
getMerchantId
()
{
...
@@ -87,7 +108,7 @@ public class PayWepayUtils {
...
@@ -87,7 +108,7 @@ public class PayWepayUtils {
return
sb
.
toString
();
return
sb
.
toString
();
}
}
public
String
createSign
(
SortedMap
<
Object
,
Object
>
parameters
)
{
public
String
createSign
(
SortedMap
<
String
,
Object
>
parameters
)
{
StringBuffer
sb
=
new
StringBuffer
();
StringBuffer
sb
=
new
StringBuffer
();
Set
es
=
parameters
.
entrySet
();
//所有参与传参的参数按照accsii排序(升序)
Set
es
=
parameters
.
entrySet
();
//所有参与传参的参数按照accsii排序(升序)
Iterator
it
=
es
.
iterator
();
Iterator
it
=
es
.
iterator
();
...
@@ -104,7 +125,7 @@ public class PayWepayUtils {
...
@@ -104,7 +125,7 @@ public class PayWepayUtils {
return
MD5Utils
.
md5
(
sb
.
toString
()).
toUpperCase
();
return
MD5Utils
.
md5
(
sb
.
toString
()).
toUpperCase
();
}
}
public
String
getRequestXml
(
SortedMap
<
Object
,
Object
>
parameters
)
{
public
String
getRequestXml
(
SortedMap
<
String
,
Object
>
parameters
)
{
StringBuffer
sb
=
new
StringBuffer
();
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
"<xml>"
);
sb
.
append
(
"<xml>"
);
Set
es
=
parameters
.
entrySet
();
Set
es
=
parameters
.
entrySet
();
...
@@ -142,4 +163,26 @@ public class PayWepayUtils {
...
@@ -142,4 +163,26 @@ public class PayWepayUtils {
return
""
;
return
""
;
}
}
}
}
@SuppressWarnings
(
"unchecked"
)
public
static
Map
<
String
,
String
>
parseXml
(
InputStream
inputStream
)
throws
Exception
{
if
(
inputStream
==
null
)
{
return
null
;
}
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
// 将解析结果存储在HashMap中
SAXReader
reader
=
new
SAXReader
();
// 读取输入流
Document
document
=
reader
.
read
(
inputStream
);
Element
root
=
document
.
getRootElement
();
// 得到xml根元素
List
<
Element
>
elementList
=
root
.
elements
();
// 得到根元素的所有子节点
for
(
Element
e
:
elementList
)
{
// 遍历所有子节点
map
.
put
(
e
.
getName
(),
e
.
getText
());
}
inputStream
.
close
();
// 释放资源
inputStream
=
null
;
return
map
;
}
}
}
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/service/impl/KylinOrderTicketsServiceImpl.java
View file @
7c0788cb
package
com
.
liquidnet
.
service
.
order
.
service
.
impl
;
package
com
.
liquidnet
.
service
.
order
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.common.cache.redisson.util.RedisLockUtil
;
import
com.liquidnet.common.cache.redisson.util.RedisLockUtil
;
import
com.liquidnet.common.mq.constant.MQConst
;
import
com.liquidnet.common.mq.constant.MQConst
;
...
@@ -554,7 +555,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
...
@@ -554,7 +555,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
currentTime
=
System
.
currentTimeMillis
();
currentTime
=
System
.
currentTimeMillis
();
String
returnData
=
HttpUtil
.
post
(
payUrl
,
httpData
);
String
returnData
=
HttpUtil
.
post
(
payUrl
,
httpData
);
log
.
debug
(
"
NOTIFY_URL = "
+
synUrl
);
log
.
debug
(
"
httpData = "
+
JSON
.
toJSONString
(
httpData
)
);
currentTime
=
System
.
currentTimeMillis
()
-
currentTime
;
currentTime
=
System
.
currentTimeMillis
()
-
currentTime
;
log
.
debug
(
"调用 PHP 支付 -> time:"
+
(
currentTime
)
+
"毫秒"
);
log
.
debug
(
"调用 PHP 支付 -> time:"
+
(
currentTime
)
+
"毫秒"
);
PayResultVo
payResultVo
=
JsonUtils
.
fromJson
(
returnData
,
PayResultVo
.
class
);
PayResultVo
payResultVo
=
JsonUtils
.
fromJson
(
returnData
,
PayResultVo
.
class
);
...
...
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