记得上下班打卡 | 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
01c02875
Commit
01c02875
authored
Nov 10, 2021
by
zhengfuxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
开发支付回调
parent
8403c480
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
84 additions
and
83 deletions
+84
-83
DragonErrorCodeEnum.java
...iquidnet/service/dragon/constant/DragonErrorCodeEnum.java
+2
-0
PayChannelStrategyDouYinImpl.java
...n/channel/strategy/impl/PayChannelStrategyDouYinImpl.java
+39
-46
PayDouYinpayUtils.java
...com/liquidnet/service/dragon/utils/PayDouYinpayUtils.java
+43
-37
No files found.
liquidnet-bus-api/liquidnet-service-dragon-api/src/main/java/com/liquidnet/service/dragon/constant/DragonErrorCodeEnum.java
View file @
01c02875
...
...
@@ -29,6 +29,8 @@ public enum DragonErrorCodeEnum {
TRADE_WEPAY_SIGN_ERROR
(
"PAY0020001"
,
"微信签名异常!"
),
TRADE_DOUYINPAY_SIGN_ERROR
(
"PAY0030001"
,
"抖音签名异常!"
),
TRADE_WEPAY_QUERY_ERROR
(
"PAY0020002"
,
"微信订单查询失败!"
);
private
String
code
;
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/channel/strategy/impl/PayChannelStrategyDouYinImpl.java
View file @
01c02875
package
com
.
liquidnet
.
service
.
dragon
.
channel
.
strategy
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.liquidnet.common.exception.LiquidnetServiceException
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
...
...
@@ -18,6 +19,7 @@ import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import
com.liquidnet.service.dragon.dto.DragonPayBaseRespDto
;
import
com.liquidnet.service.dragon.dto.DragonPayOrderQueryRespDto
;
import
com.liquidnet.service.dragon.utils.DataUtils
;
import
com.liquidnet.service.dragon.utils.PayDouYinpayUtils
;
import
com.liquidnet.service.dragon.utils.PayWepayUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -27,6 +29,7 @@ import javax.servlet.http.HttpServletRequest;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.time.LocalDateTime
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -60,58 +63,48 @@ public class PayChannelStrategyDouYinImpl extends AbstractPayChannelStrategyImpl
@Override
public
String
dragonNotify
(
HttpServletRequest
request
,
String
payType
,
String
deviceFrom
)
{
String
returnStr
=
"<xml>\n"
+
" <return_code><![CDATA[FAIL]]></return_code>\n"
+
" <return_msg><![CDATA[FAIL]]></return_msg>\n"
+
"</xml>"
;;
try
{
InputStream
inputStream
=
request
.
getInputStream
();
// 从request中取得输入流
Map
<
String
,
String
>
notifyMap
=
new
HashMap
<
String
,
String
>();
try
{
notifyMap
=
PayWepayUtils
.
parseXml
(
inputStream
);
log
.
info
(
"dragonNotify-->wepay json : {}"
,
JSON
.
toJSONString
(
notifyMap
));
log
.
info
(
"接收到{}支付结果{}"
,
payType
,
notifyMap
);
String
code
=
notifyMap
.
get
(
"out_trade_no"
);
//持久化通知记录
dragonServiceCommonBiz
.
createDragonOrderLogs
(
code
,
dragonPayBiz
.
getPaymentType
(
payType
,
deviceFrom
),
JSON
.
toJSONString
(
notifyMap
));
// 根据银行订单号获取支付信息
DragonOrdersDto
dragonOrdersDto
=
dataUtils
.
getPayOrderByCode
(
code
);
if
(
dragonOrdersDto
==
null
)
{
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_ERROR_NOT_EXISTS
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_ERROR_NOT_EXISTS
.
getMessage
());
}
if
(
DragonConstant
.
PayStatusEnum
.
STATUS_PAID
.
getCode
().
equals
(
dragonOrdersDto
.
getStatus
()))
{
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_ERROR_HAS_PAID
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_ERROR_HAS_PAID
.
getMessage
());
}
String
sign
=
notifyMap
.
remove
(
"sign"
);
boolean
notifyResult
=
false
;
if
(
PayWepayUtils
.
getInstance
().
notifySign
(
notifyMap
,
sign
))
{
// 根据配置信息验证签名
if
(
WepayConstant
.
WeixinTradeStateEnum
.
SUCCESS
.
getCode
().
equals
(
notifyMap
.
get
(
"result_code"
)))
{
// 业务结果
// 成功
String
timeEndStr
=
notifyMap
.
get
(
"time_end"
);
LocalDateTime
timeEnd
=
null
;
if
(!
StringUtil
.
isEmpty
(
timeEndStr
))
{
timeEnd
=
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
.
parse
(
timeEndStr
);
}
notifyResult
=
this
.
completeSuccessOrder
(
dragonOrdersDto
,
notifyMap
.
get
(
"transaction_id"
),
timeEnd
,
notifyMap
.
toString
());
}
else
{
notifyResult
=
this
.
completeFailOrder
(
dragonOrdersDto
,
notifyMap
.
toString
());
}
if
(
notifyResult
){
returnStr
=
"<xml>\n"
+
" <return_code><![CDATA[SUCCESS]]></return_code>\n"
+
" <return_msg><![CDATA[OK]]></return_msg>\n"
+
"</xml>"
;
}
JSONObject
jsonObject
=
PayDouYinpayUtils
.
getJsonObject
(
request
);
try
{
log
.
info
(
"dragonNotify-->douYinPay json : {}"
,
JSON
.
toJSONString
(
jsonObject
));
log
.
info
(
"接收到{}支付结果{}"
,
payType
,
JSON
.
toJSONString
(
jsonObject
));
if
(!
jsonObject
.
getString
(
"type"
).
equals
(
"payment"
)){
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_PARAM_ERROR
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_PARAM_ERROR
.
getMessage
());
}
JSONObject
msg
=
jsonObject
.
getJSONObject
(
"msg"
);
// Map msg= (Map) map.get("msg");
String
code
=
msg
.
get
(
"cp_orderno"
).
toString
();
//持久化通知记录
dragonServiceCommonBiz
.
createDragonOrderLogs
(
code
,
dragonPayBiz
.
getPaymentType
(
payType
,
deviceFrom
),
JSON
.
toJSONString
(
jsonObject
));
// 根据银行订单号获取支付信息
DragonOrdersDto
dragonOrdersDto
=
dataUtils
.
getPayOrderByCode
(
code
);
if
(
dragonOrdersDto
==
null
)
{
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_ERROR_NOT_EXISTS
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_ERROR_NOT_EXISTS
.
getMessage
());
}
if
(
DragonConstant
.
PayStatusEnum
.
STATUS_PAID
.
getCode
().
equals
(
dragonOrdersDto
.
getStatus
()))
{
throw
new
LiquidnetServiceException
(
DragonErrorCodeEnum
.
TRADE_ERROR_HAS_PAID
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_ERROR_HAS_PAID
.
getMessage
());
}
String
sign
=
msg
.
get
(
"msg_signature"
).
toString
();
boolean
notifyResult
=
false
;
if
(
PayDouYinpayUtils
.
getInstance
().
notifySign
(
sign
,
jsonObject
))
{
// 根据配置信息验证签名
//抖音回调 就代表成功了
this
.
completeSuccessOrder
(
dragonOrdersDto
,
""
,
LocalDateTime
.
now
(),
JSON
.
toJSONString
(
jsonObject
));
/*if (WepayConstant.WeixinTradeStateEnum.SUCCESS.getCode().equals(notifyMap.get("result_code"))) {// 业务结果
// 成功
notifyResult = this.completeSuccessOrder(dragonOrdersDto, notifyMap.get("transaction_id"), timeEnd, notifyMap.toString());
} else {
log
.
error
(
"wepay notify fail code:{} msg:{} "
,
DragonErrorCodeEnum
.
TRADE_WEPAY_SIGN_ERROR
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_WEPAY_SIGN_ERROR
.
getMessage
());
notifyResult = this.completeFailOrder(dragonOrdersDto, notifyMap.toString
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
if(notifyResult){
returnStr = "<xml>\n" + " <return_code><![CDATA[SUCCESS]]></return_code>\n" + " <return_msg><![CDATA[OK]]></return_msg>\n" + "</xml>";
}*/
}
else
{
log
.
error
(
"wepay notify fail code:{} msg:{} "
,
DragonErrorCodeEnum
.
TRADE_DOUYINPAY_SIGN_ERROR
.
getCode
(),
DragonErrorCodeEnum
.
TRADE_DOUYINPAY_SIGN_ERROR
.
getMessage
());
}
}
catch
(
IO
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
returnStr
;
return
""
;
}
@Override
...
...
liquidnet-bus-service/liquidnet-service-dragon/liquidnet-service-dragon-impl/src/main/java/com/liquidnet/service/dragon/utils/PayDouYinpayUtils.java
View file @
01c02875
package
com
.
liquidnet
.
service
.
dragon
.
utils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alipay.api.internal.util.file.IOUtils
;
import
com.google.gson.JsonElement
;
import
com.google.gson.JsonObject
;
import
com.liquidnet.commons.lang.util.MD5Utils
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.config.Registry
;
...
...
@@ -21,8 +24,11 @@ import org.dom4j.io.SAXReader;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.SecretKeySpec
;
import
javax.net.ssl.SSLContext
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.BufferedReader
;
import
java.io.ByteArrayInputStream
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.nio.charset.StandardCharsets
;
import
java.security.KeyStore
;
import
java.security.MessageDigest
;
...
...
@@ -149,7 +155,7 @@ public class PayDouYinpayUtils {
}
return
hexValue
.
toString
();
}
public
String
createSign
(
Sorted
Map
<
String
,
Object
>
paramsMap
)
{
public
String
createSign
(
Map
<
String
,
Object
>
paramsMap
)
{
List
<
String
>
paramsArr
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
paramsMap
.
entrySet
())
{
String
key
=
entry
.
getKey
();
...
...
@@ -186,40 +192,36 @@ public class PayDouYinpayUtils {
}
return
md5FromStr
(
signStr
.
toString
());
}
/*public static String md5FromStr(String inStr) {
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "";
}
byte[] byteArray = inStr.getBytes(StandardCharsets.UTF_8);
byte[] md5Bytes = md5.digest(byteArray);
StringBuilder hexValue = new StringBuilder();
for (byte md5Byte : md5Bytes) {
int val = ((int) md5Byte) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}*/
public
String
getPartnerKey
()
{
return
this
.
partnerKey
;
}
public
boolean
notifySign
(
Map
<
String
,
String
>
result
,
String
sign
)
{
String
argNotifySign
=
getStringByStringMap
(
result
)
+
"&key="
+
this
.
partnerKey
;
String
notifySign
=
MD5Utils
.
md5
(
argNotifySign
).
toUpperCase
();
if
(
notifySign
.
equals
(
sign
))
{
public
boolean
notifySign
(
String
sign
,
JSONObject
jsonObject
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
//循环转换
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
jsonObject
.
entrySet
())
{
map
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
String
signBack
=
PayDouYinpayUtils
.
getInstance
().
createSign
(
map
);
if
(
sign
.
equals
(
signBack
))
return
true
;
}
else
{
else
return
false
;
}
public
static
JSONObject
getJsonObject
(
HttpServletRequest
request
)
{
String
param
=
null
;
JSONObject
jsonObject
=
null
;
try
{
BufferedReader
streamReader
=
new
BufferedReader
(
new
InputStreamReader
(
request
.
getInputStream
(),
"UTF-8"
));
StringBuilder
responseStrBuilder
=
new
StringBuilder
();
String
inputStr
;
while
((
inputStr
=
streamReader
.
readLine
())
!=
null
)
responseStrBuilder
.
append
(
inputStr
);
jsonObject
=
JSONObject
.
parseObject
(
responseStrBuilder
.
toString
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
jsonObject
;
}
public
static
String
getStringByStringMap
(
Map
<
String
,
String
>
map
)
{
...
...
@@ -232,15 +234,19 @@ public class PayDouYinpayUtils {
return
sb
.
toString
();
}
public
static
void
main
(
String
[]
args
)
{
SortedMap
<
String
,
Object
>
paramMap
=
new
TreeMap
<
String
,
Object
>();
paramMap
.
put
(
"appid"
,
"wx86f9777acf2cb585"
);
paramMap
.
put
(
"partnerid"
,
"1551961491"
);
paramMap
.
put
(
"prepayid"
,
"wx26131443671359787bb3996a1fa0fc0000"
);
paramMap
.
put
(
"package"
,
"Sign=WXPay"
);
paramMap
.
put
(
"noncestr"
,
"rGcsOnNdZ4d9zu6k3yCbVJRG8Ombp8VW"
);
paramMap
.
put
(
"timestamp"
,
"1627276483"
);
String
sign
=
PayDouYinpayUtils
.
getInstance
().
createSign
(
paramMap
);
System
.
out
.
println
(
"1627274771===="
+
sign
);
String
s
=
"{\n"
+
" \"timestamp\":1602507471,\n"
+
" \"nonce\":\"797\",\n"
+
" \"msg\":\"{\\\"appid\\\":\\\"tt07e3715e98c9aac0\\\",\\\"cp_orderno\\\":\\\"out_order_no_1\\\",\\\"cp_extra\\\":\\\"\\\",\\\"way\\\":\\\"2\\\",\\\"payment_order_no\\\":\\\"2021070722001450071438803941\\\",\\\"total_amount\\\":9980,\\\"status\\\":\\\"SUCCESS\\\",\\\"seller_uid\\\":\\\"69631798443938962290\\\",\\\"extra\\\":\\\"null\\\",\\\"item_id\\\":\\\"\\\"}\",\n"
+
" \"msg_signature\":\"52fff5f7a4bf4a921c2daf83c75cf0e716432c73\",\n"
+
" \"type\":\"payment\"\n"
+
"}"
;
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
s
);
System
.
out
.
println
(
jsonObject
.
getString
(
"type"
));
JSONObject
msg
=
jsonObject
.
getJSONObject
(
"msg"
);
System
.
out
.
println
(
msg
.
getString
(
"cp_orderno"
));
}
}
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