Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
payment-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
payment-ci-test
Commits
2bed96d6
提交
2bed96d6
authored
7月 24, 2023
作者:
xiaowang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
退款申请
上级
7372253c
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
83 行增加
和
83 行删除
+83
-83
UserSystemConstant.java
...ain/java/com/mmc/payment/constant/UserSystemConstant.java
+0
-3
AuthSignatureFilter.java
...main/java/com/mmc/payment/filter/AuthSignatureFilter.java
+2
-1
WechatPayServiceImpl.java
...va/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
+49
-7
WxConfigUtils.java
src/main/java/com/mmc/payment/util/WxConfigUtils.java
+0
-14
application-dev.yml
src/main/resources/application-dev.yml
+0
-24
application-local.yml
src/main/resources/application-local.yml
+0
-24
WechatPayDao.xml
src/main/resources/mapper/WechatPayDao.xml
+32
-10
没有找到文件。
src/main/java/com/mmc/payment/constant/UserSystemConstant.java
浏览文件 @
2bed96d6
...
...
@@ -44,9 +44,6 @@ public class UserSystemConstant {
@Value
(
"${data.file.url}"
)
private
String
privateKeyFromPath
;
@Value
(
"${data.key.certificate}"
)
private
String
certificate
;
@Value
(
"${wx.pay.refund-notify-url}"
)
private
String
refundNotifyUrl
;
...
...
src/main/java/com/mmc/payment/filter/AuthSignatureFilter.java
浏览文件 @
2bed96d6
...
...
@@ -39,7 +39,8 @@ public class AuthSignatureFilter implements AuthFilter {
* 无需登录白名单
*/
private
static
final
String
[]
IGNORE_URLS
=
{
"/payment/swagger-resources"
,
"/payment/v2/api-docs"
,
"/payment/repocash/walletUsers"
,
"/payment/doc.html"
,
"/payment/actuator/health/readiness"
,
"/payment/wechat/payCallback"
};
,
"/payment/v2/api-docs"
,
"/payment/repocash/walletUsers"
,
"/payment/doc.html"
,
"/payment/actuator/health/readiness"
,
"/payment/wechat/payCallback"
,
"/payment/wechat/refundCallback"
};
/*无需加密狗无需登录白名单*/
private
static
final
String
[]
USE_KEY
=
{
"/oms/account/loginByUsbKey"
};
...
...
src/main/java/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
浏览文件 @
2bed96d6
...
...
@@ -19,7 +19,6 @@ import com.mmc.payment.model.vo.order.WxPayLogVO;
import
com.mmc.payment.service.WechatPayService
;
import
com.mmc.payment.util.WxConfigUtils
;
import
com.wechat.pay.java.core.Config
;
import
com.wechat.pay.java.core.RSAConfig
;
import
com.wechat.pay.java.core.cipher.SignatureResult
;
import
com.wechat.pay.java.core.exception.HttpException
;
import
com.wechat.pay.java.core.exception.MalformedMessageException
;
...
...
@@ -260,8 +259,50 @@ public class WechatPayServiceImpl implements WechatPayService {
@Override
public
Map
refundCallback
(
HttpServletRequest
request
)
{
return
null
;
Map
<
String
,
String
>
result
=
new
HashMap
(
16
);
result
.
put
(
"code"
,
"FAIL"
);
// 获取应答时间戳
String
timestamp
=
request
.
getHeader
(
"Wechatpay-Timestamp"
);
// 获取应答随机串
String
nonce
=
request
.
getHeader
(
"Wechatpay-Nonce"
);
// 获取应答签名
String
signature
=
request
.
getHeader
(
"Wechatpay-Signature"
);
// 获取应答序列号
String
serialNumber
=
request
.
getHeader
(
"Wechatpay-Serial"
);
log
.
info
(
"应答时间戳: {},应答随机串:{},应答签名:{},应答序列号{}"
,
timestamp
,
nonce
,
signature
,
serialNumber
);
try
{
// 获取body请求报文
BufferedReader
br
=
request
.
getReader
();
String
str
=
null
;
StringBuilder
sb
=
new
StringBuilder
();
while
((
str
=
br
.
readLine
())
!=
null
)
{
sb
.
append
(
str
);
}
log
.
info
(
"请求体数据:{}"
,
sb
);
NotificationConfig
config
=
wxConfigUtils
.
createNotificationConfig
();
// 构造 RequestParam
RequestParam
requestParam
=
new
RequestParam
.
Builder
()
.
serialNumber
(
serialNumber
)
.
nonce
(
nonce
)
.
signature
(
signature
)
.
timestamp
(
timestamp
)
.
body
(
sb
.
toString
())
.
build
();
// 初始化 NotificationParser
NotificationParser
parser
=
new
NotificationParser
(
config
);
// 验签、解密并转换成 Refund
Refund
parse
=
parser
.
parse
(
requestParam
,
Refund
.
class
);
log
.
info
(
"解密resource数据:{}"
,
parser
);
ApplyRefundLogDO
applyRefundLogDO
=
new
ApplyRefundLogDO
();
applyRefundLogDO
.
setNotifyRefundStatus
(
parse
.
getStatus
().
toString
());
applyRefundLogDO
.
setOrderNo
(
parse
.
getOutTradeNo
());
applyRefundLogDO
.
setSuccessTime
(
parse
.
getSuccessTime
());
wechatPayDao
.
updateApplyRefundLog
(
applyRefundLogDO
);
result
.
put
(
"code"
,
"SUCCESS"
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
result
;
}
@Override
...
...
@@ -269,7 +310,7 @@ public class WechatPayServiceImpl implements WechatPayService {
public
ResultBody
applyRefund
(
ApplyRefundVO
applyRefundVO
)
{
log
.
info
(
"=======申请退款信息入库======="
);
ApplyRefundLogDO
refundInfo
=
this
.
createRefundInfo
(
applyRefundVO
);
RSAConfig
config
=
wxConfigUtils
.
createRSA
Config
();
Config
config
=
wxConfigUtils
.
create
Config
();
log
.
info
(
"========调用微信退款接口========="
);
// 初始化服务
RefundService
service
=
new
RefundService
.
Builder
().
config
(
config
).
build
();
...
...
@@ -309,10 +350,11 @@ public class WechatPayServiceImpl implements WechatPayService {
applyRefundLogDO
.
setTransactionId
(
refund
.
getTransactionId
());
applyRefundLogDO
.
setChannel
(
refund
.
getChannel
().
toString
());
applyRefundLogDO
.
setUserReceivedAccount
(
refund
.
getUserReceivedAccount
());
applyRefundLogDO
.
setSuccessTime
(
refund
.
getSuccessTime
()
==
null
?
null
:
refund
.
getSuccessTime
()
);
applyRefundLogDO
.
setSuccessTime
(
refund
.
getSuccessTime
());
applyRefundLogDO
.
setCreateTime
(
refund
.
getCreateTime
());
applyRefundLogDO
.
setRefundStatus
(
refund
.
getStatus
()
==
null
?
null
:
refund
.
getStatus
().
toString
());
applyRefundLogDO
.
setFundsAccount
(
refund
.
getFundsAccount
()
==
null
?
null
:
refund
.
getFundsAccount
().
toString
());
applyRefundLogDO
.
setOrderNo
(
refund
.
getOutTradeNo
());
wechatPayDao
.
updateApplyRefundLog
(
applyRefundLogDO
);
}
...
...
@@ -323,7 +365,7 @@ public class WechatPayServiceImpl implements WechatPayService {
// 查询订单信息
WxPayLogDO
wxPayLogDO
=
wechatPayDao
.
selectWxPayInfoByOrderNo
(
applyRefundVO
.
getOutTradeNo
());
ApplyRefundLogDO
applyRefundLogDO
=
new
ApplyRefundLogDO
();
applyRefundLogDO
.
setReason
(
applyRefundVO
.
getReason
()
==
null
?
null
:
applyRefundLogDO
.
getReason
()
);
applyRefundLogDO
.
setReason
(
applyRefundVO
.
getReason
());
applyRefundLogDO
.
setOrderNo
(
applyRefundVO
.
getOutTradeNo
());
applyRefundLogDO
.
setOutRefundNo
(
outRefundNo
);
applyRefundLogDO
.
setRefund
(
applyRefundVO
.
getRefund
());
...
...
@@ -335,7 +377,7 @@ public class WechatPayServiceImpl implements WechatPayService {
@Override
public
ResultBody
queryRefund
(
String
outRefundNo
)
{
RSAConfig
config
=
wxConfigUtils
.
createRSA
Config
();
Config
config
=
wxConfigUtils
.
create
Config
();
// 初始化服务
RefundService
service
=
new
RefundService
.
Builder
().
config
(
config
).
build
();
QueryByOutRefundNoRequest
request
=
new
QueryByOutRefundNoRequest
();
...
...
src/main/java/com/mmc/payment/util/WxConfigUtils.java
浏览文件 @
2bed96d6
...
...
@@ -3,7 +3,6 @@ package com.mmc.payment.util;
import
com.mmc.payment.constant.UserSystemConstant
;
import
com.wechat.pay.java.core.Config
;
import
com.wechat.pay.java.core.RSAAutoCertificateConfig
;
import
com.wechat.pay.java.core.RSAConfig
;
import
com.wechat.pay.java.core.notification.NotificationConfig
;
import
org.springframework.stereotype.Component
;
...
...
@@ -47,17 +46,4 @@ public class WxConfigUtils {
return
config
;
}
public
RSAConfig
createRSAConfig
()
{
// 初始化商户配置
RSAConfig
config
=
new
RSAConfig
.
Builder
()
.
merchantId
(
userSystemConstant
.
getMchid
())
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.
privateKey
(
userSystemConstant
.
getPrivateKeyFromPath
())
.
merchantSerialNumber
(
userSystemConstant
.
getMchNumber
())
.
wechatPayCertificates
(
userSystemConstant
.
getCertificate
())
.
build
();
return
config
;
}
}
src/main/resources/application-dev.yml
浏览文件 @
2bed96d6
...
...
@@ -90,29 +90,5 @@ KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg=="
key
:
certificate
:
"
MIIEJDCCAwygAwIBAgIUe/WTHloXepTi86Qcg5phbsuoZxgwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjMwNzE4MDI0NTAzWhcNMjgwNzE2MDI0NTAzWjB+MRMwEQYDVQQDDAox
NjQ4NjUzNTMzMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xKjAoBgNVBAsM
IeadreW3nuS6keS6q+mjnuenkeaKgOaciemZkOWFrOWPuDELMAkGA1UEBgwCQ04x
ETAPBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAqccUdWWQi5S5/l1gl/dFKyROok/UuBW39vFjCHaoLbJPSB7iBRMuI3ynPxms
sSmrBQO6+f3LE3mbkoRj4b7Y/Jg67uhBYP5ylcFvc9und2vaGKKuTEzRJeT260vc
LLqVCyCg8JHeLpyDwCCEgRVf6N1AcAD9E1Ooyxxu7YK8riCGruRxzQ8JCG7sZ/74
9ANB2NWYb1g9cbNV1hfk8wcm1MzwJRMsxmIYWUfmf8Y7VBVj18XZgvjA9f6krzKl
aQzaUo05CWV8O3GB3xpbi5T9ENmUCPLjhvrl14XB1KYutTqZl0siIEk/hRsp6tvM
tvGojlLP+ntIu0p2XpbDgxM6lwIDAQABo4G5MIG2MAkGA1UdEwQCMAAwCwYDVR0P
BAQDAgP4MIGbBgNVHR8EgZMwgZAwgY2ggYqggYeGgYRodHRwOi8vZXZjYS5pdHJ1
cy5jb20uY24vcHVibGljL2l0cnVzY3JsP0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFE
Mzk3NTQ5ODQ2QzAxQzNFOEVCRDImc2c9SEFDQzQ3MUI2NTQyMkUxMkIyN0E5RDMz
QTg3QUQxQ0RGNTkyNkUxNDAzNzEwDQYJKoZIhvcNAQELBQADggEBAJ76xFfSq9t6
SvJGhhMuwtS+LlODpiSHd7C39+cWNEk/VR9nF/j8CSzjZduaQw/BZCeIfgGFbDFW
yAgmoGMNGdkOV3qFQZZxkTDCo4EbTklEvLw+0c9r6T8sIfPujCeZgk1aEIJul8ig
gXkyyzD4xR89PMAxh5srSvmAcIsGMSca3l1mFs4uDLs1uB3knOT0lv57w1aDTXMf
ZAT1f24ANAOVMGjhYRCfnKSDBi8QEE7Nj7l5ESQvnUq5pwDbbB3U/nLAKOb4o4Zx
5je/1HN0fauKhCC6HPY5FpJ3wKUm6dUDims5ZXuAIeaEy1HQ2h/om7e72x/rdDdz
5cl2IgwSfNM="
src/main/resources/application-local.yml
浏览文件 @
2bed96d6
...
...
@@ -90,28 +90,4 @@ KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg=="
key
:
certificate
:
"
MIIEJDCCAwygAwIBAgIUe/WTHloXepTi86Qcg5phbsuoZxgwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjMwNzE4MDI0NTAzWhcNMjgwNzE2MDI0NTAzWjB+MRMwEQYDVQQDDAox
NjQ4NjUzNTMzMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xKjAoBgNVBAsM
IeadreW3nuS6keS6q+mjnuenkeaKgOaciemZkOWFrOWPuDELMAkGA1UEBgwCQ04x
ETAPBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAqccUdWWQi5S5/l1gl/dFKyROok/UuBW39vFjCHaoLbJPSB7iBRMuI3ynPxms
sSmrBQO6+f3LE3mbkoRj4b7Y/Jg67uhBYP5ylcFvc9und2vaGKKuTEzRJeT260vc
LLqVCyCg8JHeLpyDwCCEgRVf6N1AcAD9E1Ooyxxu7YK8riCGruRxzQ8JCG7sZ/74
9ANB2NWYb1g9cbNV1hfk8wcm1MzwJRMsxmIYWUfmf8Y7VBVj18XZgvjA9f6krzKl
aQzaUo05CWV8O3GB3xpbi5T9ENmUCPLjhvrl14XB1KYutTqZl0siIEk/hRsp6tvM
tvGojlLP+ntIu0p2XpbDgxM6lwIDAQABo4G5MIG2MAkGA1UdEwQCMAAwCwYDVR0P
BAQDAgP4MIGbBgNVHR8EgZMwgZAwgY2ggYqggYeGgYRodHRwOi8vZXZjYS5pdHJ1
cy5jb20uY24vcHVibGljL2l0cnVzY3JsP0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFE
Mzk3NTQ5ODQ2QzAxQzNFOEVCRDImc2c9SEFDQzQ3MUI2NTQyMkUxMkIyN0E5RDMz
QTg3QUQxQ0RGNTkyNkUxNDAzNzEwDQYJKoZIhvcNAQELBQADggEBAJ76xFfSq9t6
SvJGhhMuwtS+LlODpiSHd7C39+cWNEk/VR9nF/j8CSzjZduaQw/BZCeIfgGFbDFW
yAgmoGMNGdkOV3qFQZZxkTDCo4EbTklEvLw+0c9r6T8sIfPujCeZgk1aEIJul8ig
gXkyyzD4xR89PMAxh5srSvmAcIsGMSca3l1mFs4uDLs1uB3knOT0lv57w1aDTXMf
ZAT1f24ANAOVMGjhYRCfnKSDBi8QEE7Nj7l5ESQvnUq5pwDbbB3U/nLAKOb4o4Zx
5je/1HN0fauKhCC6HPY5FpJ3wKUm6dUDims5ZXuAIeaEy1HQ2h/om7e72x/rdDdz
5cl2IgwSfNM="
src/main/resources/mapper/WechatPayDao.xml
浏览文件 @
2bed96d6
...
...
@@ -21,7 +21,8 @@
total,
refund,
currency,
out_refund_no, reason)
out_refund_no,
reason)
values (#{orderNo}, #{total}, #{refund}, #{currency}, #{outRefundNo}, #{reason})
</insert>
<update
id=
"updateWxPayLog"
>
...
...
@@ -41,15 +42,36 @@
</update>
<update
id=
"updateApplyRefundLog"
>
update apply_refund_log
set refund_id = #{refundId},
transaction_id = #{transactionId},
channel = #{channel},
user_received_account = #{userReceivedAccount},
success_time = #{successTime},
create_time = #{createTime},
status = #{status},
funds_account = #{fundsAccount}
<set>
<if
test=
"refundId != null"
>
refund_id = #{refundId},
</if>
<if
test=
"transactionId != null"
>
transaction_id = #{transactionId},
</if>
<if
test=
"channel != null"
>
channel = #{channel},
</if>
<if
test=
"userReceivedAccount != null"
>
user_received_account = #{userReceivedAccount},
</if>
<if
test=
"successTime != null and"
>
success_time = #{successTime},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime},
</if>
<if
test=
"refundStatus != null"
>
refund_status = #{refundStatus},
</if>
<if
test=
"fundsAccount != null"
>
funds_account = #{fundsAccount}
</if>
<if
test=
"notifyRefundStatus != null"
>
notify_refund_status = #{notifyRefundStatus}
</if>
</set>
where order_no = #{orderNo}
</update>
<delete
id=
"deleteWxPayLogByOrderNo"
>
delete
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论