diff --git a/xy_sh/internal/service/service.go b/xy_sh/internal/service/service.go new file mode 100644 index 0000000..e0423fb --- /dev/null +++ b/xy_sh/internal/service/service.go @@ -0,0 +1,145 @@ +package service + +import ( + "encoding/json" + + "github.com/gofiber/fiber/v2" + "xy_sh/internal/biz" + "xy_sh/internal/config" + "xy_sh/internal/entities" +) + +// Service 服务层 +type Service struct { + biz *biz.Biz + cfg *config.Config +} + +// NewService 创建服务实例 +func NewService(cfg *config.Config) *Service { + return &Service{ + biz: biz.NewBiz(cfg), + cfg: cfg, + } +} + +// Order 卡券/直充权益下单接口 +func (s *Service) Order(c *fiber.Ctx) error { + decrypted := c.Locals("decryptedBody").([]byte) + + var req entities.OrderRequest + if err := json.Unmarshal(decrypted, &req); err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: "业务参数解析失败: " + err.Error(), + }) + } + + resp, err := s.biz.ProcessOrder(&req) + if err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: err.Error(), + }) + } + + encryptedData, err := s.biz.EncryptResponse(resp) + if err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: "响应加密失败: " + err.Error(), + }) + } + + return c.JSON(entities.ApiResponse{ + Code: 0, + Msg: "请求成功", + Data: encryptedData, + }) +} + +// Query 卡券/直充/微信立减金订单查询接口 +func (s *Service) Query(c *fiber.Ctx) error { + decrypted := c.Locals("decryptedBody").([]byte) + + var req entities.QueryRequest + if err := json.Unmarshal(decrypted, &req); err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: "业务参数解析失败: " + err.Error(), + }) + } + + resp, err := s.biz.ProcessQuery(&req) + if err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: err.Error(), + }) + } + + encryptedData, err := s.biz.EncryptResponse(resp) + if err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: "响应加密失败: " + err.Error(), + }) + } + + return c.JSON(entities.ApiResponse{ + Code: 0, + Msg: "请求成功", + Data: encryptedData, + }) +} + +// WechatRecharge 微信立减金订单充值接口 +func (s *Service) WechatRecharge(c *fiber.Ctx) error { + decrypted := c.Locals("decryptedBody").([]byte) + + var req entities.WechatRechargeRequest + if err := json.Unmarshal(decrypted, &req); err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: "业务参数解析失败: " + err.Error(), + }) + } + + resp, err := s.biz.ProcessWechatRecharge(&req) + if err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: err.Error(), + }) + } + + encryptedData, err := s.biz.EncryptResponse(resp) + if err != nil { + return c.JSON(entities.ApiResponse{ + Code: -1, + Msg: "响应加密失败: " + err.Error(), + }) + } + + return c.JSON(entities.ApiResponse{ + Code: 0, + Msg: "请求成功", + Data: encryptedData, + }) +} + +// Callback 卡券/直充/微信立减金充值结果通知接口 +func (s *Service) Callback(c *fiber.Ctx) error { + decrypted := c.Locals("decryptedBody").([]byte) + + var req entities.CallbackRequest + if err := json.Unmarshal(decrypted, &req); err != nil { + return c.Status(fiber.StatusBadRequest).SendString("参数解析失败") + } + + if err := s.biz.ProcessCallback(&req); err != nil { + return c.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + + return c.SendString("ok") +} \ No newline at end of file