package wx import ( "context" "encoding/json" "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/glog" "server/utility/ecode" "server/utility/wechat" "os" "server/api/auth/v1" ) func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq) (res *v1.WeChatLoginRes, err error) { // 1、根据 uuid 构建redis 存入数据接口 cache := struct { Token string `json:"token"` OpenID string `json:"openid"` }{ Token: "", OpenID: "", } marshal, err := json.Marshal(cache) if err != nil { glog.Errorf(ctx, "反序列化数据出现异常") return nil, ecode.Fail.Sub("反序列化数据出现异常") } // 2、存入 redis _, err = g.Redis().Do(ctx, "SETEX", fmt.Sprintf("login_status:%s", req.UUID), 300, marshal) if err != nil { glog.Errorf(ctx, "写入 Redis 异常:%v", err) return nil, ecode.Fail.Sub("写入 Redis 登录状态失败") } // 3、开始获取图片 weChatClient := wechat.GetWeChatClient() ticket, err := weChatClient.GetTicket(req.UUID) if err != nil { return nil, ecode.Fail.Sub("微信登录获取 ticket 错误") } imagePath, err := weChatClient.GetQrCode(ticket, req.UUID+".jpg") if err != nil { return nil, ecode.Fail.Sub("微信登录获取二维码错误") } imageData, err := os.ReadFile(imagePath) if err != nil { return nil, ecode.Fail.Sub("读取二维码图片失败") } defer os.Remove(imagePath) resp := g.RequestFromCtx(ctx).Response resp.Header().Set("Content-Type", "image/jpeg") resp.Write(imageData) return nil, nil }