diff --git a/api/user/user.go b/api/user/user.go index e2ef80e..a11b2ab 100644 --- a/api/user/user.go +++ b/api/user/user.go @@ -21,4 +21,5 @@ type IUserV1 interface { GetUnboundUrl(ctx context.Context, req *v1.GetUnboundUrlReq) (res *v1.GetUnboundUrlRes, err error) DelUser(ctx context.Context, req *v1.DelUserReq) (res *v1.DelUserRes, err error) GetUserGameRoleList(ctx context.Context, req *v1.GetUserGameRoleListReq) (res *v1.GetUserGameRoleListRes, err error) + GetGamelifePackageUrl(ctx context.Context, req *v1.GetGamelifePackageUrlReq) (res *v1.GetGamelifePackageUrlRes, err error) } diff --git a/api/user/v1/user.go b/api/user/v1/user.go index bb0faf7..402bafa 100644 --- a/api/user/v1/user.go +++ b/api/user/v1/user.go @@ -110,3 +110,14 @@ type GetUserGameRoleListReq struct { type GetUserGameRoleListRes struct { List interface{} `json:"list"` } + +type GetGamelifePackageUrlReq struct { + g.Meta `path:"/user/packageUrl" method:"get" tags:"User" summary:"获取GameLife游戏包的url"` + PopenId string `json:"popenId" v:"required#popenId不能为空" dc:"用户详情接口返回的 wxPopenId 或者是 qqPopenId"` + BindType int `json:"bindType" v:"required|in:1,2#请选择绑定方式,只能为1或2" dc:"绑定方式,默认值1,1: qq; 2: wx" default:"1"` + GameCode string `json:"gameCode" v:"required#请选择游戏" dc:"游戏名称"` + GameId int `json:"gameId" v:"required#gameId不能为空" dc:"游戏id"` +} +type GetGamelifePackageUrlRes struct { + Url string `json:"url"` +} diff --git a/internal/controller/user/user_v1_get_gamelife_package_url.go b/internal/controller/user/user_v1_get_gamelife_package_url.go new file mode 100644 index 0000000..7be0f47 --- /dev/null +++ b/internal/controller/user/user_v1_get_gamelife_package_url.go @@ -0,0 +1,17 @@ +package user + +import ( + "context" + "server/internal/model" + "server/internal/service" + + "server/api/user/v1" +) + +func (c *ControllerV1) GetGamelifePackageUrl(ctx context.Context, req *v1.GetGamelifePackageUrlReq) (res *v1.GetGamelifePackageUrlRes, err error) { + out, err := service.User().GamelifePackUrl(ctx, &model.GamelifePackUrlIn{BindType: req.BindType, PopenId: req.PopenId, GameId: req.GameId, GameCode: req.GameCode}) + if err != nil { + return nil, err + } + return &v1.GetGamelifePackageUrlRes{Url: out.Url}, nil +} diff --git a/internal/logic/user/user.go b/internal/logic/user/user.go index aff470b..25b8371 100644 --- a/internal/logic/user/user.go +++ b/internal/logic/user/user.go @@ -4,6 +4,8 @@ import ( "context" "fmt" "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" + "github.com/gogf/gf/v2/util/grand" "server/internal/consts" "server/internal/dao" "server/internal/model" @@ -15,9 +17,6 @@ import ( "server/utility/encrypt" "server/utility/gamelife" "server/utility/jwt" - - "github.com/gogf/gf/v2/os/gtime" - "github.com/gogf/gf/v2/util/grand" ) type sUser struct{} @@ -313,3 +312,12 @@ func (s *sUser) GetUserGameRole(ctx context.Context, in *model.GetUserGameRoleIn RoleList: *result, }, nil } +func (s *sUser) GamelifePackUrl(ctx context.Context, in *model.GamelifePackUrlIn) (out *model.GamelifePackUrlOut, err error) { + url, err := gamelife.GetGamelifeClient(ctx).GetGamelifePackageUrl(ctx, in.PopenId, in.GameCode, in.GameId, in.BindType) + if err != nil { + return nil, ecode.Fail.Sub("获取绑定链接失败") + } + return &model.GamelifePackUrlOut{ + Url: url, + }, nil +} diff --git a/internal/model/user.go b/internal/model/user.go index f37a7c3..fdc6eb1 100644 --- a/internal/model/user.go +++ b/internal/model/user.go @@ -195,3 +195,12 @@ type GetUserGameRoleIn struct { type GetUserGameRoleOut struct { RoleList []UserRole } +type GamelifePackUrlIn struct { + PopenId string + GameId int + GameCode string + BindType int +} +type GamelifePackUrlOut struct { + Url string +} diff --git a/internal/service/user.go b/internal/service/user.go index d78be59..74b30b0 100644 --- a/internal/service/user.go +++ b/internal/service/user.go @@ -24,6 +24,7 @@ type ( BoundInfo(ctx context.Context, in *model.UserBoundInfoIn) (out *model.UserBoundInfoOut, err error) DelUser(ctx context.Context, in *model.DelUserIn) (out *model.DeleteOut, err error) GetUserGameRole(ctx context.Context, in *model.GetUserGameRoleIn) (out *model.GetUserGameRoleOut, err error) + GamelifePackUrl(ctx context.Context, in *model.GamelifePackUrlIn) (out *model.GamelifePackUrlOut, err error) } ) diff --git a/utility/gamelife/gamelife.go b/utility/gamelife/gamelife.go index c1198d3..d0e5441 100644 --- a/utility/gamelife/gamelife.go +++ b/utility/gamelife/gamelife.go @@ -73,7 +73,7 @@ var URLMaps = struct { }, Package: map[string]string{ "test": "https://test.igame.qq.com/tip/ingame-page/feature/add-game-life/igame-game-life-web/#/index/goods", - "prod": "https://igame.qq.com/tip/ingame-page/feature/add-game-life/igame-game-life-web/#/index/goods", + "prod": "https://igame.qq.com/tip/ingame-page/igame-game-life-web/index.html#/index/goods", }, } @@ -195,7 +195,7 @@ func (s *gamelifeClient) GetUrl(ctx context.Context, popenID, appName, nickname } return fmt.Sprintf("%s?%s", rootURL, params), nil } -func (s *gamelifeClient) GetGamelifePackageUrl(ctx context.Context, popenID, appName string, bindType int) (string, error) { +func (s *gamelifeClient) GetGamelifePackageUrl(ctx context.Context, popenID, gameCode string, gameId, bindType int) (string, error) { // 从配置中获取 package URL 前缀 packageURL := s.packageURLMap[s.config.Mode] @@ -204,10 +204,15 @@ func (s *gamelifeClient) GetGamelifePackageUrl(ctx context.Context, popenID, app if err != nil { return "", err } - params, err := s.buildQueryParams(ctx, popenID, cache, appName, "", bindType, true) + + params, err := s.buildQueryParams(ctx, popenID, cache, gameCode, "", bindType, true) + if err != nil { return "", err } + if gameId != 0 { + params = fmt.Sprintf("%s&gid=%d", params, gameId) + } return fmt.Sprintf("%s?%s", packageURL, params), nil } diff --git a/utility/myCasbin/casbin.go b/utility/myCasbin/casbin.go index 00a8b1c..200295e 100644 --- a/utility/myCasbin/casbin.go +++ b/utility/myCasbin/casbin.go @@ -70,6 +70,7 @@ func init() { enforcer.AddPolicy("user", "/x/user/boundUrl", "GET", "获取用户绑定的URL") enforcer.AddPolicy("user", "/x/user/unBoundUrl", "GET", "获取用户取消绑定的URL") enforcer.AddPolicy("user", "/x/user/gameRoleList", "GET", "查询用户游戏角色列表") + enforcer.AddPolicy("user", "/x/user/packageUrl", "GET", "获取用户游戏人生背包url") // 反馈信息 enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表")