diff --git a/api/src/test/java/com/sv/wx/WxServiceTest.java b/api/src/test/java/com/sv/wx/WxServiceTest.java new file mode 100644 index 0000000..443c55e --- /dev/null +++ b/api/src/test/java/com/sv/wx/WxServiceTest.java @@ -0,0 +1,57 @@ +package com.sv.wx; + +import com.WeiXinApplication; +import com.sv.dto.api.MemberLessonTicketDetailDTO; +import com.sv.entity.MemberRefund; +import com.sv.entity.Order; +import com.sv.mapper.MemberRefundMapper; +import com.sv.service.api.OrderService; +import com.sv.service.api.config.WechatPayService; +import com.ydd.framework.core.exception.ServiceException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes={WeiXinApplication.class}) +public class WxServiceTest { + + @Resource + WechatPayService wechatPayService; + @Resource + OrderService orderService; + @Resource + MemberRefundMapper memberRefundMapper; + + @Test + public void refund(){ +// wechatPayService.createUnifiedOrder("testlmq20231224",new BigDecimal(0.02),"127.0.0.1","JSAPI", 535); + // 根据orderSn查出对应订单信息 + String orderSn = "231224213047442679"; + Integer memberId = 535; + Order order = orderService.findOrderSn(orderSn,memberId); + if (order == null){ + throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.ORDER_ERROR); + } + + MemberRefund memberRefund = new MemberRefund(); + memberRefund.setMemberId(memberId); + memberRefund.setLessonId(1); + memberRefund.setMoney(order.getPrice()); +// memberRefund.setMoney(new BigDecimal(0.01)); + memberRefund.setOrderSn(orderSn); + memberRefund.setTransactionId(order.getTradeSn()); + memberRefund.setOrderId(order.getId()); + memberRefund.setOutRefundNo(orderService.createSn());//商户退款单号 + memberRefund.setPlatformId(1); + memberRefundMapper.insert(memberRefund); + wechatPayService.refundInputMoney(memberRefund,new BigDecimal(0.01)); + + } + +} diff --git a/service/src/main/java/com/sv/service/api/OrderService.java b/service/src/main/java/com/sv/service/api/OrderService.java index 30e92c7..3758249 100644 --- a/service/src/main/java/com/sv/service/api/OrderService.java +++ b/service/src/main/java/com/sv/service/api/OrderService.java @@ -156,7 +156,7 @@ public class OrderService extends BaseServiceImpl { /** * 根据用户Id,订单号查询订单 */ - Order findOrderSn(String orderSn,Integer memberId){ + public Order findOrderSn(String orderSn,Integer memberId){ return orderMapper.findOrderSn( orderSn, memberId); } diff --git a/service/src/main/java/com/sv/service/api/config/WechatPayService.java b/service/src/main/java/com/sv/service/api/config/WechatPayService.java index 6d29b9b..d22e6ee 100644 --- a/service/src/main/java/com/sv/service/api/config/WechatPayService.java +++ b/service/src/main/java/com/sv/service/api/config/WechatPayService.java @@ -248,6 +248,47 @@ public class WechatPayService extends BaseServiceImpl { } } + /** + * 退款接口 + */ + public void refundInputMoney(MemberRefund memberRefund,BigDecimal aMoney){ + OrderPaySignResponse.WechatPayParam wechatPayParam; + try { + + PayConfig payConfig = payConfigService.findKey("face"); + Assert.hasText(payConfig.getCert(), "证书找不到"); + String nonceStr = CommonUtils.CreateNonceStr(30); + WeChatPayHelper weChatPayHelper = new WeChatPayHelper(payConfig.getCert()); + weChatPayHelper.setAppId(payConfig.getAppId()); + weChatPayHelper.setMchId(payConfig.getMchId()); + weChatPayHelper.setKey(payConfig.getKey()); + Integer payMoney = Integer.valueOf(memberRefund.getMoney().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).toString()); + Integer refundMoney = Integer.valueOf(aMoney.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).toString()); + weChatPayHelper.setParameter("notify_url", payConfig.getNotifyUrl()); + + logger.info("申请退款请求参数" + ToStringBuilder.reflectionToString(weChatPayHelper)); + // 调用申请退款 +// String notifyUrl = "https://api.smartvenue.ydd100.cn//weixin/order/refund"; + OrderResponse response = weChatPayHelper.refund("",memberRefund.getOrderSn(),memberRefund.getOutRefundNo(),payMoney,refundMoney,payConfig.getCancel()); + logger.info(ToStringBuilder.reflectionToString(response)); + System.out.println(ToStringBuilder.reflectionToString(response)); + if (response.isSuccess()) { + String refundId = response.getRefundId(); + //更新‘用户退款记录表’中微信退款单号 + memberRefund.setRefundId(refundId); + memberRefundService.update(memberRefund); + }else{ + logger.error("返回的结果为:"+ToStringBuilder.reflectionToString(response)); + throw new RuntimeException("申请退款订单创建失败,请重试!"); + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("申请退款支持订单接口异常", e); + throw new ServiceException(""); + } + } + + @Transactional public void notifyRefund(Map params,Integer platformId ) throws IOException { logger.info("微信退款回调参数:" + JsonMapper.nonNullMapper().toJson(params));