Files
qvyun/backend/app/http/orders/controller_pay.go
2025-01-14 14:42:08 +08:00

79 lines
1.7 KiB
Go

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"
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
}
var oauth *model.UserOauths
for _, v := range oauths {
if v.Channel == fields.AuthChannelWeChat {
oauth = &v
break
}
}
if oauth == nil {
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
}