package router import ( "github.com/gin-gonic/gin" "gorm.io/gorm" "github.com/wangjia/pay/config" "github.com/wangjia/pay/internal/channel" "github.com/wangjia/pay/internal/gateway" "github.com/wangjia/pay/internal/handler" "github.com/wangjia/pay/internal/service" ) // Setup 装配路由。返回 OrderService 供 main 启动查单兜底任务。 func Setup(r *gin.Engine, db *gorm.DB, reg *channel.Registry) *service.OrderService { orderSvc := service.NewOrderService(db, reg, config.C.Server.BaseURL) orderH := handler.NewOrderHandler(orderSvc) pageH := handler.NewPageHandler(db, "web") r.GET("/health", func(c *gin.Context) { c.JSON(200, gin.H{"status": "ok"}) }) // 页面 r.GET("/result", pageH.ResultPage) r.GET("/qrcode", pageH.QRCode) v1 := r.Group("/api/v1") { v1.GET("/products", pageH.ListProducts) v1.POST("/orders", orderH.Create) v1.POST("/orders/qr", orderH.CreateQR) v1.GET("/orders/:out_trade_no", orderH.GetStatus) v1.POST("/notify/alipay", orderH.AlipayNotify) v1.POST("/notify/wechat", orderH.WechatNotify) } return orderSvc } // SetupV2 装配 pay v2 统一网关路由(/api/v2,与旧版同一 /api 前缀风格)。 // 旧 /api/v1 仅为存量支付宝当面付部署保留(路径 POST /api/v1/orders 与 v2 新契约 // 同名不同形,无法在同一前缀下并存);P3 支付宝 adapter 迁入 v2 后整组删除, // 最终对外只剩 /api/v2 一套。 func SetupV2(r *gin.Engine, g *gateway.Gateway) { h := handler.NewGatewayHandler(g) v2 := r.Group("/api/v2") { v2.POST("/orders", h.CreateOrder) v2.GET("/orders/:order_no", h.GetStatus) v2.POST("/orders/:order_no/retry", h.Retry) v2.POST("/orders/:order_no/cancel", h.Cancel) v2.POST("/callback/:method", h.Callback) } }