From 1901fceb6ddaa56a57f3131191454554c3e77e68 Mon Sep 17 00:00:00 2001 From: guohongjin <guohongjin@test.com> Date: 星期三, 01 五月 2024 13:56:51 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PsychologicalCounseling --- rest/src/main/java/cn/stylefeng/rest/ijpay/controller/WxPayController.java | 100 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 68 insertions(+), 32 deletions(-) diff --git a/rest/src/main/java/cn/stylefeng/rest/ijpay/controller/WxPayController.java b/rest/src/main/java/cn/stylefeng/rest/ijpay/controller/WxPayController.java index 9b6c80c..3f1d935 100644 --- a/rest/src/main/java/cn/stylefeng/rest/ijpay/controller/WxPayController.java +++ b/rest/src/main/java/cn/stylefeng/rest/ijpay/controller/WxPayController.java @@ -2,6 +2,7 @@ import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import cn.stylefeng.guns.modular.business.dto.request.OrderPayRequest; import cn.stylefeng.guns.modular.business.entity.CounsellingOrder; import cn.stylefeng.guns.modular.business.entity.CourseOrder; @@ -47,6 +48,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; @Slf4j @@ -85,23 +88,52 @@ @ResponseBody public ResponseData appPay(@RequestBody @Validated WxAppPayRequest req) { // 支付金额 - String totalAmount = ""; + BigDecimal totalAmount = BigDecimal.valueOf(0); // 订单编号判断订单类型 if (req.getOrderNo().contains(OrderTypeEnum.MENTAL_TEST.getCode())) { // 心理测试订单 OrderMentalTest order = orderMentalTestService.getOrderByNo(req.getOrderNo()); - totalAmount = order.getPayAmount().toString(); + totalAmount = order.getPayAmount(); } else if (req.getOrderNo().contains(OrderTypeEnum.CONSULT_ONE.getCode())) { // 心理咨询1V1订单 OrderConsultOne order = orderConsultOneService.getOrderByNo(req.getOrderNo()); - totalAmount = order.getPayAmount().toString(); + totalAmount = order.getPayAmount(); }else if (req.getOrderNo().startsWith(OrderTypeEnum.COURSE_ORDER.getCode())){ CourseOrder courseOrder = this.courseOrderService.getCourseOrderByNo(req.getOrderNo()); - totalAmount = courseOrder.getPayAmount().toString(); + totalAmount = courseOrder.getPayAmount(); } else if (req.getOrderNo().startsWith(OrderTypeEnum.COUNSELLING_ORDER.getCode())) { CounsellingOrder counsellingOrder = this.counsellingOrderService.getCounsellingOrderByNo(req.getOrderNo()); - totalAmount = counsellingOrder.getPayAmount().toString(); + totalAmount = counsellingOrder.getPayAmount(); + } + + + // 判断转换后的BigDecimal是否为0 + if (totalAmount.compareTo(BigDecimal.ZERO) == 0) { + if (req.getOrderNo().startsWith(OrderTypeEnum.MENTAL_TEST.getCode())) { + // 心理测试订单 + orderMentalTestService.paySuccess(req.getOrderNo(), req.getOrderNo(), String.valueOf(totalAmount), PayTypeEnum.ALIPAY.getCode()); + } else if (req.getOrderNo().startsWith(OrderTypeEnum.CONSULT_ONE.getCode())) { + // 心理咨询1V1订单 + mentalTestOrderBizService.paySuccessOrderConsultOne(req.getOrderNo(), req.getOrderNo(), String.valueOf(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("支付成功"); } // 设置支付配置 @@ -115,6 +147,10 @@ // 获取微信支付配置 WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig(); + // 支付金额X100求整 + String totalFee = totalAmount.multiply(BigDecimal.valueOf(100)) + .setScale(0, RoundingMode.HALF_UP) + .toPlainString(); // 组装支付参数 Map<String, String> params = UnifiedOrderModel .builder() @@ -123,35 +159,34 @@ .nonce_str(WxPayKit.generateStr()) .body(req.getSubject()) .attach(req.getSubject()) - //.out_trade_no(WxPayKit.generateStr()) - .out_trade_no(req.getOrderNo()) - .total_fee(totalAmount) + .out_trade_no(WxPayKit.generateStr()) +// .out_trade_no(req.getOrderNo()) + .total_fee(totalFee) .spbill_create_ip(ip) .notify_url(notifyUrl) - .trade_type(TradeType.APP.getTradeType()) + .trade_type(TradeType.APP.getTradeType()).attach(req.getOrderNo()) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); - + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); + log.debug("微信APP支付请求params:{}", JSONUtil.toJsonStr(params)); String xmlResult = WxPayApi.pushOrder(false, params); - log.info("微信APP支付结果xml:{}", xmlResult); + log.debug("微信APP支付结果xml:{}", xmlResult); Map<String, String> result = WxPayKit.xmlToMap(xmlResult); String returnCode = result.get("return_code"); String resultCode = result.get("result_code"); String returnMsg = result.get("return_msg"); if (!WxPayKit.codeIsOk(returnCode) || !WxPayKit.codeIsOk(resultCode)) { - log.error("微信APP支付异常!{}", returnMsg); + log.error("微信APP支付异常!{}", result); return new ErrorResponseData(returnMsg); } // 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回 String prepayId = result.get("prepay_id"); - Map<String, String> packageParams = WxPayKit.appPrepayIdCreateSign(wxPayApiConfig.getAppId(), wxPayApiConfig.getMchId(), prepayId, wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + Map<String, String> packageParams = WxPayKit.appPrepayIdCreateSign(wxPayApiConfig.getAppId(), wxPayApiConfig.getMchId(), prepayId, wxPayApiConfig.getPartnerKey(), SignType.MD5); - String jsonStr = JSON.toJSONString(packageParams); - log.info("微信APP支付返回参数:{}", jsonStr); - return new SuccessResponseData(jsonStr); + log.info("微信APP支付返回参数:{}", JSONUtil.toJsonStr(packageParams)); + return new SuccessResponseData(packageParams); } /** @@ -167,13 +202,14 @@ // 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态 // 注意此处签名方式需与统一下单的签名类型一致 - if (WxPayKit.verifyNotify(params, WxPayApiConfigKit.getWxPayApiConfig().getPartnerKey(), SignType.HMACSHA256)) { + if (WxPayKit.verifyNotify(params, WxPayApiConfigKit.getWxPayApiConfig().getPartnerKey(), SignType.MD5)) { if (WxPayKit.codeIsOk(returnCode)) { // 参数文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7&index=8 - String totalFee = params.get("total_fee"); + String totalFee = new BigDecimal(params.get("total_fee")).divide(BigDecimal.valueOf(100)).toString(); String transactionId = params.get("transaction_id"); // 获取订单号 - String orderNo = params.get("out_trade_no"); +// String orderNo = params.get("out_trade_no"); + String orderNo = params.get("attach"); // 订单编号判断订单类型 if (orderNo.startsWith(OrderTypeEnum.MENTAL_TEST.getCode())) { // 心理测试订单 @@ -274,7 +310,7 @@ .trade_type(TradeType.MWEB.getTradeType()) .scene_info(JSON.toJSONString(sceneInfo)) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); String xmlResult = WxPayApi.pushOrder(false, params); log.info(xmlResult); @@ -338,7 +374,7 @@ .trade_type(TradeType.JSAPI.getTradeType()) .openid(openId) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); String xmlResult = WxPayApi.pushOrder(false, params); log.info(xmlResult); @@ -359,7 +395,7 @@ String prepayId = resultMap.get("prepay_id"); Map<String, String> packageParams = WxPayKit.prepayIdCreateSign(prepayId, wxPayApiConfig.getAppId(), - wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + wxPayApiConfig.getPartnerKey(), SignType.MD5); String jsonStr = JSON.toJSONString(packageParams); return new SuccessResponseData(jsonStr); @@ -452,7 +488,7 @@ .trade_type(TradeType.NATIVE.getTradeType()) .openid(openId) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); String xmlResult = WxPayApi.pushOrder(false, params); log.info("统一下单:" + xmlResult); /** @@ -479,7 +515,7 @@ //result_code为FAIL时,添加该键值对,value值是微信告诉客户的信息 prepayParams.put("err_code_des", "订单失效"); } - prepaySign = WxPayKit.createSign(prepayParams, wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + prepaySign = WxPayKit.createSign(prepayParams, wxPayApiConfig.getPartnerKey(), SignType.MD5); prepayParams.put("sign", prepaySign); String xml = WxPayKit.toXml(prepayParams); log.error(xml); @@ -521,7 +557,7 @@ .notify_url(notifyUrl) .trade_type(TradeType.NATIVE.getTradeType()) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); String xmlResult = WxPayApi.pushOrder(false, params); log.info("统一下单:" + xmlResult); @@ -583,7 +619,7 @@ .spbill_create_ip(ip) .auth_code(authCode) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); String xmlResult = WxPayApi.microPay(false, params); //同步返回结果 @@ -644,7 +680,7 @@ .trade_type(TradeType.JSAPI.getTradeType()) .openid(openId) .build() - .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5); String xmlResult = WxPayApi.pushOrder(false, params); @@ -663,7 +699,7 @@ // 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回 String prepayId = result.get("prepay_id"); Map<String, String> packageParams = WxPayKit.miniAppPrepayIdCreateSign(wxPayApiConfig.getAppId(), prepayId, - wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256); + wxPayApiConfig.getPartnerKey(), SignType.MD5); String jsonStr = JSON.toJSONString(packageParams); log.info("小程序支付的参数:" + jsonStr); return new SuccessResponseData(jsonStr); @@ -805,7 +841,7 @@ params.put("bank_code", "1001"); params.put("amount", "1"); params.put("desc", "IJPay 让支付触手可及-付款到银行卡"); - params.put("sign", WxPayKit.createSign(params, wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256)); + params.put("sign", WxPayKit.createSign(params, wxPayApiConfig.getPartnerKey(), SignType.MD5)); return WxPayApi.payBank(params, wxPayApiConfig.getCertPath(), wxPayApiConfig.getMchId()); } catch (Exception e) { e.printStackTrace(); @@ -853,7 +889,7 @@ .nonce_str(WxPayKit.generateStr()) .receiver(JSON.toJSONString(receiver)) .build() - .createSign(wxPayBean.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayBean.getPartnerKey(), SignType.MD5); log.info("请求参数:{}", WxPayKit.toXml(params)); String result = WxPayApi.profitSharingAddReceiver(params); log.info("请求结果:{}", result); @@ -887,7 +923,7 @@ .out_order_no(WxPayKit.generateStr()) .receivers(JSON.toJSONString(list)) .build() - .createSign(wxPayBean.getPartnerKey(), SignType.HMACSHA256); + .createSign(wxPayBean.getPartnerKey(), SignType.MD5); log.info("请求参数:{}", WxPayKit.toXml(params)); String result = WxPayApi.profitSharing(params, wxPayBean.getCertPath(), wxPayBean.getMchId()); -- Gitblit v1.7.1