From 0b82776c59ef384849e40ee3479d2853381567e7 Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 14 Jul 2026 04:22:19 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20HashPay=20=E5=9B=9E=E8=B0=83=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=A0=B9=E8=B7=AF=E5=BE=84=20POST=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/api/handlers/payment.go | 5 +++++ backend/internal/api/routes/routes.go | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/internal/api/handlers/payment.go b/backend/internal/api/handlers/payment.go index 8bfd931..6b4543b 100644 --- a/backend/internal/api/handlers/payment.go +++ b/backend/internal/api/handlers/payment.go @@ -539,6 +539,11 @@ func (h *PaymentHandler) CreateHashPayPayment(c *gin.Context) { // HashPayNotify 处理 HashPay 回调通知 func (h *PaymentHandler) HashPayNotify(c *gin.Context) { + // 添加 CORS 头 + c.Header("Access-Control-Allow-Origin", "*") + c.Header("Access-Control-Allow-Methods", "POST, OPTIONS") + c.Header("Access-Control-Allow-Headers", "Content-Type") + body, _ := io.ReadAll(c.Request.Body) log.Printf("[HashPay] notify body: %s", string(body)) diff --git a/backend/internal/api/routes/routes.go b/backend/internal/api/routes/routes.go index 5a640a1..6278f89 100644 --- a/backend/internal/api/routes/routes.go +++ b/backend/internal/api/routes/routes.go @@ -33,10 +33,21 @@ func SetupRoutes(r *gin.Engine) { r.Static("/uploads", "./uploads") r.Static("/assets", "./static/assets") - r.StaticFile("/", "./static/index.html") r.StaticFile("/favicon.svg", "./static/favicon.svg") r.StaticFile("/icons.svg", "./static/icons.svg") + // HashPay 回调 - 放在 NoRoute 之前,优先匹配 + r.OPTIONS("/", func(c *gin.Context) { + c.Header("Access-Control-Allow-Origin", "*") + c.Header("Access-Control-Allow-Methods", "POST, OPTIONS") + c.Header("Access-Control-Allow-Headers", "Content-Type") + c.String(200, "ok") + }) + r.POST("/", paymentHandler.HashPayNotify) + + r.GET("/", func(c *gin.Context) { + c.File("./static/index.html") + }) r.NoRoute(func(c *gin.Context) { c.File("./static/index.html") })