新增游戏图标,用户头像上传功能
This commit is contained in:
@ -1,6 +1,8 @@
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import "github.com/gogf/gf/v2/frame/g"
|
import (
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
)
|
||||||
|
|
||||||
type ListReq struct {
|
type ListReq struct {
|
||||||
g.Meta `path:"/game" method:"get" tags:"Game" summary:"(系统、商户门店后台、PC)获取游戏列表"`
|
g.Meta `path:"/game" method:"get" tags:"Game" summary:"(系统、商户门店后台、PC)获取游戏列表"`
|
||||||
|
|||||||
@ -12,4 +12,6 @@ import (
|
|||||||
|
|
||||||
type IUploadV1 interface {
|
type IUploadV1 interface {
|
||||||
Upload(ctx context.Context, req *v1.UploadReq) (res *v1.UploadRes, err error)
|
Upload(ctx context.Context, req *v1.UploadReq) (res *v1.UploadRes, err error)
|
||||||
|
UploadGameImg(ctx context.Context, req *v1.UploadGameImgReq) (res *v1.UploadGameImgRes, err error)
|
||||||
|
UploadUserImg(ctx context.Context, req *v1.UploadUserImgReq) (res *v1.UploadUserImgRes, err error)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,3 +12,20 @@ type UploadReq struct {
|
|||||||
type UploadRes struct {
|
type UploadRes struct {
|
||||||
Url string `json:"url"`
|
Url string `json:"url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UploadGameImgReq struct {
|
||||||
|
g.Meta `path:"/upload/game" method:"post" tags:"WEB" summary:"上传游戏图标文件"`
|
||||||
|
File *ghttp.UploadFile `json:"file"`
|
||||||
|
}
|
||||||
|
type UploadGameImgRes struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UploadUserImgReq struct {
|
||||||
|
g.Meta `path:"/upload/user" method:"post" tags:"WEB" summary:"上传用户头像文件"`
|
||||||
|
File *ghttp.UploadFile `json:"file"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UploadUserImgRes struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"server/internal/consts"
|
"server/internal/consts"
|
||||||
"server/internal/model"
|
"server/internal/model"
|
||||||
"server/internal/service"
|
"server/internal/service"
|
||||||
|
"server/utility/wechat"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gogf/gf/v2/encoding/gjson"
|
"github.com/gogf/gf/v2/encoding/gjson"
|
||||||
@ -18,13 +19,18 @@ func (c *ControllerV1) WeChatEvent(ctx context.Context, req *v1.WeChatEventReq)
|
|||||||
glog.Infof(ctx, "【微信事件】收到事件 | event=%s, msgType=%s, eventKey=%s, fromUserName=%s, toUserName=%s, createTime=%d",
|
glog.Infof(ctx, "【微信事件】收到事件 | event=%s, msgType=%s, eventKey=%s, fromUserName=%s, toUserName=%s, createTime=%d",
|
||||||
req.Event, req.MsgType, req.EventKey, req.FromUserName, req.ToUserName, req.CreateTime,
|
req.Event, req.MsgType, req.EventKey, req.FromUserName, req.ToUserName, req.CreateTime,
|
||||||
)
|
)
|
||||||
|
unionid, err := wechat.GetWeChatClient().GetUserUnionId(ctx, req.FromUserName)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf(ctx, "【微信事件】获取用户信息失败 | error=%s", err.Error())
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
switch req.MsgType {
|
switch req.MsgType {
|
||||||
case "event":
|
case "event":
|
||||||
switch req.Event {
|
switch req.Event {
|
||||||
case "subscribe":
|
case "subscribe":
|
||||||
key := strings.TrimPrefix(req.EventKey, "qrscene_")
|
key := strings.TrimPrefix(req.EventKey, "qrscene_")
|
||||||
split := strings.Split(req.EventKey, "_")
|
split := strings.Split(req.EventKey, "_")
|
||||||
out, err := service.User().Login(ctx, &model.UserLoginIn{OpenId: req.FromUserName, StoreCode: split[0]})
|
out, err := service.User().Login(ctx, &model.UserLoginIn{OpenId: unionid, StoreCode: split[0]})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -34,7 +40,7 @@ func (c *ControllerV1) WeChatEvent(ctx context.Context, req *v1.WeChatEventReq)
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
case "SCAN":
|
case "SCAN":
|
||||||
split := strings.Split(req.EventKey, "_")
|
split := strings.Split(req.EventKey, "_")
|
||||||
out, err := service.User().Login(ctx, &model.UserLoginIn{OpenId: req.FromUserName, StoreCode: split[0]})
|
out, err := service.User().Login(ctx, &model.UserLoginIn{OpenId: unionid, StoreCode: split[0]})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,3 +55,65 @@ func (s *sUpload) Upload(ctx context.Context, in *model.UploadIn) (res *model.Up
|
|||||||
Url: uploadRes.Url,
|
Url: uploadRes.Url,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *sUpload) UploadGameImg(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error) {
|
||||||
|
// 判断文件格式
|
||||||
|
fileType := in.File.Header.Get("Content-Type")
|
||||||
|
if !strings.HasPrefix(fileType, "image/") {
|
||||||
|
return nil, gerror.New("图片格式错误")
|
||||||
|
}
|
||||||
|
//判断图片大小
|
||||||
|
if in.File.Size > 10*1024*1024 {
|
||||||
|
return nil, gerror.New("图片大小最多10M")
|
||||||
|
}
|
||||||
|
// 获取图片后缀
|
||||||
|
exit := strings.Split(fileType, "/")[1]
|
||||||
|
// 文件名称
|
||||||
|
fileName := strings.ToLower("gameImg/" + grand.Letters(32) + "." + exit)
|
||||||
|
// 开始上传图片
|
||||||
|
client, ok := oss.GetClient("aliyun")
|
||||||
|
if !ok {
|
||||||
|
return nil, ecode.Fail.Sub("未配置OSS")
|
||||||
|
}
|
||||||
|
uploadRes, err := client.UploadFile(ctx, &model.OssUploadFileInput{
|
||||||
|
Filename: fileName,
|
||||||
|
File: in.File,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &model.UploadOut{
|
||||||
|
Url: uploadRes.Url,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *sUpload) UploadUserImg(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error) {
|
||||||
|
// 判断文件格式
|
||||||
|
fileType := in.File.Header.Get("Content-Type")
|
||||||
|
if !strings.HasPrefix(fileType, "image/") {
|
||||||
|
return nil, gerror.New("图片格式错误")
|
||||||
|
}
|
||||||
|
//判断图片大小
|
||||||
|
if in.File.Size > 10*1024*1024 {
|
||||||
|
return nil, gerror.New("图片大小最多10M")
|
||||||
|
}
|
||||||
|
// 获取图片后缀
|
||||||
|
exit := strings.Split(fileType, "/")[1]
|
||||||
|
// 文件名称
|
||||||
|
fileName := strings.ToLower("userImg/" + grand.Letters(32) + "." + exit)
|
||||||
|
// 开始上传图片
|
||||||
|
client, ok := oss.GetClient("aliyun")
|
||||||
|
if !ok {
|
||||||
|
return nil, ecode.Fail.Sub("未配置OSS")
|
||||||
|
}
|
||||||
|
uploadRes, err := client.UploadFile(ctx, &model.OssUploadFileInput{
|
||||||
|
Filename: fileName,
|
||||||
|
File: in.File,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &model.UploadOut{
|
||||||
|
Url: uploadRes.Url,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -13,6 +13,8 @@ import (
|
|||||||
type (
|
type (
|
||||||
IUpload interface {
|
IUpload interface {
|
||||||
Upload(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error)
|
Upload(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error)
|
||||||
|
UploadGameImg(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error)
|
||||||
|
UploadUserImg(ctx context.Context, in *model.UploadIn) (res *model.UploadOut, err error)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -51,6 +51,7 @@ func init() {
|
|||||||
{
|
{
|
||||||
// 上传图片
|
// 上传图片
|
||||||
enforcer.AddPolicy("user", "/x/upload/image", "POST", "上传图片")
|
enforcer.AddPolicy("user", "/x/upload/image", "POST", "上传图片")
|
||||||
|
enforcer.AddPolicy("user", "/x/upload/user", "POST", "上传头像图片")
|
||||||
|
|
||||||
//
|
//
|
||||||
enforcer.AddPolicy("user", "/x/user", "PUT", "修改个人信息")
|
enforcer.AddPolicy("user", "/x/user", "PUT", "修改个人信息")
|
||||||
@ -90,6 +91,7 @@ func init() {
|
|||||||
{
|
{
|
||||||
// admin
|
// admin
|
||||||
enforcer.AddPolicy("admin", "/x/admin/info", "GET", "获取管理员用户信息")
|
enforcer.AddPolicy("admin", "/x/admin/info", "GET", "获取管理员用户信息")
|
||||||
|
enforcer.AddPolicy("admin", "/x/upload/game", "POST", "管理员上传游戏图标")
|
||||||
|
|
||||||
// role
|
// role
|
||||||
enforcer.AddPolicy("admin", "/x/role", "GET", "管理员获取角色列表")
|
enforcer.AddPolicy("admin", "/x/role", "GET", "管理员获取角色列表")
|
||||||
|
|||||||
@ -170,6 +170,25 @@ func (c *weChatClient) GetToken() string {
|
|||||||
return c.Token
|
return c.Token
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *weChatClient) GetUserUnionId(openid string) (unionId string, err error) {
|
func (c *weChatClient) GetUserUnionId(ctx context.Context, openid string) (unionId string, err error) {
|
||||||
return
|
|
||||||
|
// TODO 获取唯一UnionId
|
||||||
|
//result := struct {
|
||||||
|
// UnionId string `json:"unionid"`
|
||||||
|
//}{}
|
||||||
|
//
|
||||||
|
//resp, err := resty.New().R().
|
||||||
|
// SetQueryParams(g.MapStrStr{"access_token": c.accessToken}).SetQueryParam("openid", openid).
|
||||||
|
// SetResult(&result).
|
||||||
|
// Get("https://api.weixin.qq.com/cgi-bin/user/info")
|
||||||
|
//
|
||||||
|
//if err != nil {
|
||||||
|
// glog.Errorf(ctx, "发起 get ticket 请求出现异常: %+v", err)
|
||||||
|
// return "", ecode.Fail.Sub("发起 get ticket 请求出现异常")
|
||||||
|
//}
|
||||||
|
//if resp.StatusCode() != 200 {
|
||||||
|
// glog.Errorf(ctx, "获取微信 ticket 响应异常: %+v", resp.Status())
|
||||||
|
// return "", ecode.Fail.Sub("获取微信 ticket 失败")
|
||||||
|
//}
|
||||||
|
return openid, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user