Administrator
6 days ago a2ed552b0baa75c355c9ff9edce6edcf2f83a8eb
feat(mall): 添加LWPAY支付功能支持

- 集成OrderStatusEnum和ValidateEntityUtils等支付相关工具类
- 实现LWPAY代收支付接口createPayment调用逻辑
- 添加支付前订单状态验证机制,确保订单处于待支付状态
- 新增payOrderByLwPay支付方法处理系统支付类型
- 完善支付异常处理和错误日志记录机制
- 更新支付方式枚举值文档,增加LwPAY选项说明
2 files modified
83 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallOrderController.java 81 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiOrderPayDto.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallOrderController.java
@@ -3,6 +3,9 @@
import cc.mrbird.febs.common.annotation.Limit;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.LimitType;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.utils.ValidateEntityUtils;
import cc.mrbird.febs.mall.controller.dependentStation.constant.OrderConstants;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
@@ -192,27 +195,67 @@
        // 2. 获取订单详情
        MallOrderInfo order = mallOrderInfoService.getById(orderId);
        if (order == null) {
            return new FebsResponse().fail().message("订单创建失败");
        }
        if (order != null
                && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()
        ){
            // 3. 调用 LWPAY 代收接口
            try {
                String payUrl = lwPayService.createPayment(
                        order,
                        lwPayDto.getBankCode(),
                        lwPayDto.getNetwork()
                );
        // 3. 调用 LWPAY 代收接口
        try {
            String payUrl = lwPayService.createPayment(
                    order,
                    lwPayDto.getBankCode(),
                    lwPayDto.getNetwork()
            );
            Map<String, Object> result = new HashMap<>();
            result.put("orderNo", order.getOrderNo());
            result.put("amount", order.getAmount());
            result.put("payUrl", payUrl);
            return new FebsResponse().success().data(result).message("下单成功");
        } catch (Exception e) {
            log.error("LWPAY 代收下单失败: orderId={}", orderId, e);
            return new FebsResponse().fail().message("支付通道异常: " + e.getMessage());
                Map<String, Object> result = new HashMap<>();
                result.put("orderNo", order.getOrderNo());
                result.put("amount", order.getAmount());
                result.put("payUrl", payUrl);
                return new FebsResponse().success().data(result);
            } catch (Exception e) {
                log.error("LWPAY 代收下单失败: orderId={}", orderId, e);
                return new FebsResponse().fail().message("Payment channel exception: " + e.getMessage());
            }
        }
        return new FebsResponse().fail().message("Payment channel exception");
    }
    @ApiOperation(value = "LWPAY支付", notes = "LWPAY支付")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiOrderPayVo.class)
    })
    @PostMapping(value = "/payOrderByLwPay", produces = "application/json")
    public FebsResponse payOrderByLwPay(@RequestBody @Validated ApiOrderPayDto payDto) {
        Long orderId = payDto.getOrderId();
        Integer payType = payDto.getPayType();
        // 2. 获取订单详情
        MallOrderInfo order = mallOrderInfoService.getById(orderId);
        if (order != null
                && OrderConstants.PAY_TYPE_SYSTEM == payType
                && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()
        ){
            // 3. 调用 LWPAY 代收接口
            try {
                String payUrl = lwPayService.createPayment(
                        order,
                        "967",
                        null
                );
                Map<String, Object> result = new HashMap<>();
                result.put("orderNo", order.getOrderNo());
                result.put("amount", order.getAmount());
                result.put("payUrl", payUrl);
                return new FebsResponse().success().data(result).message("下单成功");
            } catch (Exception e) {
                log.error("LWPAY 代收下单失败: orderId={}", orderId, e);
                return new FebsResponse().fail().message("Payment channel exception: " + e.getMessage());
            }
        }
        return new FebsResponse().fail().message("Payment channel exception");
    }
    /**
src/main/java/cc/mrbird/febs/mall/dto/ApiOrderPayDto.java
@@ -17,6 +17,6 @@
    private Long orderId;
    @NotNull(message = "支付方式不能为空")
    @ApiModelProperty(value = "支付方式 1-微信 2-支付宝 3-USDT", example = "you_ke_*****")
    @ApiModelProperty(value = "支付方式 1-微信 2-支付宝 3-USDT 4-LwPAY", example = "you_ke_*****")
    private Integer payType;
}