package orders import ( "backend/app/errorx" "backend/app/http/posts" "backend/app/http/tenants" "backend/app/http/users" "backend/database/fields" "backend/database/models/qvyun_v2/public/model" "backend/providers/jwt" "backend/providers/pay" "github.com/go-pay/gopay/wechat/v3" "github.com/gofiber/fiber/v3" "github.com/samber/lo" log "github.com/sirupsen/logrus" ) // @provider type PayController struct { svc *Service pay *pay.Client userSvc *users.Service tenantSvc *tenants.Service postSvc *posts.Service log *log.Entry `inject:"false"` } func (c *PayController) Prepare() error { c.log = log.WithField("module", "orders.Controller") return nil } // JSPay // @Router /api/v1/orders/pay/:orderID/js [get] // @Bind claim local // @Bind orderID path func (ctl *PayController) JSPay(ctx fiber.Ctx, claim *jwt.Claims, orderID string) (*wechat.JSAPIPayParams, error) { order, err := ctl.svc.GetUserOrderByOrderID(ctx.Context(), orderID, claim.UserID) if err != nil { return nil, err } if order.Status != fields.OrderStatusPending { return nil, errorx.BadRequest.WithMsg("订单状态异常") } oauths, err := ctl.userSvc.GetUserOAuthChannels(ctx.Context(), claim.UserID) if err != nil { return nil, err } oauth, ok := lo.Find(oauths, func(v model.UserOauths) bool { return v.Channel == fields.AuthChannelWeChat }) if !ok { return nil, errorx.BadRequest.WithMsg("未绑定微信") } params, err := ctl.pay.WeChat_JSApiPayRequest( ctx.Context(), oauth.OpenID, order.OrderSerial, order.Title, order.Amount, 1, "/v1/orders/pay/wechat/notify", ) if err != nil { return nil, err } return params, nil }