guohongjin
2024-05-01 1901fceb6ddaa56a57f3131191454554c3e77e68
rest/src/main/java/cn/stylefeng/rest/ijpay/controller/AliPayController.java
@@ -44,6 +44,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -103,7 +104,37 @@
         totalAmount = counsellingOrder.getPayAmount().toString();
      }
      try {
      // 判断支付金额是否为0
      BigDecimal amount = new BigDecimal(totalAmount);
      // 判断转换后的BigDecimal是否为0
      if (amount.compareTo(BigDecimal.ZERO) == 0) {
         if (req.getOrderNo().startsWith(OrderTypeEnum.MENTAL_TEST.getCode())) {
            // 心理测试订单
            orderMentalTestService.paySuccess(req.getOrderNo(), req.getOrderNo(), totalAmount, PayTypeEnum.ALIPAY.getCode());
         } else if (req.getOrderNo().startsWith(OrderTypeEnum.CONSULT_ONE.getCode())) {
            // 心理咨询1V1订单
            mentalTestOrderBizService.paySuccessOrderConsultOne(req.getOrderNo(), req.getOrderNo(), totalAmount, PayTypeEnum.ALIPAY.getCode());
         } else if (req.getOrderNo().startsWith(OrderTypeEnum.COURSE_ORDER.getCode())) {
            //课程订单
            OrderPayRequest orderPayRequest = new OrderPayRequest();
            orderPayRequest.setOrderNo(req.getOrderNo());
            orderPayRequest.setTransactionNo(req.getOrderNo());
            orderPayRequest.setPayType("2");
            orderPayRequest.setOrderType(1);
            courseOrderService.payCourseOrder(orderPayRequest);
         } else if (req.getOrderNo().startsWith(OrderTypeEnum.COUNSELLING_ORDER.getCode())) {
            //咨询订单
            OrderPayRequest orderPayRequest = new OrderPayRequest();
            orderPayRequest.setOrderNo(req.getOrderNo());
            orderPayRequest.setTransactionNo(req.getOrderNo());
            orderPayRequest.setPayType("2");
            orderPayRequest.setOrderType(2);
            counsellingOrderService.payCounsellingOrder(orderPayRequest);
         }
         return new SuccessResponseData("支付成功");
      }
         try {
         // 设置支付配置
         AliPayApiConfigKit.putApiConfig(getApiConfig());
         //AliPayApiConfigKit.setThreadLocalAppId(aliPayBean.getAppId());
@@ -126,6 +157,68 @@
         e.printStackTrace();
         log.error("支付宝APP支付异常!", e.getMessage());
         return new ErrorResponseData("500", e.getMessage());
      }
   }
   @PostMapping(value = RuleConstants.NOT_LOGIN + "/freePay")
   @ResponseBody
   public String freePay(HttpServletRequest request) {
      try {
         log.info("支付宝异步通知");
         // 获取支付宝POST过来反馈信息
         Map<String, String> params = AliPayApi.toMap(request);
         for (Map.Entry<String, String> entry : params.entrySet()) {
            log.info(entry.getKey() + " = " + entry.getValue());
         }
         if (params.get("out_biz_no") != null){
            log.info(params.get("out_biz_no").toString()+",退费成功!");
            return "success";
         }
         boolean verifyResult = AlipaySignature.rsaCheckV1(params, aliPayBean.getPublicKey(), "UTF-8", "RSA2");
         if (verifyResult) {
            // 参数文档:https://opendocs.alipay.com/open/204/105301?pathHash=fef00e6d
            String tradeNo = params.get("trade_no");
            String totalAmount = params.get("total_amount");
            // 获取订单号
            String orderNo = params.get("out_trade_no");
            // 订单编号判断订单类型
            if (orderNo.startsWith(OrderTypeEnum.MENTAL_TEST.getCode())) {
               // 心理测试订单
               orderMentalTestService.paySuccess(orderNo, tradeNo, totalAmount, PayTypeEnum.ALIPAY.getCode());
            } else if (orderNo.startsWith(OrderTypeEnum.CONSULT_ONE.getCode())) {
               // 心理咨询1V1订单
               mentalTestOrderBizService.paySuccessOrderConsultOne(orderNo, tradeNo, totalAmount, PayTypeEnum.ALIPAY.getCode());
            } else if (orderNo.startsWith(OrderTypeEnum.COURSE_ORDER.getCode())) {
               //课程订单
               OrderPayRequest orderPayRequest = new OrderPayRequest();
               orderPayRequest.setOrderNo(orderNo);
               orderPayRequest.setTransactionNo(tradeNo);
               orderPayRequest.setPayType("2");
               orderPayRequest.setOrderType(1);
               courseOrderService.payCourseOrder(orderPayRequest);
            } else if (orderNo.startsWith(OrderTypeEnum.COUNSELLING_ORDER.getCode())) {
               //咨询订单
               OrderPayRequest orderPayRequest = new OrderPayRequest();
               orderPayRequest.setOrderNo(orderNo);
               orderPayRequest.setTransactionNo(tradeNo);
               orderPayRequest.setPayType("2");
               orderPayRequest.setOrderType(2);
               counsellingOrderService.payCounsellingOrder(orderPayRequest);
            }
            log.info("notify_url 验证成功succcess");
            return "success";
         } else {
            log.error("notify_url 验证失败");
            return "failure";
         }
      } catch (AlipayApiException e) {
         e.printStackTrace();
         return "failure";
      }
   }
@@ -511,7 +604,7 @@
    * 退款
    */
   @ApiOperation("支付宝退款")
   @RequestMapping(value = RuleConstants.NOT_LOGIN + "/tradeRefund")
   @RequestMapping(value = RuleConstants.NOT_LOGIN + "/tradeRefund", method = {RequestMethod.POST, RequestMethod.GET})
   @ResponseBody
   public Boolean tradeRefund(@RequestParam(required = false, name = "outTradeNo") String outTradeNo, @RequestParam(required = false, name = "tradeNo") String tradeNo) {
      log.info("支付宝-退款信息-outTradeNo:"+outTradeNo+", tradeNo:"+tradeNo);