Browse Source

退款

master
wangpengfei 1 year ago
parent
commit
14f6344d47
  1. 13
      src/main/java/com/yxt/pay/api/refund/RefundBusinessQuery.java
  2. 4
      src/main/java/com/yxt/pay/api/refund/RefundOrder.java
  3. 3
      src/main/java/com/yxt/pay/api/refund/RefundOrderDto.java
  4. 47
      src/main/java/com/yxt/pay/biz/refund/WxRefundService.java

13
src/main/java/com/yxt/pay/api/refund/RefundBusinessQuery.java

@ -0,0 +1,13 @@
package com.yxt.pay.api.refund;
import lombok.Data;
/**
* @author wangpengfei
* @date 2024/4/1 14:01
*/
@Data
public class RefundBusinessQuery {
String mainSid;
boolean aBoolean;
}

4
src/main/java/com/yxt/pay/api/refund/RefundOrder.java

@ -13,7 +13,8 @@ import java.util.Date;
*/
@Data
public class RefundOrder extends BaseEntity {
private String outTradeNo;//订单编号
private String outTradeNo;//退款编号
private String outRefundNo;//订单编号
private int source;//来源 0云菜窖
private String name;//商品名
private String amount;//金额
@ -22,7 +23,6 @@ public class RefundOrder extends BaseEntity {
private String orderSid;//支付订单sid
private String reason;//退款原因
public String getTime() {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
return format.format(new Date());

3
src/main/java/com/yxt/pay/api/refund/RefundOrderDto.java

@ -8,7 +8,8 @@ import lombok.Data;
*/
@Data
public class RefundOrderDto {
private String outTradeNo;//订单编号
private String outTradeNo;//退单编号
private String outRefundNo;//订单编号
private int source;//来源 0云菜窖
private String name;//商品名
private String amount;//金额

47
src/main/java/com/yxt/pay/biz/refund/WxRefundService.java

@ -12,29 +12,33 @@ import com.wechat.pay.java.core.notification.RequestParam;
import com.wechat.pay.java.service.partnerpayments.app.model.Transaction;
import com.wechat.pay.java.service.refund.RefundService;
import com.wechat.pay.java.service.refund.model.*;
import com.wechat.pay.java.service.refund.model.Refund;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.core.result.ResultBean;
import com.yxt.pay.api.order.PayOrder;
import com.yxt.pay.api.refund.RefundOrder;
import com.yxt.pay.api.refund.RefundOrderDto;
import com.yxt.pay.api.refund.WXRefundOrderReqVo;
import com.yxt.pay.api.refund.WXRefundOrderRespVo;
import com.yxt.pay.api.refund.*;
import com.yxt.pay.api.wxpay.WxPayVo;
import com.yxt.pay.biz.order.OrderService;
import com.yxt.pay.utils.UrlComponent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import static com.wechat.pay.java.core.http.Constant.*;
import static java.math.BigDecimal.ROUND_DOWN;
import static java.math.BigDecimal.ROUND_UP;
/**
* @author wangpengfei
@ -64,7 +68,7 @@ public class WxRefundService extends MybatisBaseService<WxRefundMapper,RefundOrd
public ResultBean createRefundOrder(RefundOrderDto refundOrderDto){
ResultBean rb=new ResultBean();
RefundOrder refundOrder=new RefundOrder(refundOrderDto.getSource());
BeanUtil.copyProperties(refundOrderDto,refundOrder,"id","sid");
BeanUtil.copyProperties(refundOrderDto,refundOrder,"id","sid","outTradeNo");
baseMapper.insert(refundOrder);
return rb.success().setData(refundOrder);
@ -77,6 +81,7 @@ public class WxRefundService extends MybatisBaseService<WxRefundMapper,RefundOrd
* @Author: whl
* @Date: 2023/10/12 15:46
*/
@Transactional
public ResultBean refund(String orderSid) throws Exception {
ResultBean rb = ResultBean.fireFail();
try {
@ -103,19 +108,22 @@ public class WxRefundService extends MybatisBaseService<WxRefundMapper,RefundOrd
AmountReq amountReq = new AmountReq();
// PayOrder payOrder=orderService.getOne(new QueryWrapper<PayOrder>().eq("sid",orderSid));
RefundOrder refundOrder=baseMapper.selectOne(new QueryWrapper<RefundOrder>().eq("orderSid",payOrder.getSid()));
BigDecimal b=new BigDecimal(refundOrder.getAmount());
BigDecimal a =new BigDecimal(100);
String aoum=String.valueOf(b.multiply(a).setScale(0,ROUND_DOWN));
//退款金额
amountReq.setRefund(Long.valueOf(payOrder.getTotalTee()));
amountReq.setRefund(Long.valueOf(aoum));
// amountReq.setRefund(Long.valueOf("1"));
//原订单金额
amountReq.setTotal(Long.valueOf(payOrder.getTotalTee()));
amountReq.setTotal(Long.valueOf(aoum));
// amountReq.setTotal(Long.valueOf("1"));
//货币类型(默认人民币)
amountReq.setCurrency("CNY");
request.setAmount(amountReq);
//商户退款单号
request.setOutRefundNo(String.valueOf(payOrder.getOutTradeNo()));
request.setOutRefundNo(refundOrder.getOutTradeNo());
// request.setOutRefundNo(String.valueOf("ceshi"));
request.setOutTradeNo(refundOrder.getOutTradeNo());
request.setOutTradeNo(payOrder.getOutTradeNo());
// request.setOutTradeNo("ceshi");
request.setReason(refundOrder.getReason());
// request.setReason("ceshi");
@ -132,10 +140,15 @@ public class WxRefundService extends MybatisBaseService<WxRefundMapper,RefundOrd
if (refundResponse.getStatus().equals(Status.SUCCESS)){
//说明退款成功,开始接下来的业务操作
// WXRefundOrderRespVo refundOrderRespVO = new WXRefundOrderRespVo();
payOrder.setState(2);
orderService.updateById(payOrder);
refundOrder.setState(2);
baseMapper.updateById(refundOrder);
//你的业务代码
return rb.success().setData(refund);
}else{
payOrder.setState(3);
orderService.updateById(payOrder);
return rb.setMsg("申请退款失败").setData(refund);
}
}catch (Exception e){
@ -166,6 +179,7 @@ public class WxRefundService extends MybatisBaseService<WxRefundMapper,RefundOrd
stringBuffer.append(s);
}
String s1 = stringBuffer.toString();
log.info("退款回调"+s1);
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
String nonce = request.getHeader(WECHAT_PAY_NONCE);
String signType = request.getHeader("Wechatpay-Signature-Type");
@ -192,14 +206,23 @@ public class WxRefundService extends MybatisBaseService<WxRefundMapper,RefundOrd
.body(s1)
.build();
RefundNotification parse = parser.parse(requestParam, RefundNotification.class);
RefundOrder refundOrder=baseMapper.selectOne(new QueryWrapper<RefundOrder>().eq("outRefundNo",parse.getOutRefundNo()));
System.out.println("退款回调结果: " + parse);
//parse.getRefundStatus().equals("SUCCESS");说明退款成功
RefundBusinessQuery query=new RefundBusinessQuery();
Map<String, Object> map = new HashMap<>();
if (parse.getRefundStatus().equals(Transaction.TradeStateEnum.SUCCESS)){
//你的业务代码
map.put("mainSid",refundOrder.getOrderSid());
map.put("aBoolean",true);
System.out.println("退款回调结果: " + parse);
}else{
map.put("mainSid",refundOrder.getOrderSid());
map.put("aBoolean",false);
System.out.println("退款回调结果: " + parse);
}
ResponseEntity<ResultBean> postForEntity = new RestTemplate().postForEntity(refundOrder.getReturnUrl(),map, ResultBean.class);
} catch (Exception e) {
e.printStackTrace();
}

Loading…
Cancel
Save