Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 3m55s
新增收款商户、商户池轮询、微信授权配置独立管理;三类新支付 (C端套餐购买、C端资产钱包充值、代理在线预存款充值)无条件 经商户池选择并冻结路由,无旧综合配置回退。merchant_id 为空 历史支付继续按 payment_config_id 双读。凭证版本化加载与 ID+版本缓存保证轮换一致性。删除商户池新支付创建开关及全部 引用。
219 lines
6.1 KiB
Go
219 lines
6.1 KiB
Go
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)
|
|
}
|