Commit b2aab53f by 周晓航

【订C】新增订单退款成功回调接口,需要修改售后单状态(原因:发起退款时支付那边可能是退款中状态,定时任务补偿后需要回调订单)

parent b85b4c71
package com.freemud.sdk.api.assortment.order.response.order; package com.freemud.sdk.api.assortment.order.response.order;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -22,7 +23,16 @@ public class MultiOrderRefundResponse<T> { ...@@ -22,7 +23,16 @@ public class MultiOrderRefundResponse<T> {
} }
@Data @Data
public static class RefundPlatformResponse{ public static class RefundPlatformResponse {
/**
* 退款中状态码需要单独处理
*/
public static Integer REFUNDED_RESULTCODE = 8200305;
/**
* 退款成功
*/
public static Integer REFUND_SUCCESS = 100;
private String endTransTradeNo; private String endTransTradeNo;
private String fmRefundNo; private String fmRefundNo;
private String fmTradeNo; private String fmTradeNo;
...@@ -39,5 +49,11 @@ public class MultiOrderRefundResponse<T> { ...@@ -39,5 +49,11 @@ public class MultiOrderRefundResponse<T> {
private Integer totalAmount; private Integer totalAmount;
private String transId; private String transId;
private String ebcode; private String ebcode;
@ApiModelProperty(value = "业务返回码 8200305 代表退款中 100是成功 其他 都是失败")
private Integer resultCode;
@ApiModelProperty(value = "业务返回消息")
private String resultMsg;
} }
} }
\ No newline at end of file
...@@ -556,5 +556,16 @@ public class OrderController { ...@@ -556,5 +556,16 @@ public class OrderController {
return ResponseUtil.success(orderAdapterService.getOrderConfig(request)); return ResponseUtil.success(orderAdapterService.getOrderConfig(request));
} }
/**
* 同意退款, 支付服务退款失败的补偿接口
*
* 退款成功会回调该接口进行后续流程补偿
*/
@IsConvertEN
@ApiAnnotation(logMessage = "/order/refund/callback")
@PostMapping("/refund/callback")
public BaseResponse refundSuccessCallback(@Validated @LogParams @RequestBody RefundSuccessCallbackVo req) {
return orderAdapterService.refundSuccessCallback(req);
}
} }
package cn.freemud.entities.vo;
import javax.validation.constraints.NotBlank;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/6/8 17:38
* @description :
*/
public class RefundSuccessCallbackVo {
/**
* 商户号
*/
@NotBlank(message = "商户号不能为空")
private String partnerId;
/**
* 订单号
*/
@NotBlank(message = "订单编号不能为空")
private String orderCode;
/**
* 退款序列号
*/
private String refundId;
}
package cn.freemud.management.adapter; package cn.freemud.management.adapter;
import cn.freemud.management.entities.dto.request.pay.AgentPayRefundReq;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto; import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
...@@ -76,6 +78,21 @@ public class PaymentSdkAdapter { ...@@ -76,6 +78,21 @@ public class PaymentSdkAdapter {
return multiQueryRequest; return multiQueryRequest;
} }
@SneakyThrows
public AgentPayRefundReq getAgentPayefundReq(OrderBeanV1 orderBean, BigDecimal refundAmount) {
OrderExtInfoDto ext = JSON.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
AgentPayRefundReq req = new AgentPayRefundReq();
req.setPartnerId(orderBean.getCompanyId());
req.setStoreId(orderBean.getShopId());
req.setFmTradeNo(ext.getPayTransId());
req.setOutOrderNo(orderBean.getOid());
req.setRefundTradeNo(this.getRefundSerialNo().toString());
req.setRefundAmount(refundAmount.longValue());
req.setNotifyUrl(refundNotifyCallback);
req.setVer("V1");
return req;
}
public Long getRefundSerialNo() { public Long getRefundSerialNo() {
return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000; return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000;
} }
......
package cn.freemud.management.entities.dto.response.pay; package cn.freemud.management.entities.dto.response.pay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -20,6 +21,7 @@ public class AgentPayRefundResp { ...@@ -20,6 +21,7 @@ public class AgentPayRefundResp {
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class DataDTO { public static class DataDTO {
private String fmTradeNo; private String fmTradeNo;
private String endTransTradeNo; private String endTransTradeNo;
private String platformTradeNo; private String platformTradeNo;
...@@ -35,6 +37,12 @@ public class AgentPayRefundResp { ...@@ -35,6 +37,12 @@ public class AgentPayRefundResp {
private String refundTime; private String refundTime;
private String transId; private String transId;
private String ebcode; private String ebcode;
@ApiModelProperty(value = "业务返回码")
private Integer resultCode;
@ApiModelProperty(value = "业务返回消息")
private String resultMsg;
} }
public boolean isOk() { public boolean isOk() {
......
...@@ -181,6 +181,8 @@ public enum ResponseResult { ...@@ -181,6 +181,8 @@ public enum ResponseResult {
REFUND_EXCEPTION("58004", "支付退款异常"), REFUND_EXCEPTION("58004", "支付退款异常"),
REFUND_FAIL("58005", "支付退款失败"), REFUND_FAIL("58005", "支付退款失败"),
NOT_SUFFICIENT_FUNDS("8200201", "商户余额不足"), NOT_SUFFICIENT_FUNDS("8200201", "商户余额不足"),
CHECK_PARAM_ERROR("58006", "支付退款请求参数校验异常"),
REFUND_FAIL_WAIT_CALLBACK("58007", "支付退款失败,等待回调补偿中"),
/** /**
* 优惠券活动 * 优惠券活动
*/ */
......
...@@ -221,6 +221,7 @@ public class SaasOrderHandle { ...@@ -221,6 +221,7 @@ public class SaasOrderHandle {
if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) { if (PayRefundStatus.SUCCESS.equals(refundResponse.getPayRefundStatus())) {
baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest); baseOrderResponse = orderCenterSdkService.refundComplete(refundAgreeRequest);
} else { } else {
// fisherman 这里有缺陷 退款失败也是最终状态, 基础服务售后状态不能为 4 不然用户无法重新发起售后单
baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest); baseOrderResponse = orderCenterSdkService.refundReturn(refundAgreeRequest);
} }
if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) { if (baseOrderResponse == null || ObjectUtils.notEqual(ResponseResult.SUCCESS.getCode(), baseOrderResponse.getErrcode().toString())) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment