diff --git a/services/game/activity.go b/services/game/activity.go index a063914..065a237 100644 --- a/services/game/activity.go +++ b/services/game/activity.go @@ -67,3 +67,67 @@ func CreateGetAnchorUserResp() *GetAnchorUserResp { BaseResponse: &responses.BaseResponse{}, } } + +type GetRoleReq struct { + *requests.RpcRequest + GameId int64 `position:"Body" field:"game_id"` + UserId string `position:"Body" field:"user_id"` + UserName string `position:"Body" field:"user_name"` + RegTime int64 `position:"Body" field:"reg_time"` + RoleId string `position:"Body" field:"role_id"` + ServerId int64 `position:"Body" field:"server_id"` + UseCache int64 `position:"Body" field:"use_cache"` + NoVirtual int64 `position:"Body" field:"no_virtual"` +} + +type RoleItem struct { + RoleId int64 `json:"roleId"` + Name string `json:"name"` + Server int64 `json:"server"` + ServerName string `json:"serverName"` + Level int64 `json:"level"` + VipLevel int64 `json:"vipLevel"` + CreateTime int64 `json:"createTime"` + RoleLevelUpdateTime int64 `json:"roleLevelUpdateTime"` + Power int64 `json:"power"` + Profession string `json:"profession"` + Gold int64 `json:"gold"` + CouponCount any `json:"couponCount"` + CouponActCount any `json:"couponActCount"` + ZhuanshengLv int64 `json:"zhuansheng_lv"` + ZhuanshengName string `json:"zhuanshengName"` + Points int64 `json:"points"` + MiniCustomsPass any `json:"miniCustomsPass"` + CardIds string `json:"cardIds"` + DayData any `json:"dayData"` + RoleExtData any `json:"roleExtData"` +} + +type RoleInfo struct { + RoleItem + FromCache int64 `json:"from_cache"` +} + +type GetRoleResp struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data struct { + RoleInfo RoleInfo `json:"role_info"` + RoleListInfo []RoleItem `json:"role_list_info"` + } `json:"data"` +} + +func CreateGetRoleReq(param *GetRoleReq) *GetRoleReq { + if param == nil { + param = &GetRoleReq{} + } + param.RpcRequest = &requests.RpcRequest{} + param.InitWithApiInfo(HOST, VERSION, "/api/activity/getRole") + param.Method = requests.POST + return param +} + +func CreateGetRoleResp() *GetRoleResp { + return &GetRoleResp{BaseResponse: &responses.BaseResponse{}} +} diff --git a/services/game/client.go b/services/game/client.go index 52ffd49..74c3341 100644 --- a/services/game/client.go +++ b/services/game/client.go @@ -198,3 +198,10 @@ func (c *Client) MakeOrder(req *MakeOrderReq) (response *MakeOrderResp, err erro err = c.DoAction(req, response) return } + +// GetRole 获取游戏角色信息 +func (c *Client) GetRole(req *GetRoleReq) (response *GetRoleResp, err error) { + response = CreateGetRoleResp() + err = c.DoAction(req, response) + return +} diff --git a/services/game/client_test.go b/services/game/client_test.go index b017c20..73c7e72 100644 --- a/services/game/client_test.go +++ b/services/game/client_test.go @@ -410,3 +410,24 @@ func TestCreateMakeOrderReq(t *testing.T) { } fmt.Println(resp.Msg) } + +func TestGetRole(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Error(err) + return + } + //game_id=9175&server_id=0&user_id=247058227&user_name=yg90938415&no_virtual=1 + req := CreateGetRoleReq(&GetRoleReq{ + GameId: 9175, + UserId: "247058227", + UserName: "yg90938415", + NoVirtual: 1, + }) + resp, err := client.GetRole(req) + if err != nil { + t.Error(err) + return + } + fmt.Println(resp.Data.RoleListInfo) +} diff --git a/services/passport/client.go b/services/passport/client.go index 24c2d92..13c3a75 100644 --- a/services/passport/client.go +++ b/services/passport/client.go @@ -95,3 +95,10 @@ func (c *Client) GetUserRegInfo(req *GetUserRegInfoRequest) (response *GetUserRe err = c.DoAction(req, response) return } + +// GetUserId 通过用户名查询 uid +func (c *Client) GetUserId(req *GetUserIdRequest) (response *GetUserIdResponse, err error) { + response = CreateGetUserIdResponse() + err = c.DoAction(req, response) + return +} diff --git a/services/passport/client_test.go b/services/passport/client_test.go index 27b933c..a3081fe 100644 --- a/services/passport/client_test.go +++ b/services/passport/client_test.go @@ -40,6 +40,29 @@ func TestGetUserRoleList(t *testing.T) { t.Logf("resp data:%+v", resp.Data) } +func TestGetUserRoleList2(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Error(err) + } + // 不限定角色 + //req := CreateGetUserRoleListRequest(221016372, 7874, 0, "") + // 限定角色 + req := CreateGetUserRoleListRequest2(GetUserRoleListParam{ + Uid: 0, + Username: "rz35990497", + GameId: 7874, + RoleId: 0, + RoleServer: "", + }) + resp, err := client.GetUserRoleList(req) + if err != nil { + t.Error(err) + } + t.Logf("resp code:%+v", resp.Code) + t.Logf("resp data:%+v", resp.Data) +} + func TestEditCard(t *testing.T) { client, err := NewClient() if err != nil { @@ -167,3 +190,25 @@ func TestGetUserRegInfo(t *testing.T) { fmt.Printf("%#+v\n", resp) fmt.Printf("%#+v\n", resp.Data) } + +// 测试通过用户名查询 uid +func TestGetUserId(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Error(err) + return + } + req := CreateGetUserIdRequest("ws45265737") + resp, err := client.GetUserId(req) + if err != nil { + t.Error(err) + return + } + data, err := resp.GetData() + if err != nil { + t.Errorf("解析返回数据失败: %v, raw: %s", err, resp.GetHttpContentString()) + return + } + fmt.Printf("raw: %s\n", resp.GetHttpContentString()) + fmt.Printf("data: %+v\n", data) +} diff --git a/services/passport/get_userid.go b/services/passport/get_userid.go new file mode 100644 index 0000000..153e3cf --- /dev/null +++ b/services/passport/get_userid.go @@ -0,0 +1,46 @@ +package passport + +import ( + "encoding/json" + "fmt" + "strings" + + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" +) + +// GetUserIdRequest 通过用户名查询 uid +type GetUserIdRequest struct { + *requests.RpcRequest +} + +// GetUserIdResponse 返回 {"uid": "user_name", ...} 格式的 map +type GetUserIdResponse struct { + *responses.BaseResponse +} + +// GetData 解析返回的 map,key 为 uid,value 为 user_name +func (r *GetUserIdResponse) GetData() (map[string]string, error) { + result := make(map[string]string) + err := json.Unmarshal(r.GetHttpContentBytes(), &result) + return result, err +} + +// CreateGetUserIdRequest 构造请求,user_name 支持逗号分隔多个 +func CreateGetUserIdRequest(userName string) *GetUserIdRequest { + req := &GetUserIdRequest{RpcRequest: &requests.RpcRequest{}} + req.InitWithApiInfo(HOST, VERSION, "/api/get_userid.php") + if !strings.Contains(userName, ",") { + userName = fmt.Sprintf("%v,%v", userName, userName) + } + req.QueryParams = map[string]string{ + "user_name": userName, + "type": "1", + } + req.Method = requests.GET + return req +} + +func CreateGetUserIdResponse() *GetUserIdResponse { + return &GetUserIdResponse{BaseResponse: &responses.BaseResponse{}} +} diff --git a/services/passport/userinfo.go b/services/passport/userinfo.go index fb45a89..71edf18 100644 --- a/services/passport/userinfo.go +++ b/services/passport/userinfo.go @@ -4,9 +4,10 @@ import ( "crypto/md5" "encoding/hex" "fmt" + "time" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" - "time" ) type GetUserListRequest struct { @@ -100,6 +101,14 @@ type UserRoleInfo struct { UpdateTime string `json:"update_time"` // 更新时间戳 } +type GetUserRoleListParam struct { + Uid int + Username string + GameId int + RoleId int + RoleServer string +} + // GetSign 封装一个方法,获取当天时间戳和api签名 func GetSign() (ts int64, sign string) { ts = time.Now().Unix() @@ -110,6 +119,31 @@ func GetSign() (ts int64, sign string) { return } +// CreateGetUserRoleListRequest2 获取玩家角色列表 +func CreateGetUserRoleListRequest2(param GetUserRoleListParam) (req *GetUserRoleListRequest) { + ts, sign := GetSign() + + req = &GetUserRoleListRequest{ + RpcRequest: &requests.RpcRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/remote_login.php") + req.FormParams = map[string]string{ + "act": "info", + "do": "user_role", + "method": "get", + "uid": fmt.Sprintf("%d", param.Uid), + "game_id": fmt.Sprintf("%d", param.GameId), + "role_id": fmt.Sprintf("%d", param.RoleId), + "role_server": param.RoleServer, + "username": param.Username, + "time": fmt.Sprintf("%v", ts), + "sign": sign, + } + + req.Method = requests.POST + return +} + // CreateGetUserRoleListRequest 获取玩家角色列表 func CreateGetUserRoleListRequest(uid int, gameId int, roleId int, roleServer string) (req *GetUserRoleListRequest) { ts, sign := GetSign()