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