From 94e9dc3adb80baf6e1d7d56e54a93917996bc339 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期日, 28 四月 2024 11:21:49 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- rest/src/main/java/cn/stylefeng/rest/ijpay/controller/WxPayController.java | 78 ++++++++++++++++++++++++++++----------- 1 files changed, 56 insertions(+), 22 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 983b290..ee3f4b2 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; @@ -48,6 +49,7 @@ import java.io.File; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; @Slf4j @@ -105,6 +107,35 @@ 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("支付成功"); + } + // 设置支付配置 WxPayApiConfigKit.putApiConfig(getApiConfig()); //WxPayApiConfigKit.setThreadLocalAppId(wxPayBean.getAppId()); @@ -116,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() @@ -126,33 +161,32 @@ .attach(req.getSubject()) //.out_trade_no(WxPayKit.generateStr()) .out_trade_no(req.getOrderNo()) - .total_fee(totalAmount.multiply(BigDecimal.valueOf(100)).toString()) + .total_fee(totalFee) .spbill_create_ip(ip) .notify_url(notifyUrl) .trade_type(TradeType.APP.getTradeType()) .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); } /** @@ -168,7 +202,7 @@ // 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态 // 注意此处签名方式需与统一下单的签名类型一致 - 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"); @@ -275,7 +309,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); @@ -339,7 +373,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); @@ -360,7 +394,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); @@ -453,7 +487,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); /** @@ -480,7 +514,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); @@ -522,7 +556,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); @@ -584,7 +618,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); //同步返回结果 @@ -645,7 +679,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); @@ -664,7 +698,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); @@ -806,7 +840,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(); @@ -854,7 +888,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); @@ -888,7 +922,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