diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java
index e902eff35..0384e340b 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java
@@ -1,7 +1,6 @@
 package cn.iocoder.yudao.adminserver.modules.pay.controller.app;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*;
 import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert;
 import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
@@ -10,12 +9,12 @@ import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantServ
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -28,20 +27,11 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 
-/**
- * 支付应用信息 controller 组件
- *
- * @author aquan
- */ // TODO @aquan:一般 controller 上就不写注释了,因为有 swagger 注解,不然就重复啦
 @Slf4j
 @Api(tags = "支付应用信息")
 @RestController
@@ -119,6 +109,7 @@ public class PayAppController {
         // 得到所有的应用编号,查出所有的通道
         Collection<Long> payAppIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getId);
         List<PayChannelDO> channels = channelService.getChannelListByAppIds(payAppIds);
+        Iterator<PayChannelDO> iterator = channels.iterator();
 
         // 得到所有的商户信息
         Collection<Long> merchantIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getMerchantId);
@@ -132,22 +123,15 @@ public class PayAppController {
             // 写入商户的数据
             respVO.setPayMerchant(PayAppConvert.INSTANCE.convert(deptMap.get(app.getMerchantId())));
             // 写入支付渠道信息的数据
-            // TODO @aquan:VO 里返回的 payChannel,是不是用一个 Set 集合就好了,里面是渠道的枚举值
-            PayAppPageItemRespVO.PayChannel payChannel = new PayAppPageItemRespVO.PayChannel();
-            channels.forEach(c -> {
-                if (c.getAppId().equals(app.getId())) {
-                    // 获取 set 方法
-                    String methodName = StrUtil.toCamelCase("set_" + c.getCode());
-                    try {
-                        // 根据 set 方法将值写入
-                        payChannel.getClass().getMethod(methodName, Integer.class)
-                                .invoke(payChannel, CommonStatusEnum.ENABLE.getStatus());
-                    } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
-                        log.error("[getAppPage]调用方法[{}]设置参数[{}]异常", c.getCode(), methodName);
-                    }
+            Set<String> channelCodes = new HashSet<>(PayChannelEnum.values().length);
+            while (iterator.hasNext()) {
+                PayChannelDO channelDO = iterator.next();
+                if (channelDO.getAppId().equals(app.getId())) {
+                    channelCodes.add(channelDO.getCode());
+                    iterator.remove();
                 }
-            });
-            respVO.setPayChannel(payChannel);
+            }
+            respVO.setChannelCodes(channelCodes);
             appList.add(respVO);
         });
 
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java
index 742ee62e3..6d8144afe 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java
@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
 
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -8,7 +7,13 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
 import java.util.Date;
+import java.util.Set;
 
+/**
+ * 支付应用信息分页查询 Response VO
+ *
+ * @author aquan
+ */
 @ApiModel(value = "支付应用信息分页查询 Response VO", description = "相比于支付信息,还会多出应用渠道的开关信息")
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -38,39 +43,8 @@ public class PayAppPageItemRespVO extends PayAppBaseVO {
 
     }
 
-    /**
-     * 支付渠道
-     */
-    private PayChannel payChannel;
+    @ApiModelProperty(value = "渠道编码集合", required = true, example = "alipay_pc,alipay_wap...")
+    private Set<String> channelCodes;
 
-    /**
-     * 支付渠道开通情况
-     * 1默认为未开通当前支付渠道,0为已开通支付渠道
-     */
-    @Data
-    @ApiModel("支付渠道")
-    public static class PayChannel {
-
-        @ApiModelProperty(value = "微信 JSAPI 支付", required = true, example = "1")
-        private Integer wxPub = CommonStatusEnum.DISABLE.getStatus();
-
-        @ApiModelProperty(value = "微信小程序支付", required = true, example = "1")
-        private Integer wxLite = CommonStatusEnum.DISABLE.getStatus();
-
-        @ApiModelProperty(value = "微信 App 支付", required = true, example = "1")
-        private Integer wxApp = CommonStatusEnum.DISABLE.getStatus();
-
-        @ApiModelProperty(value = "支付宝 PC 网站支付", required = true, example = "1")
-        private Integer alipayPc = CommonStatusEnum.DISABLE.getStatus();
-
-        @ApiModelProperty(value = "支付宝 Wap 网站支付", required = true, example = "1")
-        private Integer alipayWap = CommonStatusEnum.DISABLE.getStatus();
-
-        @ApiModelProperty(value = "支付宝App 支付", required = true, example = "1")
-        private Integer alipayApp = CommonStatusEnum.DISABLE.getStatus();
-
-        @ApiModelProperty(value = "支付宝扫码支付", required = true, example = "1")
-        private Integer alipayQr = CommonStatusEnum.DISABLE.getStatus();
-    }
 
 }
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java
index 54f8056c8..b581e99ff 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java
@@ -75,7 +75,7 @@ public class PayMerchantController {
         return success(PayMerchantConvert.INSTANCE.convert(merchant));
     }
 
-    @GetMapping("/list-name") // TODO @aquan:/list-name =》/list-by-name
+    @GetMapping("/list-by-name")
     @ApiOperation("根据商户名称获得支付商户信息列表")
     @ApiImplicitParam(name = "name", value = "商户名称", example = "芋道", dataTypeClass = Long.class)
     @PreAuthorize("@ss.hasPermission('pay:merchant:query')")
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java
index 80c206c2d..cb229fb11 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java
@@ -2,11 +2,10 @@ package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
 
 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
-import lombok.*;
-import java.util.*;
-import io.swagger.annotations.*;
-
 import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
 
 /**
  * 支付商户信息 Excel VO
@@ -29,7 +28,7 @@ public class PayMerchantExcelVO {
     private String shortName;
 
     @ExcelProperty(value = "开启状态",converter = DictConvert.class)
-    @DictFormat("pay_merchant_status")
+    @DictFormat("sys_common_status")
     private Integer status;
 
     @ExcelProperty("备注")
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java
index 8db4c1dd3..d85a9bcb1 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java
@@ -46,9 +46,6 @@ public class PayOrderDetailsRespVO extends PayOrderBaseVO {
         @ApiModelProperty(value = "支付订单号")
         private String no;
 
-        @ApiModelProperty(value = "支付渠道的额外参数")
-        private String channelExtras;
-
         @ApiModelProperty(value = "支付异步通知的内容")
         private String channelNotifyData;
     }
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java
index 87d75d597..c8421b035 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java
@@ -16,10 +16,6 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 public class PayRefundBaseVO {
 
-    @ApiModelProperty(value = "退款单请求号", required = true)
-    @NotNull(message = "退款单请求号不能为空")
-    private String reqNo;
-
     @ApiModelProperty(value = "商户编号", required = true)
     @NotNull(message = "商户编号不能为空")
     private Long merchantId;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java
index edc394a1a..be90f1a61 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java
@@ -22,9 +22,6 @@ public class PayRefundExcelVO {
     @ExcelProperty("商品名称")
     private String subject;
 
-    @ExcelProperty("退款单请求号")
-    private String reqNo;
-
     @ExcelProperty(value = "商户名称")
     private String merchantName;
 
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java
index 4e8cc6f6b..5a0e9c4e0 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java
@@ -13,9 +13,6 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 public class PayRefundExportReqVO {
 
-    @ApiModelProperty(value = "退款单请求号")
-    private String reqNo;
-
     @ApiModelProperty(value = "商户编号")
     private Long merchantId;
 
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java
index eddfddfee..103a7a27c 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java
@@ -18,9 +18,6 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class PayRefundPageReqVO extends PageParam {
 
-    @ApiModelProperty(value = "退款单请求号")
-    private String reqNo;
-
     @ApiModelProperty(value = "商户编号")
     private Long merchantId;
 
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java
index 7af6201a5..308298ac6 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java
@@ -8,8 +8,6 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.Mappings;
 import org.mapstruct.factory.Mappers;
 
 import java.math.BigDecimal;
@@ -44,10 +42,6 @@ public interface PayOrderConvert {
      * @param bean 订单扩展DO
      * @return 详细订单扩展 RespVO
      */
-    @Mappings({
-            @Mapping(target = "channelExtras"
-                    , expression = "java(bean.getChannelExtras() != null ? bean.getChannelExtras().toString():null)")
-    })
     PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean);
 
     List<PayOrderRespVO> convertList(List<PayOrderDO> list);
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java
index fe4d2a44d..8f5ee66d3 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java
@@ -62,7 +62,6 @@ public interface PayRefundConvert {
         PayRefundExcelVO payRefundExcelVO = new PayRefundExcelVO();
 
         payRefundExcelVO.setId(bean.getId());
-        payRefundExcelVO.setReqNo(bean.getReqNo());
         payRefundExcelVO.setTradeNo(bean.getTradeNo());
         payRefundExcelVO.setMerchantOrderId(bean.getMerchantOrderId());
         payRefundExcelVO.setMerchantRefundNo(bean.getMerchantRefundNo());
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java
index c73490f35..c6e3b38e9 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java
@@ -60,12 +60,24 @@ public interface PayAppMapper extends BaseMapperX<PayAppDO> {
 
     /**
      * 根据 商户 ID 查询支付应用信息
+     *
      * @param merchantId 商户 ID
      * @return 支付应用信息列表
      */
-    default List<PayAppDO> getListByMerchantId(String merchantId){
+    default List<PayAppDO> getListByMerchantId(String merchantId) {
         return selectList(new LambdaQueryWrapper<PayAppDO>()
                 .select(PayAppDO::getId, PayAppDO::getName)
                 .eq(PayAppDO::getMerchantId, merchantId));
     }
+
+    /**
+     * 根据商户号统计存在的支付应用数量
+     *
+     * @param merchantId 商户 ID
+     * @return 支付应用数量
+     */
+    default Long selectCount(Long merchantId) {
+        return selectCount(new LambdaQueryWrapper<PayAppDO>().eq(PayAppDO::getMerchantId, merchantId));
+    }
+
 }
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java
index f02cf53a7..54a4829a9 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java
@@ -55,8 +55,7 @@ public interface PayChannelMapper extends BaseMapperX<PayChannelDO> {
      * @param code       通道编码
      * @return 数量
      */
-    // TODO @aquan:Mapper 的操作,和 db 保持一致
-    default Integer getChannelCountByConditions(Long merchantId, Long appid, String code) {
+    default Integer selectCount(Long merchantId, Long appid, String code) {
         return this.selectCount(new QueryWrapper<PayChannelDO>().lambda()
                 .eq(PayChannelDO::getMerchantId, merchantId)
                 .eq(PayChannelDO::getAppId, appid)
@@ -71,7 +70,7 @@ public interface PayChannelMapper extends BaseMapperX<PayChannelDO> {
      * @param code       通道编码
      * @return 数量
      */
-    default PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code) {
+    default PayChannelDO selectOne(Long merchantId, Long appid, String code) {
         return this.selectOne((new QueryWrapper<PayChannelDO>().lambda()
                 .eq(PayChannelDO::getMerchantId, merchantId)
                 .eq(PayChannelDO::getAppId, appid)
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java
index 39fc71287..1fb9e870a 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java
@@ -62,4 +62,18 @@ public interface PayOrderMapper extends BaseMapperX<PayOrderDO> {
                 .in(PayOrderDO::getId, idList));
     }
 
+    /**
+     * 查询符合的订单数量
+     *
+     * @param appId 应用编号
+     * @param status 订单状态
+     * @return 条数
+     */
+    default Long selectCount(Long appId, Integer status) {
+
+        return selectCount(new LambdaQueryWrapper<PayOrderDO>()
+                .eq(PayOrderDO::getAppId, appId)
+                .in(PayOrderDO::getStatus, status));
+    }
+
 }
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java
index c5f9c632b..2fd3f2299 100755
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -20,7 +21,6 @@ public interface PayRefundMapper extends BaseMapperX<PayRefundDO> {
 
     default PageResult<PayRefundDO> selectPage(PayRefundPageReqVO reqVO) {
         return selectPage(reqVO, new QueryWrapperX<PayRefundDO>()
-                .likeIfPresent("req_no", reqVO.getReqNo())
                 .eqIfPresent("merchant_id", reqVO.getMerchantId())
                 .eqIfPresent("app_id", reqVO.getAppId())
                 .eqIfPresent("channel_code", reqVO.getChannelCode())
@@ -37,7 +37,6 @@ public interface PayRefundMapper extends BaseMapperX<PayRefundDO> {
                 .eqIfPresent("merchant_id", reqVO.getMerchantId())
                 .eqIfPresent("app_id", reqVO.getAppId())
                 .eqIfPresent("channel_code", reqVO.getChannelCode())
-                .likeIfPresent("req_no", reqVO.getReqNo())
                 .likeIfPresent("merchant_refund_no", reqVO.getMerchantRefundNo())
                 .eqIfPresent("type", reqVO.getType())
                 .eqIfPresent("status", reqVO.getStatus())
@@ -46,4 +45,17 @@ public interface PayRefundMapper extends BaseMapperX<PayRefundDO> {
                 .orderByDesc("id"));
     }
 
+    /**
+     * 查询符合的订单数量
+     *
+     * @param appId 应用编号
+     * @param status 订单状态
+     * @return 条数
+     */
+    default Long selectCount(Long appId, Integer status) {
+
+        return selectCount(new LambdaQueryWrapper<PayRefundDO>()
+                .eq(PayRefundDO::getAppId, appId)
+                .eq(PayRefundDO::getStatus, status));
+    }
 }
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java
index 4945a82b5..17b3e04e0 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java
@@ -9,9 +9,13 @@ import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateRe
 import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert;
 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper;
 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper;
+import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;
+import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;
 import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import com.google.common.annotations.VisibleForTesting;
@@ -21,7 +25,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.util.*;
 
-import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_APP_NOT_FOUND;
+import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 
@@ -36,9 +40,17 @@ public class PayAppServiceImpl implements PayAppService {
 
     @Resource
     private PayAppMapper appMapper;
+
     @Resource
     private PayMerchantMapper merchantMapper;
 
+    @Resource
+    private PayOrderMapper orderMapper;
+
+    @Resource
+    private PayRefundMapper refundMapper;
+
+
     @Override
     public Long createApp(PayAppCreateReqVO createReqVO) {
         // 插入
@@ -61,7 +73,8 @@ public class PayAppServiceImpl implements PayAppService {
     public void deleteApp(Long id) {
         // 校验存在
         this.validateAppExists(id);
-        // TODO aquan:校验是否存在进行中的支付单、退款单,如果是,则不允许删除。
+        this.validateOrderTransactionExist(id);
+
         // 删除
         appMapper.deleteById(id);
     }
@@ -157,4 +170,21 @@ public class PayAppServiceImpl implements PayAppService {
         }
     }
 
+    /**
+     * 验证是否存在交易中或者退款中等处理中状态的订单
+     *
+     * @param appId 应用 ID
+     */
+    private void validateOrderTransactionExist(Long appId) {
+        // 查看交易订单
+        if (orderMapper.selectCount(appId, PayOrderStatusEnum.WAITING.getStatus()) > 0) {
+            throw exception(PAY_APP_EXIST_TRANSACTION_ORDER_CANT_DELETE);
+        }
+        // 查看退款订单
+        if (refundMapper.selectCount(appId,   PayRefundStatusEnum.CREATE.getStatus()) > 0) {
+            throw exception(PAY_APP_EXIST_TRANSACTION_ORDER_CANT_DELETE);
+        }
+
+    }
+
 }
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java
index 7f96b34f5..6ba21f8c3 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.adminserver.modules.pay.service.channel.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelCreateReqVO;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO;
@@ -14,7 +15,6 @@ import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
@@ -46,8 +46,9 @@ public class PayChannelServiceImpl implements PayChannelService {
     public Long createChannel(PayChannelCreateReqVO reqVO) {
         // 断言是否有重复的
         PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode());
-        // TODO @aquan:这里会抛出系统异常,不会抛出 ServiceException
-        Assert.isNull(channelDO, CHANNEL_EXIST_SAME_CHANNEL_ERROR.getMsg());
+        if (ObjectUtil.isNotNull(channelDO)) {
+            throw exception(CHANNEL_EXIST_SAME_CHANNEL_ERROR);
+        }
 
         // 新增渠道
         PayChannelDO channel = PayChannelConvert.INSTANCE.convert(reqVO);
@@ -122,7 +123,7 @@ public class PayChannelServiceImpl implements PayChannelService {
      */
     @Override
     public Integer getChannelCountByConditions(Long merchantId, Long appid, String code) {
-        return this.channelMapper.getChannelCountByConditions(merchantId, appid, code);
+        return this.channelMapper.selectCount(merchantId, appid, code);
     }
 
     /**
@@ -135,7 +136,7 @@ public class PayChannelServiceImpl implements PayChannelService {
      */
     @Override
     public PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code) {
-        return this.channelMapper.getChannelByConditions(merchantId, appid, code);
+        return this.channelMapper.selectOne(merchantId, appid, code);
     }
 
     /**
@@ -146,11 +147,14 @@ public class PayChannelServiceImpl implements PayChannelService {
      */
     private void settingConfigAndCheckParam(PayChannelDO channel, String configStr) {
         // 得到这个渠道是微信的还是支付宝的
-        Class<? extends PayClientConfig> payClass = PayChannelEnum.findByCodeGetClass(channel.getCode());
-        Assert.notNull(payClass, CHANNEL_NOT_EXISTS.getMsg());
+        Class<? extends PayClientConfig> payClass = PayChannelEnum.getByCode(channel.getCode()).getConfigClass();
+        if (ObjectUtil.isNull(payClass)) {
+            throw exception(CHANNEL_NOT_EXISTS);
+        }
         PayClientConfig config = JSONUtil.toBean(configStr, payClass);
+
         // 验证参数
-        config.verifyParam(validator);
+        config.validate(validator);
         channel.setConfig(config);
     }
 
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java
index 9b082ffa1..b8e74dd75 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java
@@ -16,7 +16,7 @@ import java.util.Map;
 /**
  * 支付商户信息 Service 接口
  *
- * @author 芋艿 TODO @aquan:作者是你哈
+ * @author aquan
  */
 public interface PayMerchantService {
 
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java
index 9f2085854..b80132a1f 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java
@@ -1,11 +1,13 @@
 package cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO;
 import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO;
 import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert;
+import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper;
 import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper;
 import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
 import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
@@ -19,6 +21,7 @@ import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
 
+import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_EXIST_APP_CANT_DELETE;
 import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_NOT_EXISTS;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 
@@ -34,6 +37,9 @@ public class PayMerchantServiceImpl implements PayMerchantService {
     @Resource
     private PayMerchantMapper merchantMapper;
 
+    @Resource
+    private PayAppMapper appMapper;
+
     @Override
     public Long createMerchant(PayMerchantCreateReqVO createReqVO) {
         // 插入
@@ -55,19 +61,13 @@ public class PayMerchantServiceImpl implements PayMerchantService {
 
     @Override
     public void deleteMerchant(Long id) {
-        // 校验存在
+        // 校验
         this.validateMerchantExists(id);
-        // TODO @aquan:需要校验 PayApp 是否都在。如果在的情况下,不允许删除
+        this.validateAppExists(id);
         // 删除
         merchantMapper.deleteById(id);
     }
 
-    private void validateMerchantExists(Long id) {
-        if (merchantMapper.selectById(id) == null) {
-            throw exception(PAY_MERCHANT_NOT_EXISTS);
-        }
-    }
-
     @Override
     public PayMerchantDO getMerchant(Long id) {
         return merchantMapper.selectById(id);
@@ -88,13 +88,6 @@ public class PayMerchantServiceImpl implements PayMerchantService {
         return merchantMapper.selectList(exportReqVO);
     }
 
-    // TODO @aquan:接口上已经有注释,这里不用在有啦
-    /**
-     * 修改商户状态
-     *
-     * @param id     商户编号
-     * @param status 状态
-     */
     @Override
     public void updateMerchantStatus(Long id, Integer status) {
         // 校验商户存在
@@ -106,21 +99,11 @@ public class PayMerchantServiceImpl implements PayMerchantService {
         merchantMapper.updateById(merchant);
     }
 
-    /**
-     * 根据商户名称模糊查询商户集合
-     *
-     * @param merchantName 商户名称
-     * @return 商户集合
-     */
     @Override
     public List<PayMerchantDO> getMerchantListByName(String merchantName) {
         return this.merchantMapper.getMerchantListByName(merchantName);
     }
 
-    /**
-     * 检查商户是否存在
-     * @param id 商户编号
-     */
     @VisibleForTesting
     public void checkMerchantExists(Long id) {
         if (id == null) {
@@ -132,6 +115,27 @@ public class PayMerchantServiceImpl implements PayMerchantService {
         }
     }
 
+    /**
+     * 校验商户是否存在
+     *
+     * @param id 商户 ID
+     */
+    private void validateMerchantExists(Long id) {
+        if (ObjectUtil.isNull(merchantMapper.selectById(id))) {
+            throw exception(PAY_MERCHANT_NOT_EXISTS);
+        }
+    }
+
+    /**
+     * 校验商户是否还存在支付应用
+     *
+     * @param id 商户ID
+     */
+    private void validateAppExists(Long id) {
+        if (appMapper.selectCount(id) > 0) {
+            throw exception(PAY_MERCHANT_EXIST_APP_CANT_DELETE);
+        }
+    }
 
     // TODO @芋艿:后续增加下合适的算法
     /**
@@ -139,8 +143,8 @@ public class PayMerchantServiceImpl implements PayMerchantService {
      *
      * @return 商户号
      */
-    private String generateMerchantNo(){
-       return  "M" + DateUtil.format(LocalDateTime.now(),"yyyyMMddHHmmssSSS");
+    private String generateMerchantNo() {
+        return "M" + DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmssSSS");
     }
 
 }
diff --git a/yudao-admin-server/src/main/resources/application.yaml b/yudao-admin-server/src/main/resources/application.yaml
index 7d54df9ca..8770c06bd 100644
--- a/yudao-admin-server/src/main/resources/application.yaml
+++ b/yudao-admin-server/src/main/resources/application.yaml
@@ -75,6 +75,4 @@ yudao:
       - cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants
   tenant: # 多租户相关配置项
     tables: # 配置需要开启多租户的表;如果实体已经继承 TenantBaseDO 类,则无需重复配置
-  pay:
-    payReturnUrl: http://127.0.0.1 # TODO @aquan:这个变量,配置到 dev 或者 local 里,不同环境有差别哈
 debug: false
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java
index d60c6fc59..2741144e2 100755
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java
@@ -72,8 +72,6 @@ public class PayRefundServiceTest extends BaseDbUnitTest {
             o.setUpdateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 35));
         });
         refundMapper.insert(dbRefund);
-        // 测试 reqNo 不匹配
-        refundMapper.insert(cloneIgnoreId(dbRefund, o -> o.setReqNo("RF1111112")));
         // 测试 merchantId 不匹配
         refundMapper.insert(cloneIgnoreId(dbRefund, o -> o.setMerchantId(2L)));
         // 测试 appId 不匹配
@@ -94,7 +92,6 @@ public class PayRefundServiceTest extends BaseDbUnitTest {
                 o.setCreateTime(DateUtils.buildTime(2022, 1, 1, 10, 10, 10))));
         // 准备参数
         PayRefundPageReqVO reqVO = new PayRefundPageReqVO();
-        reqVO.setReqNo("RF0000001");
         reqVO.setMerchantId(1L);
         reqVO.setAppId(1L);
         reqVO.setChannelCode(PayChannelEnum.WX_PUB.getCode());
@@ -147,8 +144,6 @@ public class PayRefundServiceTest extends BaseDbUnitTest {
             o.setUpdateTime(DateUtils.buildTime(2021, 1, 1, 10, 10, 35));
         });
         refundMapper.insert(dbRefund);
-        // 测试 reqNo 不匹配
-        refundMapper.insert(cloneIgnoreId(dbRefund, o -> o.setReqNo("RF1111112")));
         // 测试 merchantId 不匹配
         refundMapper.insert(cloneIgnoreId(dbRefund, o -> o.setMerchantId(2L)));
         // 测试 appId 不匹配
@@ -170,7 +165,6 @@ public class PayRefundServiceTest extends BaseDbUnitTest {
 
         // 准备参数
         PayRefundExportReqVO reqVO = new PayRefundExportReqVO();
-        reqVO.setReqNo("RF0000001");
         reqVO.setMerchantId(1L);
         reqVO.setAppId(1L);
         reqVO.setChannelCode(PayChannelEnum.WX_PUB.getCode());
diff --git a/yudao-admin-ui/src/api/pay/merchant.js b/yudao-admin-ui/src/api/pay/merchant.js
index 1c6d7e20a..51b604ee2 100644
--- a/yudao-admin-ui/src/api/pay/merchant.js
+++ b/yudao-admin-ui/src/api/pay/merchant.js
@@ -49,7 +49,7 @@ export function getMerchant(id) {
 // 根据商户名称搜索商户列表
 export function getMerchantListByName(name) {
   return request({
-    url: '/pay/merchant/list-name',
+    url: '/pay/merchant/list-by-name',
     params:{
       name:name
     },
diff --git a/yudao-admin-ui/src/utils/dict.js b/yudao-admin-ui/src/utils/dict.js
index dae5d4916..2589fbb39 100644
--- a/yudao-admin-ui/src/utils/dict.js
+++ b/yudao-admin-ui/src/utils/dict.js
@@ -34,12 +34,6 @@ export const DICT_TYPE = {
   OA_LEAVE_STATUS: 'oa_leave_status',
   OA_LEAVE_TYPE: 'oa_leave_type',
 
-  // 商户状态
-  PAY_MERCHANT_STATUS: 'pay_merchant_status', // TODO @aquan:一般使用 COMMON_RESULT 即可。保持数值一致,以后加更多状态的时候,在单独数据字典
-  // 应用状态
-  PAY_APP_STATUS: 'pay_app_status',
-  // 渠道状态
-  PAY_CHANNEL_STATUS: 'pay_channel_status',
   // 微信渠道版本
   PAY_CHANNEL_WECHAT_VERSION:'pay_channel_wechat_version',
   // 支付渠道支付宝算法类型
diff --git a/yudao-admin-ui/src/views/pay/app/components/aliPayChannelForm.vue b/yudao-admin-ui/src/views/pay/app/components/aliPayChannelForm.vue
index 29587aba3..58d40e768 100644
--- a/yudao-admin-ui/src/views/pay/app/components/aliPayChannelForm.vue
+++ b/yudao-admin-ui/src/views/pay/app/components/aliPayChannelForm.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-dialog :visible.sync="transferParam.aliPayOpen" @closed="close" append-to-body width="800px">
+    <el-dialog :visible.sync="transferParam.aliPayOpen" :title="title" @closed="close" append-to-body width="800px">
       <el-form ref="aliPayForm" :model="form" :rules="rules" size="medium" label-width="100px"
                v-loading="transferParam.loading">
         <el-form-item label-width="180px" label="渠道费率" prop="feeRate">
@@ -172,6 +172,7 @@ export default {
   },
   data() {
     return {
+      title:'',
       form: JSON.parse(JSON.stringify(defaultForm)),
       rules: {
         feeRate: [{
@@ -232,7 +233,7 @@ export default {
       },
       fileAccept: ".crt",
       // 渠道状态 数据字典
-      statusDictDatas: getDictDatas(DICT_TYPE.PAY_CHANNEL_STATUS),
+      statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS),
       // 支付宝加密方式
       aliPaySignTypeDatas: getDictDatas(DICT_TYPE.PAY_CHANNEL_ALIPAY_SIGN_TYPE),
       // 版本状态 数据字典
@@ -251,7 +252,10 @@ export default {
           this.form.merchantId = newVal.payMerchant.id;
           // 只有在初次进来为编辑 并且为加载中的时候才回去请求数据
           if (newVal.edit === true && newVal.loading) {
+            this.title = "编辑支付渠道";
             this.init();
+          } else {
+            this.title = "创建支付渠道";
           }
         }
       }
diff --git a/yudao-admin-ui/src/views/pay/app/components/wechatChannelForm.vue b/yudao-admin-ui/src/views/pay/app/components/wechatChannelForm.vue
index 5edd58d3c..3ca70c3bd 100644
--- a/yudao-admin-ui/src/views/pay/app/components/wechatChannelForm.vue
+++ b/yudao-admin-ui/src/views/pay/app/components/wechatChannelForm.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-dialog :visible.sync="transferParam.wechatOpen" @close="close" append-to-body width="800px">
+    <el-dialog :visible.sync="transferParam.wechatOpen" :title="title" @close="close" append-to-body width="800px">
       <el-form ref="wechatJsApiForm" :model="form" :rules="rules" size="medium" label-width="100px"
                v-loading="transferParam.loading">
         <el-form-item label-width="180px" label="渠道费率" prop="feeRate">
@@ -134,6 +134,7 @@ export default {
   },
   data() {
     return {
+      title:'',
       form: JSON.parse(JSON.stringify(defaultForm)),
       rules: {
         feeRate: [{
@@ -188,7 +189,7 @@ export default {
       },
       fileAccept: ".pem",
       // 渠道状态 数据字典
-      statusDictDatas: getDictDatas(DICT_TYPE.PAY_CHANNEL_STATUS),
+      statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS),
       versionDictDatas: getDictDatas(DICT_TYPE.PAY_CHANNEL_WECHAT_VERSION),
     }
   },
@@ -202,7 +203,10 @@ export default {
           this.form.merchantId = newVal.payMerchant.id;
           // 只有在初次进来为编辑 并且为加载中的时候才回去请求数据
           if (newVal.edit && newVal.loading) {
+            this.title = "编辑支付渠道";
             this.init();
+          } else {
+            this.title = "创建支付渠道";
           }
         }
       }
diff --git a/yudao-admin-ui/src/views/pay/app/index.vue b/yudao-admin-ui/src/views/pay/app/index.vue
index 4e9530f0d..6b1e614fb 100644
--- a/yudao-admin-ui/src/views/pay/app/index.vue
+++ b/yudao-admin-ui/src/views/pay/app/index.vue
@@ -57,59 +57,49 @@
       <el-table-column label="支付宝配置" align="center">
         <el-table-column :label="payChannelEnum.ALIPAY_APP.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayApp === sysCommonStatusEnum.ENABLE">
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.ALIPAY_APP.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayApp === sysCommonStatusEnum.DISABLE">
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)">
             </el-button>
           </template>
         </el-table-column>
         <el-table-column :label="payChannelEnum.ALIPAY_PC.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_PC.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayPc === sysCommonStatusEnum.ENABLE">
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.ALIPAY_PC.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_PC.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayPc === sysCommonStatusEnum.DISABLE">
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_PC.code,payType.ALIPAY)">
             </el-button>
           </template>
         </el-table-column>
         <el-table-column :label="payChannelEnum.ALIPAY_WAP.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_WAP.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayWap === sysCommonStatusEnum.ENABLE">
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.ALIPAY_WAP.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_WAP.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayWap === sysCommonStatusEnum.DISABLE">
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_WAP.code,payType.ALIPAY)">
             </el-button>
           </template>
         </el-table-column>
         <el-table-column :label="payChannelEnum.ALIPAY_QR.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_QR.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayQr === sysCommonStatusEnum.ENABLE">
-
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.ALIPAY_QR.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.ALIPAY)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_QR.code,payType.ALIPAY)"
-              v-if="scope.row.payChannel.alipayQr === sysCommonStatusEnum.DISABLE">
-
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.ALIPAY_QR.code,payType.ALIPAY)">
             </el-button>
           </template>
         </el-table-column>
@@ -117,43 +107,37 @@
       <el-table-column label="微信配置" align="center">
         <el-table-column :label="payChannelEnum.WX_LITE.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.WX_LITE.code,payType.WECHAT)"
-              v-if="scope.row.payChannel.wxLite === sysCommonStatusEnum.ENABLE">
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.WX_LITE.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.WECHAT)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.WX_LITE.code,payType.WECHAT)"
-              v-if="scope.row.payChannel.wxLite === sysCommonStatusEnum.DISABLE">
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.WX_LITE.code,payType.WECHAT)">
             </el-button>
           </template>
         </el-table-column>
         <el-table-column :label="payChannelEnum.WX_PUB.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.WX_PUB.code,payType.WECHAT)"
-              v-if="scope.row.payChannel.wxPub === sysCommonStatusEnum.ENABLE">
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.WX_PUB.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.WECHAT)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.WX_PUB.code,payType.WECHAT)"
-              v-if="scope.row.payChannel.wxPub === sysCommonStatusEnum.DISABLE">
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.WX_PUB.code,payType.WECHAT)">
             </el-button>
           </template>
         </el-table-column>
         <el-table-column :label="payChannelEnum.WX_APP.name" align="center">
           <template slot-scope="scope">
-            <el-button
-              type="success" icon="el-icon-check" circle
-              @click="handleUpdateChannel(scope.row,payChannelEnum.WX_APP.code,payType.WECHAT)"
-              v-if="scope.row.payChannel.wxApp === sysCommonStatusEnum.ENABLE">
+            <el-button type="success" icon="el-icon-check" circle
+                       v-if="judgeChannelExist(scope.row.channelCodes,payChannelEnum.WX_APP.code)"
+                       @click="handleUpdateChannel(scope.row,payChannelEnum.ALIPAY_APP.code,payType.WECHAT)">
             </el-button>
-            <el-button
-              type="danger" icon="el-icon-close" circle
-              @click="handleCreateChannel(scope.row,payChannelEnum.WX_APP.code,payType.WECHAT)"
-              v-if="scope.row.payChannel.wxApp === sysCommonStatusEnum.DISABLE">
+            <el-button v-else
+                       type="danger" icon="el-icon-close" circle
+                       @click="handleCreateChannel(scope.row,payChannelEnum.WX_APP.code,payType.WECHAT)">
             </el-button>
           </template>
         </el-table-column>
@@ -276,7 +260,7 @@ export default {
         merchantId: [{required: true, message: "商户编号不能为空", trigger: "blur"}],
       },
       // 数据字典
-      statusDictDatas: getDictDatas(DICT_TYPE.PAY_APP_STATUS),
+      statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS),
       sysCommonStatusEnum: SysCommonStatusEnum,
       // 支付渠道枚举
       payChannelEnum: PayChannelEnum,
@@ -322,6 +306,7 @@ export default {
       // 执行查询
       getAppPage(params).then(response => {
         this.list = response.data.list;
+        console.log(this.list);
         this.total = response.data.total;
         this.loading = false;
       });
@@ -422,7 +407,12 @@ export default {
       }).then(() => {
         this.getList();
         this.msgSuccess("删除成功");
-      })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -486,6 +476,14 @@ export default {
       this.channelParam.payCode = payCode;
       this.channelParam.payMerchant = row.payMerchant;
     },
+    /**
+     * 根据渠道编码判断渠道列表中是否存在
+     * @param channels 渠道列表
+     * @param channelCode 渠道编码
+     */
+    judgeChannelExist(channels, channelCode) {
+      return channels.indexOf(channelCode) !== -1;
+    },
     refreshTable() {
       this.getList();
     }
diff --git a/yudao-admin-ui/src/views/pay/merchant/index.vue b/yudao-admin-ui/src/views/pay/merchant/index.vue
index bd05f965f..6aa597357 100644
--- a/yudao-admin-ui/src/views/pay/merchant/index.vue
+++ b/yudao-admin-ui/src/views/pay/merchant/index.vue
@@ -154,8 +154,8 @@ export default {
         shortName: [{ required: true, message: "商户简称不能为空", trigger: "blur" }],
         status: [{ required: true, message: "开启状态不能为空", trigger: "blur" }],
       },
-      // 数据字典
-      statusDictDatas: getDictDatas(DICT_TYPE.PAY_MERCHANT_STATUS)
+      // 商户状态数据字典
+      statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS)
     };
   },
   created() {
diff --git a/yudao-admin-ui/src/views/pay/order/index.vue b/yudao-admin-ui/src/views/pay/order/index.vue
index 25dfd6e13..cb77d1dd2 100755
--- a/yudao-admin-ui/src/views/pay/order/index.vue
+++ b/yudao-admin-ui/src/views/pay/order/index.vue
@@ -236,9 +236,6 @@
         <el-descriptions-item label="商品描述">
           {{ orderDetail.body }}
         </el-descriptions-item>
-        <el-descriptions-item label="支付通道额外扩展参数">
-          {{ orderDetail.payOrderExtension.channelExtras }}
-        </el-descriptions-item>
         <el-descriptions-item label="支付通道异步回调内容">
           {{ orderDetail.payOrderExtension.channelNotifyData }}
         </el-descriptions-item>
@@ -278,7 +275,6 @@ const defaultOrderDetail = {
   notifyTime: '',
   expireTime: '',
   payOrderExtension: {
-    channelExtras: '',
     channelNotifyData: '',
     no: ''
   }
diff --git a/yudao-admin-ui/src/views/pay/refund/index.vue b/yudao-admin-ui/src/views/pay/refund/index.vue
index 7289a0703..ca9966a3c 100755
--- a/yudao-admin-ui/src/views/pay/refund/index.vue
+++ b/yudao-admin-ui/src/views/pay/refund/index.vue
@@ -43,20 +43,17 @@
           <el-option v-for="dict in payChannelCodeDictDatum" :key="dict.value" :label="dict.label" :value="dict.value"/>
         </el-select>
       </el-form-item>
-      <el-form-item label="退款单号" prop="reqNo">
-        <el-input v-model="queryParams.reqNo" placeholder="请输入退款单请求号" clearable size="small"
-                  @keyup.enter.native="handleQuery"/>
-      </el-form-item>
-      <el-form-item label="商户退款订单号" prop="merchantRefundNo">
-        <el-input v-model="queryParams.merchantRefundNo" placeholder="请输入商户退款订单号" clearable size="small"
-                  @keyup.enter.native="handleQuery"/>
-      </el-form-item>
       <el-form-item label="退款类型" prop="type">
         <el-select v-model="queryParams.type" placeholder="请选择退款类型" clearable size="small">
           <el-option v-for="dict in payRefundOrderTypeDictDatum" :key="parseInt(dict.value)"
                      :label="dict.label" :value="parseInt(dict.value)"/>
         </el-select>
       </el-form-item>
+      <el-form-item label="商户退款订单号" prop="merchantRefundNo">
+        <el-input v-model="queryParams.merchantRefundNo" placeholder="请输入商户退款订单号" clearable size="small"
+                  @keyup.enter.native="handleQuery"/>
+      </el-form-item>
+
       <el-form-item label="退款状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择退款状态" clearable size="small">
           <el-option v-for="dict in payRefundOrderDictDatum" :key="parseInt(dict.value)"
@@ -112,15 +109,15 @@
       </el-table-column>
       <!--      <el-table-column label="交易订单号" align="center" prop="tradeNo" width="140"/>-->
       <!--      <el-table-column label="商户订单编号" align="center" prop="merchantOrderId" width="140"/>-->
-      <el-table-column label="退款订单号" align="left" width="230">
+      <el-table-column label="商户订单号" align="left" width="230">
         <template v-slot="scope">
           <p class="order-font">
             <el-tag size="mini">退款</el-tag>
-            {{ scope.row.reqNo }}
+            {{ scope.row.merchantRefundNo }}
           </p>
           <p class="order-font">
-            <el-tag size="mini" type="success">商户</el-tag>
-            {{ scope.row.merchantRefundNo }}
+            <el-tag type="success">交易</el-tag>
+            {{ scope.row.merchantOrderId }}
           </p>
         </template>
       </el-table-column>
@@ -202,9 +199,6 @@
         <el-descriptions-item label="商户退款单号">
           <el-tag  size="mini">{{ refundDetail.merchantRefundNo }}</el-tag>
         </el-descriptions-item>
-        <el-descriptions-item label="商户退款请求单号" size="mini">
-          <el-tag type="success" size="mini">{{ refundDetail.reqNo }}</el-tag>
-        </el-descriptions-item>
         <el-descriptions-item label="商户订单号">{{ refundDetail.merchantOrderId }}</el-descriptions-item>
         <el-descriptions-item label="交易订单号">{{ refundDetail.tradeNo }}</el-descriptions-item>
       </el-descriptions>
@@ -299,7 +293,6 @@ const defaultRefundDetail = {
   payAmount: null,
   reason: '',
   refundAmount: null,
-  reqNo: '',
   status: null,
   subject: '',
   successTime: null,
@@ -333,7 +326,6 @@ export default {
       queryParams: {
         pageNo: 1,
         pageSize: 10,
-        reqNo: null,
         merchantId: null,
         appId: null,
         channelId: null,
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java
index 9eefa3f87..f5133ad05 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java
@@ -14,6 +14,7 @@ public interface PayErrorCodeCoreConstants {
      */
     ErrorCode PAY_APP_NOT_FOUND = new ErrorCode(1007000000, "App 不存在");
     ErrorCode PAY_APP_IS_DISABLE = new ErrorCode(1007000002, "App 已经被禁用");
+    ErrorCode PAY_APP_EXIST_TRANSACTION_ORDER_CANT_DELETE =  new ErrorCode(1007000003, "支付应用存在交易中的订单,无法删除");
 
     /**
      * ========== CHANNEL 模块 1-007-001-000 ==========
@@ -54,6 +55,7 @@ public interface PayErrorCodeCoreConstants {
      * ========== 支付商户信息 1-007-004-000 ==========
      */
     ErrorCode PAY_MERCHANT_NOT_EXISTS = new ErrorCode(1007004000, "支付商户信息不存在");
+    ErrorCode PAY_MERCHANT_EXIST_APP_CANT_DELETE = new ErrorCode(1007004001, "支付商户存在支付应用,无法删除");
 
 
 
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java
index bd44dbad6..f14893c4e 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java
@@ -1,10 +1,11 @@
 package cn.iocoder.yudao.framework.pay.core.client;
 
-import cn.hutool.json.JSONUtil;
-import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
 import javax.validation.Validator;
+import java.util.Set;
 
 /**
  * 支付客户端的配置,本质是支付渠道的配置
@@ -19,8 +20,22 @@ import javax.validation.Validator;
 public interface PayClientConfig {
 
     /**
-     * 验证配置参数是否正确
+     * 配置验证参数是
+     *
+     * @param validator 校验对象
+     * @return 配置好的验证参数
+     */
+    Set<ConstraintViolation<PayClientConfig>> verifyParam(Validator validator);
+
+    /**
+     * 参数校验
+     *
      * @param validator 校验对象
      */
-    void verifyParam(Validator validator);
+    default void validate(Validator validator) {
+        Set<ConstraintViolation<PayClientConfig>> violations = verifyParam(validator);
+        if (!violations.isEmpty()) {
+            throw new ConstraintViolationException(violations);
+        }
+    }
 }
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
index b90efad05..bbe96c146 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
@@ -2,17 +2,12 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
 
 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
 import lombok.Data;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.Assert;
 
-import javax.annotation.Resource;
 import javax.validation.ConstraintViolation;
 import javax.validation.Validator;
-import javax.validation.constraints.AssertTrue;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 // TODO 芋艿:参数校验
 
@@ -114,18 +109,9 @@ public class AlipayPayClientConfig implements PayClientConfig {
     public interface ModeCertificate {
     }
 
-    /**
-     * 验证配置参数是否正确
-     * @param validator 校验对象
-     */
     @Override
-    public void verifyParam(Validator validator) {
-        // 手动调用validate进行验证
-        Set<ConstraintViolation<AlipayPayClientConfig>> validate = validator.validate(this,
+    public Set<ConstraintViolation<PayClientConfig>> verifyParam(Validator validator) {
+        return validator.validate(this,
                 MODE_PUBLIC_KEY.equals(this.getMode()) ? ModePublicKey.class : ModeCertificate.class);
-
-        // 断言没有异常
-        Assert.isTrue(validate.isEmpty(), validate.stream().map(ConstraintViolation::getMessage)
-                .collect(Collectors.joining(",")));
     }
 }
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java
index 692148f73..79ebbf348 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
 import cn.hutool.core.io.IoUtil;
 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
 import lombok.Data;
-import org.springframework.util.Assert;
 
 import javax.validation.ConstraintViolation;
 import javax.validation.Validator;
@@ -11,7 +10,6 @@ import javax.validation.constraints.NotBlank;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 // TODO 芋艿:参数校验
 
@@ -101,19 +99,9 @@ public class WXPayClientConfig implements PayClientConfig {
     public interface V3 {
     }
 
-    // TODO @aquan:1)已经有注释,不用重复注释;2)方法名改成 validate,比较适合 validator;3)断言是否有异常,可以封一个 ConstraintViolationException 异常
-    /**
-     * 验证配置参数是否正确
-     * @param validator 校验对象
-     */
     @Override
-    public void verifyParam(Validator validator) {
-        // 手动调用validate进行验证
-        Set<ConstraintViolation<PayClientConfig>> validate = validator.validate(this,
-                this.getApiVersion().equals(API_VERSION_V2) ? V2.class : V3.class);
-        // 断言没有异常
-        Assert.isTrue(validate.isEmpty(), validate.stream().map(ConstraintViolation::getMessage)
-                .collect(Collectors.joining(",")));
+    public Set<ConstraintViolation<PayClientConfig>> verifyParam(Validator validator) {
+        return validator.validate(this, this.getApiVersion().equals(API_VERSION_V2) ? V2.class : V3.class);
     }
 
     public static void main(String[] args) throws FileNotFoundException {
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java
index 3c5256495..418676fca 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java
@@ -17,18 +17,21 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum PayChannelEnum {
 
-    WX_PUB("wx_pub", "微信 JSAPI 支付"), // 公众号的网页
-    WX_LITE("wx_lite","微信小程序支付"),
-    WX_APP("wx_app", "微信 App 支付"),
+    /**
+     * 公众号网页
+     */
+    WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class),
+    WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class),
+    WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class),
 
-    ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付"),
-    ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付"),
-    ALIPAY_APP("alipay_app", "支付宝App 支付"),
-    ALIPAY_QR("alipay_qr", "支付宝扫码支付");
+    ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付", AlipayPayClientConfig.class),
+    ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付", AlipayPayClientConfig.class),
+    ALIPAY_APP("alipay_app", "支付宝App 支付", AlipayPayClientConfig.class),
+    ALIPAY_QR("alipay_qr", "支付宝扫码支付", AlipayPayClientConfig.class);
 
     /**
      * 编码
-     *
+     * <p>
      * 参考 https://www.pingxx.com/api/支付渠道属性值.html
      */
     private String code;
@@ -37,6 +40,11 @@ public enum PayChannelEnum {
      */
     private String name;
 
+    /**
+     * 配置类
+     */
+    private Class<? extends PayClientConfig> configClass;
+
     /**
      * 微信支付
      */
@@ -50,27 +58,6 @@ public enum PayChannelEnum {
     public static PayChannelEnum getByCode(String code) {
         return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values());
     }
-
-    // TODO @aquan:加一个 configClass 字段,不用 switch 的方式哈。不然新增一个支付方式,需要改的方法有点多
-    /**
-     * 根据编码得到支付类
-     *
-     * @param code 编码
-     * @return 支付配置类
-     */
-    public static Class<? extends PayClientConfig> findByCodeGetClass(String code) {
-        switch (PayChannelEnum.getByCode(code)){
-            case WX_PUB:
-            case WX_LITE:
-            case WX_APP:
-                return WXPayClientConfig.class;
-            case ALIPAY_PC:
-            case ALIPAY_WAP:
-            case ALIPAY_APP:
-            case ALIPAY_QR:
-                return AlipayPayClientConfig.class;
-        }
-        return null;
-    }
+    
 
 }