Files
arenax-server/internal/controller/wx/wx_v1_we_chat_login.go
2025-05-29 16:23:14 +08:00

60 lines
1.5 KiB
Go

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
}