hi-server/internal/handler/notify/paymentNotifyHandler.go
2025-10-10 07:13:36 -07:00

64 lines
1.9 KiB
Go

package notify
import (
"fmt"
"net/http"
"github.com/perfect-panel/ppanel-server/pkg/constant"
"github.com/gin-gonic/gin"
"github.com/perfect-panel/ppanel-server/internal/logic/notify"
"github.com/perfect-panel/ppanel-server/internal/svc"
"github.com/perfect-panel/ppanel-server/internal/types"
"github.com/perfect-panel/ppanel-server/pkg/logger"
"github.com/perfect-panel/ppanel-server/pkg/payment"
"github.com/perfect-panel/ppanel-server/pkg/result"
)
// PaymentNotifyHandler Payment Notify
func PaymentNotifyHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) {
return func(c *gin.Context) {
platform, ok := c.Request.Context().Value(constant.CtxKeyPlatform).(string)
if !ok {
logger.WithContext(c.Request.Context()).Errorf("platform not found")
result.HttpResult(c, nil, fmt.Errorf("platform not found"))
return
}
switch payment.ParsePlatform(platform) {
case payment.EPay:
req := &types.EPayNotifyRequest{}
if err := c.ShouldBind(req); err != nil {
result.HttpResult(c, nil, err)
return
}
l := notify.NewEPayNotifyLogic(c, svcCtx)
if err := l.EPayNotify(req); err != nil {
logger.WithContext(c.Request.Context()).Errorf("EPayNotify failed: %v", err.Error())
c.String(http.StatusBadRequest, err.Error())
return
}
c.String(http.StatusOK, "%s", "success")
case payment.Stripe:
l := notify.NewStripeNotifyLogic(c.Request.Context(), svcCtx)
if err := l.StripeNotify(c.Request, c.Writer); err != nil {
result.HttpResult(c, nil, err)
return
}
result.HttpResult(c, nil, nil)
case payment.AlipayF2F:
l := notify.NewAlipayNotifyLogic(c.Request.Context(), svcCtx)
if err := l.AlipayNotify(c.Request); err != nil {
result.HttpResult(c, nil, err)
return
}
// Return success to alipay
c.String(http.StatusOK, "%s", "success")
default:
logger.WithContext(c.Request.Context()).Errorf("platform %s not support", platform)
}
}
}