diff --git a/cash-api/order-server/src/main/java/com/czg/controller/PayController.java b/cash-api/order-server/src/main/java/com/czg/controller/PayController.java index 6ce50cea..e2c22989 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/PayController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/PayController.java @@ -1,6 +1,5 @@ package com.czg.controller; -import com.czg.entity.resp.*; import com.czg.resp.CzgResult; import com.czg.service.order.dto.OrderPayParamDTO; import com.czg.service.order.service.PayService; @@ -13,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; + /** * 支付 * @@ -29,7 +30,7 @@ public class PayController { * h5支付 */ @PostMapping("h5Pay") - public CzgResult h5PayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { + public CzgResult> h5PayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { return payService.h5PayOrder(ServletUtil.getClientIPByHeader(request), payParam); } @@ -40,7 +41,7 @@ public class PayController { * openId 必填 */ @PostMapping("jsPay") - public CzgResult jsPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { + public CzgResult> jsPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { return payService.jsPayOrder(ServletUtil.getClientIPByHeader(request), payParam); } @@ -50,7 +51,7 @@ public class PayController { * openId 必填 */ @PostMapping("ltPayOrder") - public CzgResult ltPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { + public CzgResult> ltPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { return payService.ltPayOrder(ServletUtil.getClientIPByHeader(request), payParam); } @@ -58,7 +59,7 @@ public class PayController { * 正扫 */ @PostMapping("scanPay") - public CzgResult scanPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { + public CzgResult> scanPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) { return payService.scanPayOrder(ServletUtil.getClientIPByHeader(request), payParam); } @@ -67,7 +68,7 @@ public class PayController { * authCode 必填 扫描码 */ @PostMapping("microPay") - public CzgResult microPayOrder(@Validated @RequestBody OrderPayParamDTO payParam) { + public CzgResult> microPayOrder(@Validated @RequestBody OrderPayParamDTO payParam) { return payService.microPayOrder(payParam); } } diff --git a/cash-sdk/czg-pay/src/main/java/com/czg/entity/resp/CzgJsPayResp.java b/cash-sdk/czg-pay/src/main/java/com/czg/entity/resp/CzgJsPayResp.java index 14d84f87..e212b2ee 100644 --- a/cash-sdk/czg-pay/src/main/java/com/czg/entity/resp/CzgJsPayResp.java +++ b/cash-sdk/czg-pay/src/main/java/com/czg/entity/resp/CzgJsPayResp.java @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class CzgJsPayResp extends CzgBaseResp{ +public class CzgJsPayResp extends CzgBaseResp { private CzgPayInfo payInfo; } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java index d6ecd353..c20d3721 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java @@ -5,6 +5,7 @@ import com.czg.resp.CzgResult; import com.czg.service.order.dto.OrderPayParamDTO; import java.math.BigDecimal; +import java.util.Map; /** @@ -15,27 +16,27 @@ public interface PayService { /** * h5支付 */ - CzgResult h5PayOrder(String clintIp, OrderPayParamDTO payParam); + CzgResult> h5PayOrder(String clintIp, OrderPayParamDTO payParam); /** * js支付 */ - CzgResult jsPayOrder(String clintIp, OrderPayParamDTO payParam); + CzgResult> jsPayOrder(String clintIp, OrderPayParamDTO payParam); /** * 小程序支付 */ - CzgResult ltPayOrder(String clintIp, OrderPayParamDTO payParam); + CzgResult> ltPayOrder(String clintIp, OrderPayParamDTO payParam); /** * PC扫码支付 */ - CzgResult scanPayOrder(String clintIp, OrderPayParamDTO payParam); + CzgResult> scanPayOrder(String clintIp, OrderPayParamDTO payParam); /** * 聚合反扫 */ - CzgResult microPayOrder(OrderPayParamDTO payParam); + CzgResult> microPayOrder(OrderPayParamDTO payParam); /** diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java index 1064f76a..80250c21 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java @@ -1,6 +1,7 @@ package com.czg.service.order.service.impl; import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson2.JSONObject; import com.czg.account.entity.ShopMerchant; import com.czg.account.service.ShopMerchantService; import com.czg.entity.req.*; @@ -24,6 +25,8 @@ import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; /** * @author ww @@ -48,7 +51,7 @@ public class PayServiceImpl implements PayService { private final String refundJsonExtParam = "{\"payType\":\"1\"}"; @Override - public CzgResult h5PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { + public CzgResult> h5PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId()); AssertUtil.isNull(orderInfo, "订单不存在"); String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId(); @@ -60,7 +63,7 @@ public class PayServiceImpl implements PayService { @Override - public CzgResult jsPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { + public CzgResult> jsPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId()); AssertUtil.isNull(orderInfo, "订单不存在"); String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId(); @@ -71,7 +74,7 @@ public class PayServiceImpl implements PayService { } @Override - public CzgResult ltPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { + public CzgResult> ltPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId()); AssertUtil.isNull(orderInfo, "订单不存在"); String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId(); @@ -82,7 +85,7 @@ public class PayServiceImpl implements PayService { } @Override - public CzgResult scanPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { + public CzgResult> scanPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId()); AssertUtil.isNull(orderInfo, "订单不存在"); String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId(); @@ -93,7 +96,7 @@ public class PayServiceImpl implements PayService { } @Override - public CzgResult microPayOrder(OrderPayParamDTO payParam) { + public CzgResult> microPayOrder(OrderPayParamDTO payParam) { OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId()); AssertUtil.isNull(orderInfo, "订单不存在"); String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId(); @@ -129,7 +132,7 @@ public class PayServiceImpl implements PayService { } private void upOrderPayInfo(@NonNull Long orderId, @NotBlank String payType, @NotBlank String payOrderNo) { - orderInfoService.updateChain().of(OrderInfo.class) + orderInfoService.updateChain() .set(OrderInfo::getPayOrderNo, payOrderNo) .set(OrderInfo::getPayType, payType) .where(OrderInfo::getId).eq(orderId) @@ -137,40 +140,43 @@ public class PayServiceImpl implements PayService { } - private CzgResult h5Pay(@NonNull Long shopId, CzgH5PayReq bizData) { + private CzgResult> h5Pay(@NonNull Long shopId, CzgH5PayReq bizData) { ShopMerchant shopMerchant = shopMerchantService.getById(shopId); bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(), sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode())); - return czgPayService.h5Pay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + CzgResult h5PayRespCzgResult = czgPayService.h5Pay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + return execPayResult(h5PayRespCzgResult); } - private CzgResult jsPay(@NonNull Long shopId, @NonNull String payType, CzgJsPayReq bizData) { + private CzgResult> jsPay(@NonNull Long shopId, @NonNull String payType, CzgJsPayReq bizData) { ShopMerchant shopMerchant = shopMerchantService.getById(shopId); AssertUtil.isBlank(bizData.getSubAppid(), "暂不可用,请联系商家配置" + ("aliPay".equals(payType) ? "支付宝" : "微信") + "小程序"); bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(), sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode())); bizData.setSubAppid("aliPay".equals(payType) ? shopMerchant.getAlipaySmallAppid() : shopMerchant.getWechatSmallAppid()); - return czgPayService.jsPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + CzgResult jsPayRespCzgResult = czgPayService.jsPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + return execPayResult(jsPayRespCzgResult); } - private CzgResult ltPay(@NonNull Long shopId, String payType, CzgLtPayReq bizData) { + private CzgResult> ltPay(@NonNull Long shopId, String payType, CzgLtPayReq bizData) { ShopMerchant shopMerchant = shopMerchantService.getById(shopId); AssertUtil.isBlank(bizData.getSubAppid(), "暂不可用,请联系商家配置" + ("aliPay".equals(payType) ? "支付宝" : "微信") + "小程序"); bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(), sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode())); bizData.setSubAppid("aliPay".equals(payType) ? shopMerchant.getAlipaySmallAppid() : shopMerchant.getWechatSmallAppid()); - return czgPayService.ltPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + CzgResult ltPayRespCzgResult = czgPayService.ltPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + return execPayResult(ltPayRespCzgResult); } - private CzgResult scanPay(@NonNull Long shopId, CzgScanPayReq bizData) { + private CzgResult> scanPay(@NonNull Long shopId, CzgScanPayReq bizData) { ShopMerchant shopMerchant = shopMerchantService.getById(shopId); bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(), sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode())); - return czgPayService.scanPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + CzgResult scanPayRespCzgResult = czgPayService.scanPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); + return execPayResult(scanPayRespCzgResult); } - private CzgResult microPay(@NonNull Long shopId, CzgMicroPayReq bizData) { - CzgResult result = CzgResult.success(); + private CzgResult> microPay(@NonNull Long shopId, CzgMicroPayReq bizData) { ShopMerchant shopMerchant = shopMerchantService.getById(shopId); bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(), sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode())); @@ -189,19 +195,8 @@ public class PayServiceImpl implements PayService { bizData.setSubAppid(shopMerchant.getAlipaySmallAppid()); } CzgResult czgScanPayResult = czgPayService.microPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); - if (czgScanPayResult.getCode() != 200 || czgScanPayResult.getData() == null) { - result.setCode(500); - result.setMsg(czgScanPayResult.getMsg()); - return result; - } - CzgMicroPayResp data = czgScanPayResult.getData(); - result.setMsg(data.getNote()); - if ("TRADE_SUCCESS".equals(data.getState())) { - result.setCode(200); - } else { - result.setCode(500); - } - return result; + + return execPayResult(czgScanPayResult); } private CzgResult refund(@NonNull Long shopId, CzgRefundReq bizData) { @@ -209,4 +204,38 @@ public class PayServiceImpl implements PayService { bizData.setNotifyUrl(sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_REFUND_NOTIFY_URL.getCode())); return czgPayService.refundOrder(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData); } + + private CzgResult> execPayResult(CzgResult res) { + CzgResult> result = CzgResult.success(); + if (res.getCode() != 200 || res.getData() == null) { + result.setCode(500); + result.setMsg(res.getMsg()); + return result; + } + + CzgBaseResp data = res.getData(); + + Map map = new HashMap<>(); + switch (data) { + case CzgMicroPayResp ignored -> { + if (!"TRADE_SUCCESS".equals(data.getState())) { + result.setCode(500); + return result; + } + return result; + } + case CzgH5PayResp h5PayResp -> map = JSONObject.parseObject(JSONObject.toJSONString(h5PayResp.getPayInfo())); + case CzgJsPayResp jsPayResp -> map = JSONObject.parseObject(JSONObject.toJSONString(jsPayResp.getPayInfo())); + case CzgLtPayResp ltPayResp -> { + map.put("payInfo", JSONObject.toJSONString(ltPayResp.getPayInfo())); + map.put("liteInfo", JSONObject.toJSONString(ltPayResp.getLiteInfo())); + } + case CzgScanPayResp scanPayResp -> map = JSONObject.parseObject(JSONObject.toJSONString(scanPayResp.getPayInfo())); + default -> throw new IllegalStateException("Unexpected value: " + data); + } + + result.setData(map); + + return result; + } }