新增收款商户、商户池轮询、微信授权配置独立管理;三类新支付 (C端套餐购买、C端资产钱包充值、代理在线预存款充值)无条件 经商户池选择并冻结路由,无旧综合配置回退。merchant_id 为空 历史支付继续按 payment_config_id 双读。凭证版本化加载与 ID+版本缓存保证轮换一致性。删除商户池新支付创建开关及全部 引用。
This commit is contained in:
218
internal/handler/admin/payment_merchant.go
Normal file
218
internal/handler/admin/payment_merchant.go
Normal file
@@ -0,0 +1,218 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
|
||||
merchantpayment "github.com/break/junhong_cmp_fiber/internal/application/merchantpayment"
|
||||
"github.com/break/junhong_cmp_fiber/internal/model/dto"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/errors"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/response"
|
||||
)
|
||||
|
||||
// PaymentMerchantHandler 处理特权商户与商户池配置请求。
|
||||
type PaymentMerchantHandler struct {
|
||||
service *merchantpayment.ManagementService
|
||||
}
|
||||
|
||||
// NewPaymentMerchantHandler 创建商户池管理处理器。
|
||||
func NewPaymentMerchantHandler(service *merchantpayment.ManagementService) *PaymentMerchantHandler {
|
||||
return &PaymentMerchantHandler{service: service}
|
||||
}
|
||||
func pathID(c *fiber.Ctx) (uint, error) {
|
||||
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
|
||||
if err != nil || id == 0 {
|
||||
return 0, errors.New(errors.CodeInvalidParam, "无效的路径ID")
|
||||
}
|
||||
return uint(id), nil
|
||||
}
|
||||
|
||||
// CreateMerchant 创建支付商户。
|
||||
// POST /api/admin/payment-merchants
|
||||
func (h *PaymentMerchantHandler) CreateMerchant(c *fiber.Ctx) error {
|
||||
var r dto.PaymentMerchantRequest
|
||||
if err := c.BodyParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, err := h.service.CreateMerchant(c.UserContext(), r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// ListMerchants 分页查询支付商户。
|
||||
// GET /api/admin/payment-merchants
|
||||
func (h *PaymentMerchantHandler) ListMerchants(c *fiber.Ctx) error {
|
||||
var r dto.PaymentMerchantListRequest
|
||||
if err := c.QueryParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, n, err := h.service.ListMerchants(c.UserContext(), r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.SuccessWithPagination(c, v, n, r.Page, r.PageSize)
|
||||
}
|
||||
|
||||
// GetMerchant 查询支付商户详情。
|
||||
// GET /api/admin/payment-merchants/:id
|
||||
func (h *PaymentMerchantHandler) GetMerchant(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
v, err := h.service.GetMerchant(c.UserContext(), id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// UpdateMerchant 更新支付商户。
|
||||
// PUT /api/admin/payment-merchants/:id
|
||||
func (h *PaymentMerchantHandler) UpdateMerchant(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var r dto.PaymentMerchantUpdateRequest
|
||||
if err := c.BodyParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, err := h.service.UpdateMerchant(c.UserContext(), id, r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// DeleteMerchant 删除支付商户。
|
||||
// DELETE /api/admin/payment-merchants/:id
|
||||
func (h *PaymentMerchantHandler) DeleteMerchant(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var r dto.PaymentMerchantDeleteRequest
|
||||
if err := c.BodyParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
if err := h.service.DeleteMerchant(c.UserContext(), id, r.Confirm); err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, nil)
|
||||
}
|
||||
|
||||
// CreatePool 创建商户池。
|
||||
// POST /api/admin/payment-merchant-pools
|
||||
func (h *PaymentMerchantHandler) CreatePool(c *fiber.Ctx) error {
|
||||
var r dto.PaymentMerchantPoolRequest
|
||||
if err := c.BodyParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, err := h.service.SavePool(c.UserContext(), 0, r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// UpdatePool 更新商户池。
|
||||
// PUT /api/admin/payment-merchant-pools/:id
|
||||
func (h *PaymentMerchantHandler) UpdatePool(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var r dto.PaymentMerchantPoolRequest
|
||||
if err := c.BodyParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, err := h.service.SavePool(c.UserContext(), id, r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// EnablePool 启用商户池。
|
||||
// POST /api/admin/payment-merchant-pools/:id/enable
|
||||
func (h *PaymentMerchantHandler) EnablePool(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
result, err := h.service.SetPoolEnabled(c.UserContext(), id, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, result)
|
||||
}
|
||||
|
||||
// DisablePool 停用商户池。
|
||||
// POST /api/admin/payment-merchant-pools/:id/disable
|
||||
func (h *PaymentMerchantHandler) DisablePool(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
result, err := h.service.SetPoolEnabled(c.UserContext(), id, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, result)
|
||||
}
|
||||
|
||||
// GetAuthorization 获取微信授权配置。
|
||||
// GET /api/admin/wechat-authorizations
|
||||
func (h *PaymentMerchantHandler) GetAuthorization(c *fiber.Ctx) error {
|
||||
v, err := h.service.GetAuthorization(c.UserContext())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// ListPools 分页查询商户池。
|
||||
// GET /api/admin/payment-merchant-pools
|
||||
func (h *PaymentMerchantHandler) ListPools(c *fiber.Ctx) error {
|
||||
var r dto.PaymentMerchantPoolListRequest
|
||||
if err := c.QueryParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, total, err := h.service.ListPools(c.UserContext(), r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.SuccessWithPagination(c, v, total, r.Page, r.PageSize)
|
||||
}
|
||||
|
||||
// GetPool 查询商户池详情。
|
||||
// GET /api/admin/payment-merchant-pools/:id
|
||||
func (h *PaymentMerchantHandler) GetPool(c *fiber.Ctx) error {
|
||||
id, err := pathID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
v, err := h.service.GetPool(c.UserContext(), id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
|
||||
// SaveAuthorization 保存微信授权配置。
|
||||
// PUT /api/admin/wechat-authorizations/current
|
||||
func (h *PaymentMerchantHandler) SaveAuthorization(c *fiber.Ctx) error {
|
||||
var r dto.WechatAuthorizationRequest
|
||||
if err := c.BodyParser(&r); err != nil {
|
||||
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
||||
}
|
||||
v, err := h.service.SaveAuthorization(c.UserContext(), r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return response.Success(c, v)
|
||||
}
|
||||
Reference in New Issue
Block a user