60 lines
1.5 KiB
Go
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
|
|
}
|