提交 2bed96d6 作者: xiaowang

退款申请

上级 7372253c
...@@ -44,9 +44,6 @@ public class UserSystemConstant { ...@@ -44,9 +44,6 @@ public class UserSystemConstant {
@Value("${data.file.url}") @Value("${data.file.url}")
private String privateKeyFromPath; private String privateKeyFromPath;
@Value("${data.key.certificate}")
private String certificate;
@Value("${wx.pay.refund-notify-url}") @Value("${wx.pay.refund-notify-url}")
private String refundNotifyUrl; private String refundNotifyUrl;
......
...@@ -39,7 +39,8 @@ public class AuthSignatureFilter implements AuthFilter { ...@@ -39,7 +39,8 @@ public class AuthSignatureFilter implements AuthFilter {
* 无需登录白名单 * 无需登录白名单
*/ */
private static final String[] IGNORE_URLS = {"/payment/swagger-resources" 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"}; private static final String[] USE_KEY = {"/oms/account/loginByUsbKey"};
......
...@@ -19,7 +19,6 @@ import com.mmc.payment.model.vo.order.WxPayLogVO; ...@@ -19,7 +19,6 @@ import com.mmc.payment.model.vo.order.WxPayLogVO;
import com.mmc.payment.service.WechatPayService; import com.mmc.payment.service.WechatPayService;
import com.mmc.payment.util.WxConfigUtils; import com.mmc.payment.util.WxConfigUtils;
import com.wechat.pay.java.core.Config; 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.cipher.SignatureResult;
import com.wechat.pay.java.core.exception.HttpException; import com.wechat.pay.java.core.exception.HttpException;
import com.wechat.pay.java.core.exception.MalformedMessageException; import com.wechat.pay.java.core.exception.MalformedMessageException;
...@@ -260,8 +259,50 @@ public class WechatPayServiceImpl implements WechatPayService { ...@@ -260,8 +259,50 @@ public class WechatPayServiceImpl implements WechatPayService {
@Override @Override
public Map refundCallback(HttpServletRequest request) { public Map refundCallback(HttpServletRequest request) {
Map<String, String> result = new HashMap(16);
return null; 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 @Override
...@@ -269,7 +310,7 @@ public class WechatPayServiceImpl implements WechatPayService { ...@@ -269,7 +310,7 @@ public class WechatPayServiceImpl implements WechatPayService {
public ResultBody applyRefund(ApplyRefundVO applyRefundVO) { public ResultBody applyRefund(ApplyRefundVO applyRefundVO) {
log.info("=======申请退款信息入库======="); log.info("=======申请退款信息入库=======");
ApplyRefundLogDO refundInfo = this.createRefundInfo(applyRefundVO); ApplyRefundLogDO refundInfo = this.createRefundInfo(applyRefundVO);
RSAConfig config = wxConfigUtils.createRSAConfig(); Config config = wxConfigUtils.createConfig();
log.info("========调用微信退款接口========="); log.info("========调用微信退款接口=========");
// 初始化服务 // 初始化服务
RefundService service = new RefundService.Builder().config(config).build(); RefundService service = new RefundService.Builder().config(config).build();
...@@ -309,10 +350,11 @@ public class WechatPayServiceImpl implements WechatPayService { ...@@ -309,10 +350,11 @@ public class WechatPayServiceImpl implements WechatPayService {
applyRefundLogDO.setTransactionId(refund.getTransactionId()); applyRefundLogDO.setTransactionId(refund.getTransactionId());
applyRefundLogDO.setChannel(refund.getChannel().toString()); applyRefundLogDO.setChannel(refund.getChannel().toString());
applyRefundLogDO.setUserReceivedAccount(refund.getUserReceivedAccount()); applyRefundLogDO.setUserReceivedAccount(refund.getUserReceivedAccount());
applyRefundLogDO.setSuccessTime(refund.getSuccessTime() == null ? null : refund.getSuccessTime()); applyRefundLogDO.setSuccessTime(refund.getSuccessTime());
applyRefundLogDO.setCreateTime(refund.getCreateTime()); applyRefundLogDO.setCreateTime(refund.getCreateTime());
applyRefundLogDO.setRefundStatus(refund.getStatus() == null ? null : refund.getStatus().toString()); applyRefundLogDO.setRefundStatus(refund.getStatus() == null ? null : refund.getStatus().toString());
applyRefundLogDO.setFundsAccount(refund.getFundsAccount() == null ? null : refund.getFundsAccount().toString()); applyRefundLogDO.setFundsAccount(refund.getFundsAccount() == null ? null : refund.getFundsAccount().toString());
applyRefundLogDO.setOrderNo(refund.getOutTradeNo());
wechatPayDao.updateApplyRefundLog(applyRefundLogDO); wechatPayDao.updateApplyRefundLog(applyRefundLogDO);
} }
...@@ -323,7 +365,7 @@ public class WechatPayServiceImpl implements WechatPayService { ...@@ -323,7 +365,7 @@ public class WechatPayServiceImpl implements WechatPayService {
// 查询订单信息 // 查询订单信息
WxPayLogDO wxPayLogDO = wechatPayDao.selectWxPayInfoByOrderNo(applyRefundVO.getOutTradeNo()); WxPayLogDO wxPayLogDO = wechatPayDao.selectWxPayInfoByOrderNo(applyRefundVO.getOutTradeNo());
ApplyRefundLogDO applyRefundLogDO = new ApplyRefundLogDO(); ApplyRefundLogDO applyRefundLogDO = new ApplyRefundLogDO();
applyRefundLogDO.setReason(applyRefundVO.getReason() == null ? null : applyRefundLogDO.getReason()); applyRefundLogDO.setReason(applyRefundVO.getReason());
applyRefundLogDO.setOrderNo(applyRefundVO.getOutTradeNo()); applyRefundLogDO.setOrderNo(applyRefundVO.getOutTradeNo());
applyRefundLogDO.setOutRefundNo(outRefundNo); applyRefundLogDO.setOutRefundNo(outRefundNo);
applyRefundLogDO.setRefund(applyRefundVO.getRefund()); applyRefundLogDO.setRefund(applyRefundVO.getRefund());
...@@ -335,7 +377,7 @@ public class WechatPayServiceImpl implements WechatPayService { ...@@ -335,7 +377,7 @@ public class WechatPayServiceImpl implements WechatPayService {
@Override @Override
public ResultBody queryRefund(String outRefundNo) { public ResultBody queryRefund(String outRefundNo) {
RSAConfig config = wxConfigUtils.createRSAConfig(); Config config = wxConfigUtils.createConfig();
// 初始化服务 // 初始化服务
RefundService service = new RefundService.Builder().config(config).build(); RefundService service = new RefundService.Builder().config(config).build();
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest(); QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
......
...@@ -3,7 +3,6 @@ package com.mmc.payment.util; ...@@ -3,7 +3,6 @@ package com.mmc.payment.util;
import com.mmc.payment.constant.UserSystemConstant; import com.mmc.payment.constant.UserSystemConstant;
import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig; import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.RSAConfig;
import com.wechat.pay.java.core.notification.NotificationConfig; import com.wechat.pay.java.core.notification.NotificationConfig;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -47,17 +46,4 @@ public class WxConfigUtils { ...@@ -47,17 +46,4 @@ public class WxConfigUtils {
return config; 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;
}
} }
...@@ -90,29 +90,5 @@ KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls ...@@ -90,29 +90,5 @@ KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15 656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg==" +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="
...@@ -90,28 +90,4 @@ KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls ...@@ -90,28 +90,4 @@ KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15 656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg==" +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="
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
total, total,
refund, refund,
currency, currency,
out_refund_no, reason) out_refund_no,
reason)
values (#{orderNo}, #{total}, #{refund}, #{currency}, #{outRefundNo}, #{reason}) values (#{orderNo}, #{total}, #{refund}, #{currency}, #{outRefundNo}, #{reason})
</insert> </insert>
<update id="updateWxPayLog"> <update id="updateWxPayLog">
...@@ -41,15 +42,36 @@ ...@@ -41,15 +42,36 @@
</update> </update>
<update id="updateApplyRefundLog"> <update id="updateApplyRefundLog">
update apply_refund_log update apply_refund_log
set refund_id = #{refundId}, <set>
transaction_id = #{transactionId}, <if test="refundId != null">
channel = #{channel}, refund_id = #{refundId},
user_received_account = #{userReceivedAccount}, </if>
success_time = #{successTime}, <if test="transactionId != null">
create_time = #{createTime}, transaction_id = #{transactionId},
status = #{status}, </if>
funds_account = #{fundsAccount} <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> </update>
<delete id="deleteWxPayLogByOrderNo"> <delete id="deleteWxPayLogByOrderNo">
delete delete
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论