mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-14 20:30:04 +08:00
交易撤销重构
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
package com.jsowell.adapay.operation;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 支付撤销操作对象
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PaymentReverseOperation extends AdapayOperationInfo{
|
||||||
|
// 支付id
|
||||||
|
private String paymentId;
|
||||||
|
|
||||||
|
// 撤销金额
|
||||||
|
private BigDecimal reverseAmt;
|
||||||
|
|
||||||
|
// order/balance
|
||||||
|
private String scenarioType;
|
||||||
|
|
||||||
|
// scenarioType = balance 会员id不为空
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
// scenarioType = order 订单编号不为空
|
||||||
|
private String orderCode;
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import com.jsowell.adapay.config.AbstractAdapayConfig;
|
|||||||
import com.jsowell.adapay.dto.*;
|
import com.jsowell.adapay.dto.*;
|
||||||
import com.jsowell.adapay.factory.AdapayConfigFactory;
|
import com.jsowell.adapay.factory.AdapayConfigFactory;
|
||||||
import com.jsowell.adapay.operation.PaymentConfirmOperation;
|
import com.jsowell.adapay.operation.PaymentConfirmOperation;
|
||||||
|
import com.jsowell.adapay.operation.PaymentReverseOperation;
|
||||||
import com.jsowell.adapay.response.*;
|
import com.jsowell.adapay.response.*;
|
||||||
import com.jsowell.adapay.vo.*;
|
import com.jsowell.adapay.vo.*;
|
||||||
import com.jsowell.common.constant.CacheConstants;
|
import com.jsowell.common.constant.CacheConstants;
|
||||||
@@ -952,10 +953,27 @@ public class AdapayService {
|
|||||||
/**
|
/**
|
||||||
* 创建交易撤销请求
|
* 创建交易撤销请求
|
||||||
* 延迟分账未确认, 调交易撤销接口退款
|
* 延迟分账未确认, 调交易撤销接口退款
|
||||||
*
|
* delay模式的商户使用
|
||||||
|
*/
|
||||||
|
public PaymentReverseResponse createPaymentReverseRequest(PaymentReverseOperation paymentReverseOperation) {
|
||||||
|
String wechatAppId = paymentReverseOperation.getMerchantKey();
|
||||||
|
String paymentId = paymentReverseOperation.getPaymentId();
|
||||||
|
BigDecimal reverseAmt = paymentReverseOperation.getReverseAmt();
|
||||||
|
String memberId = paymentReverseOperation.getMemberId();
|
||||||
|
String scenarioType = paymentReverseOperation.getScenarioType();
|
||||||
|
String orderCode = paymentReverseOperation.getOrderCode();
|
||||||
|
return createPaymentReverseRequest(paymentId, reverseAmt, wechatAppId, memberId, scenarioType, orderCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建交易撤销请求
|
||||||
|
* 延迟分账未确认, 调交易撤销接口退款
|
||||||
|
* delay模式的商户使用
|
||||||
* @param wechatAppId 微信小程序appId
|
* @param wechatAppId 微信小程序appId
|
||||||
*/
|
*/
|
||||||
public PaymentReverseResponse createPaymentReverseRequest(String paymentId, BigDecimal reverseAmt, String wechatAppId, String memberId, String scenarioType, String orderCode) {
|
public PaymentReverseResponse createPaymentReverseRequest(String paymentId, BigDecimal reverseAmt,
|
||||||
|
String wechatAppId, String memberId, String scenarioType,
|
||||||
|
String orderCode) {
|
||||||
AbstractAdapayConfig config = AdapayConfigFactory.getConfig(wechatAppId);
|
AbstractAdapayConfig config = AdapayConfigFactory.getConfig(wechatAppId);
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
|
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
|
||||||
@@ -967,6 +985,7 @@ public class AdapayService {
|
|||||||
reverseParams.put("reverse_amt", AdapayUtil.formatAmount(reverseAmt));
|
reverseParams.put("reverse_amt", AdapayUtil.formatAmount(reverseAmt));
|
||||||
reverseParams.put("order_no", IdUtils.fastSimpleUUID());
|
reverseParams.put("order_no", IdUtils.fastSimpleUUID());
|
||||||
reverseParams.put("notify_url", ADAPAY_CALLBACK_URL);
|
reverseParams.put("notify_url", ADAPAY_CALLBACK_URL);
|
||||||
|
|
||||||
// expand 为扩展域
|
// expand 为扩展域
|
||||||
Map<String, String> expendMap = Maps.newHashMap();
|
Map<String, String> expendMap = Maps.newHashMap();
|
||||||
expendMap.put("memberId", memberId);
|
expendMap.put("memberId", memberId);
|
||||||
@@ -976,6 +995,7 @@ public class AdapayService {
|
|||||||
}
|
}
|
||||||
reverseParams.put("expand", expendMap);
|
reverseParams.put("expand", expendMap);
|
||||||
reverseParams.put("reason", expendMap);
|
reverseParams.put("reason", expendMap);
|
||||||
|
|
||||||
Map<String, Object> paymentReverse = null;
|
Map<String, Object> paymentReverse = null;
|
||||||
try {
|
try {
|
||||||
paymentReverse = PaymentReverse.create(reverseParams, config.getWechatAppId());
|
paymentReverse = PaymentReverse.create(reverseParams, config.getWechatAppId());
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.google.common.collect.Maps;
|
|||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
|
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
|
||||||
import com.jsowell.adapay.operation.PaymentConfirmOperation;
|
import com.jsowell.adapay.operation.PaymentConfirmOperation;
|
||||||
|
import com.jsowell.adapay.operation.PaymentReverseOperation;
|
||||||
import com.jsowell.adapay.response.PaymentConfirmResponse;
|
import com.jsowell.adapay.response.PaymentConfirmResponse;
|
||||||
import com.jsowell.adapay.response.PaymentReverseResponse;
|
import com.jsowell.adapay.response.PaymentReverseResponse;
|
||||||
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
|
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
|
||||||
@@ -785,7 +786,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
/**
|
/**
|
||||||
* 不延迟商家订单处理逻辑
|
* 不延迟商家订单处理逻辑
|
||||||
* 例如:希晓
|
* 例如:希晓
|
||||||
*
|
* 相当于已经分账完成了
|
||||||
* @param orderBasicInfo 订单信息
|
* @param orderBasicInfo 订单信息
|
||||||
* @param adapayMemberAccount 汇付用户信息
|
* @param adapayMemberAccount 汇付用户信息
|
||||||
* @param wechatAppId 小程序appId
|
* @param wechatAppId 小程序appId
|
||||||
@@ -1234,6 +1235,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
BigDecimal deductionAmount = vo.getDeductionAmount();
|
BigDecimal deductionAmount = vo.getDeductionAmount();
|
||||||
|
|
||||||
// 延时分账,使用确认交易API
|
// 延时分账,使用确认交易API
|
||||||
|
// PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode, wechatAppId);
|
||||||
|
|
||||||
|
// 换新的方法,逻辑不变,参数封装了
|
||||||
PaymentConfirmOperation operation = new PaymentConfirmOperation();
|
PaymentConfirmOperation operation = new PaymentConfirmOperation();
|
||||||
operation.setPaymentId(paymentId);
|
operation.setPaymentId(paymentId);
|
||||||
operation.setConfirmAmt(deductionAmount);
|
operation.setConfirmAmt(deductionAmount);
|
||||||
@@ -1242,7 +1246,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
operation.setMerchantKey(wechatAppId);
|
operation.setMerchantKey(wechatAppId);
|
||||||
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(operation);
|
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(operation);
|
||||||
|
|
||||||
// PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode, wechatAppId);
|
|
||||||
if (paymentConfirmResponse != null && paymentConfirmResponse.isNotFailed()) {
|
if (paymentConfirmResponse != null && paymentConfirmResponse.isNotFailed()) {
|
||||||
confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirm_amt()));
|
confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirm_amt()));
|
||||||
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
|
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
|
||||||
@@ -2369,9 +2372,19 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
// String payMode = "delay";
|
// String payMode = "delay";
|
||||||
if (StringUtils.equalsIgnoreCase(payMode, Constants.ADAPAY_PAY_MODE_DELAY)) {
|
if (StringUtils.equalsIgnoreCase(payMode, Constants.ADAPAY_PAY_MODE_DELAY)) {
|
||||||
// 延迟分账未确认调撤销调撤销接口退款
|
// 延迟分账未确认调撤销调撤销接口退款
|
||||||
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
|
// PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
|
||||||
paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(),
|
// paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(),
|
||||||
dto.getOrderCode());
|
// dto.getOrderCode());
|
||||||
|
|
||||||
|
PaymentReverseOperation operation = new PaymentReverseOperation();
|
||||||
|
operation.setPaymentId(paymentId);
|
||||||
|
operation.setReverseAmt(refundAmount);
|
||||||
|
operation.setMerchantKey(dto.getWechatAppId());
|
||||||
|
operation.setMemberId(dto.getMemberId());
|
||||||
|
operation.setScenarioType(ScenarioEnum.ORDER.getValue());
|
||||||
|
operation.setOrderCode(dto.getOrderCode());
|
||||||
|
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation);
|
||||||
|
|
||||||
if (response != null && response.isNotFailed()) {
|
if (response != null && response.isNotFailed()) {
|
||||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||||
BigDecimal reverseAmt = new BigDecimal(response.getReverse_amt());
|
BigDecimal reverseAmt = new BigDecimal(response.getReverse_amt());
|
||||||
@@ -2470,8 +2483,16 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
BigDecimal deductionAmount = vo.getDeductionAmount();
|
BigDecimal deductionAmount = vo.getDeductionAmount();
|
||||||
|
|
||||||
// 调汇付的交易撤销接口
|
// 调汇付的交易撤销接口
|
||||||
PaymentReverseResponse paymentReverseRequest = adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
|
// PaymentReverseResponse paymentReverseRequest = adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
|
||||||
dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
|
// dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
|
||||||
|
|
||||||
|
PaymentReverseOperation operation = new PaymentReverseOperation();
|
||||||
|
operation.setPaymentId(paymentId);
|
||||||
|
operation.setReverseAmt(deductionAmount);
|
||||||
|
operation.setMerchantKey(dto.getWechatAppId());
|
||||||
|
operation.setMemberId(dto.getMemberId());
|
||||||
|
operation.setScenarioType(ScenarioEnum.BALANCE.getValue());
|
||||||
|
PaymentReverseResponse paymentReverseRequest = adapayService.createPaymentReverseRequest(operation);
|
||||||
|
|
||||||
if (paymentReverseRequest != null && paymentReverseRequest.isNotFailed()) {
|
if (paymentReverseRequest != null && paymentReverseRequest.isNotFailed()) {
|
||||||
memberAdapayRecordService.updateRefundAmount(paymentId, deductionAmount);
|
memberAdapayRecordService.updateRefundAmount(paymentId, deductionAmount);
|
||||||
@@ -2865,9 +2886,19 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
List<PaymentReverseResponse> paymentReverses = queryOrderAdapayRefund(orderBasicInfo);
|
List<PaymentReverseResponse> paymentReverses = queryOrderAdapayRefund(orderBasicInfo);
|
||||||
if (CollectionUtils.isEmpty(paymentReverses)) {
|
if (CollectionUtils.isEmpty(paymentReverses)) {
|
||||||
// 如果没有退款过,重新执行一遍退款
|
// 如果没有退款过,重新执行一遍退款
|
||||||
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
|
// PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
|
||||||
paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(),
|
// paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(),
|
||||||
orderCode);
|
// orderCode);
|
||||||
|
|
||||||
|
PaymentReverseOperation operation = new PaymentReverseOperation();
|
||||||
|
operation.setPaymentId(paymentId);
|
||||||
|
operation.setReverseAmt(refundAmount);
|
||||||
|
operation.setMerchantKey(wechatAppId);
|
||||||
|
operation.setMemberId(memberId);
|
||||||
|
operation.setScenarioType(ScenarioEnum.ORDER.getValue());
|
||||||
|
operation.setOrderCode(orderCode);
|
||||||
|
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation);
|
||||||
|
|
||||||
logger.info("重试订单退款response:{}", JSON.toJSONString(response));
|
logger.info("重试订单退款response:{}", JSON.toJSONString(response));
|
||||||
} else {
|
} else {
|
||||||
BigDecimal reversedAmt = BigDecimal.ZERO;
|
BigDecimal reversedAmt = BigDecimal.ZERO;
|
||||||
|
|||||||
Reference in New Issue
Block a user