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 }