Files
lone-services/services/user/internal/logic/getOpenidLogic.go
T
2026-10-15 09:23:07 +08:00

67 lines
1.8 KiB
Go

package logic
import (
"context"
"lone-services/pkg/utils"
"lone-services/pkg/validate"
user "lone-services/rpc/user/pb"
userconfig "lone-services/services/user/internal/config"
"lone-services/services/user/internal/dao"
"lone-services/services/user/internal/svc"
"lone-services/services/user/validator"
"github.com/zeromicro/go-zero/core/logx"
)
type GetOpenidLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetOpenidLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOpenidLogic {
return &GetOpenidLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *GetOpenidLogic) GetOpenid(in *user.GetOpenidReq) (*user.Response, error) {
loginUser := utils.GetUserFromCtx(l.ctx)
if loginUser.ID < utils.NumberOne {
return failResponse(utils.ErrorNoLoginInfo), nil
}
var req validator.GetOpenidValidator
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
return outResponse(utils.ErrorParams, msg), nil
}
if loginUser.ClientCode == utils.StringEmpty {
return outResponse(utils.ErrorParams, "端编码不能为空"), nil
}
if _, err := loadEnabledClient(loginUser.ClientCode); err != nil {
l.Errorf("get openid load client: %v", err)
return failResponse(utils.Fail), nil
}
wxCfg, cfgErr := userconfig.LoadWechatConfig(loginUser.ClientCode)
if cfgErr != nil {
l.Errorf("get openid wechat config: %v", cfgErr)
return outResponse(utils.Fail, "微信配置缺失"), nil
}
session, wxErr := wxCfg.NewAuthClient().Code2Session(req.Code)
if wxErr != nil {
l.Errorf("get openid code2session: %v", wxErr)
return outResponse(utils.Fail, "获取openid失败"), nil
}
return okResponse(dao.OpenidResult{
Openid: session.OpenID,
Unionid: session.UnionID,
}), nil
}