feat: add wechat pay
This commit is contained in:
78
backend/app/http/orders/controller_pay.go
Normal file
78
backend/app/http/orders/controller_pay.go
Normal file
@@ -0,0 +1,78 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user