提交 2bed96d6 作者: xiaowang

退款申请

上级 7372253c
......@@ -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;
......
......@@ -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"};
......
......@@ -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.createRSAConfig();
Config config = wxConfigUtils.createConfig();
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.createRSAConfig();
Config config = wxConfigUtils.createConfig();
// 初始化服务
RefundService service = new RefundService.Builder().config(config).build();
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
......
......@@ -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;
}
}
......@@ -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="
......@@ -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="
......@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论