package controllers import ( "github.com/HFO4/cloudreve/pkg/payment" "github.com/HFO4/cloudreve/pkg/util" "github.com/HFO4/cloudreve/service/vas" "github.com/gin-gonic/gin" "github.com/smartwalle/alipay/v3" ) // GetQuota 获取容量配额信息 func GetQuota(c *gin.Context) { var service vas.GeneralVASService if err := c.ShouldBindUri(&service); err == nil { res := service.Quota(c, CurrentUser(c)) c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) } } // GetProduct 获取商品信息 func GetProduct(c *gin.Context) { var service vas.GeneralVASService if err := c.ShouldBindUri(&service); err == nil { res := service.Products(c, CurrentUser(c)) c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) } } // NewOrder 新建支付订单 func NewOrder(c *gin.Context) { var service vas.CreateOrderService if err := c.ShouldBindJSON(&service); err == nil { res := service.Create(c, CurrentUser(c)) c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) } } // OrderStatus 查询订单状态 func OrderStatus(c *gin.Context) { var service vas.OrderService if err := c.ShouldBindUri(&service); err == nil { res := service.Status(c, CurrentUser(c)) c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) } } // GetRedeemInfo 获取兑换码信息 func GetRedeemInfo(c *gin.Context) { var service vas.RedeemService if err := c.ShouldBindUri(&service); err == nil { res := service.Query(c) c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) } } // DoRedeem 获取兑换码信息 func DoRedeem(c *gin.Context) { var service vas.RedeemService if err := c.ShouldBindUri(&service); err == nil { res := service.Redeem(c, CurrentUser(c)) c.JSON(200, res) } else { c.JSON(200, ErrorResponse(err)) } } // AlipayCallback 支付宝回调 func AlipayCallback(c *gin.Context) { pay, err := payment.NewPaymentInstance("alipay") if err != nil { util.Log().Debug("[支付宝回调] 无法创建支付宝客户端, %s", err) c.Status(400) return } res, err := pay.(*payment.Alipay).Client.GetTradeNotification(c.Request) if err != nil { util.Log().Debug("[支付宝回调] 回调验证失败, %s", err) c.Status(403) return } if res != nil && res.TradeStatus == "TRADE_SUCCESS" { // 支付成功 if err := payment.OrderPaid(res.OutTradeNo); err != nil { util.Log().Debug("[支付宝回调] 支付处理失败, %s", err) } } // 确认收到通知消息 alipay.AckNotification(c.Writer) }