6
0

Compare commits

...

37 Commits

Author SHA1 Message Date
eb6157ce05 新增设置支付redis相关数据接口 2025-06-27 17:52:00 +08:00
a329d30296 Merge branch 'refs/heads/develop/yuxh/game' 2025-06-25 19:43:15 +08:00
liguanjie
49c41fb60b Merge branch 'develop/lgj/order' 2025-06-25 17:14:27 +08:00
liguanjie
384d257e03 【stat服务】1、查询用户角色汇总,提高超时时间 2025-06-25 17:11:15 +08:00
e1c163ef10 refactor(services/game): 更新游戏版本配置结构
- 新增 GameVersion 结构体,用于获取游戏客户端版本配置
- 修改 GetGameVersionResp 结构,将 Data 字段类型改为 GameVersion
-优化了游戏版本信息的组织和返回方式
2025-06-25 16:44:10 +08:00
45e449df11 Merge remote-tracking branch 'origin/master' 2025-06-25 15:58:43 +08:00
90cc6c3719 refactor(game): 删除未使用的 GetGameCompanyBySign 方法
-从 game/client.go 文件中移除了 GetGameCompanyBySign 函数- 此方法未在任何地方调用,删除以简化代码结构
2025-06-25 15:58:25 +08:00
liguanjie
b0027fd6e3 fix game服务报错 2025-06-25 15:43:41 +08:00
liguanjie
0b9b6ec0d9 Merge branch 'develop/lgj/order' 2025-06-25 15:43:15 +08:00
e4b852e4a6 refactor(game): 移除未使用的游戏公司信息获取功能 2025-06-25 14:59:31 +08:00
efaf155924 Merge branch 'refs/heads/develop/yuxh/game' 2025-06-25 14:24:25 +08:00
huangqz
ef5d453838 修改游戏详细download_id字段类型 2025-06-25 13:02:25 +08:00
liguanjie
a274190b01 【stat服务】
1、查询用户角色注册分页
2025-06-24 18:00:55 +08:00
liguanjie
eea0eb790e 【ip服务】
1、新增查询单个、多个ip地区信息
2025-06-24 11:55:49 +08:00
liguanjie
de55d3d7d5 【stat服务】
1、查询用户角色注册分页
2025-06-23 17:19:50 +08:00
6d3f8d8232 refactor(services/game): 修改获取游戏版本的 API 路径 2025-06-20 19:12:43 +08:00
089a9091ec feat(game): 添加根据游戏标识获取根游戏信息 2025-06-20 16:51:10 +08:00
ba79540f78 refactor(game): 重命名 GetGameByVersion 相关函数 2025-06-20 15:44:41 +08:00
7e9eae718c refactor(game): 重构游戏版本获取接口
- 将 GetGameByVersionReq 重命名为 GetGameVersionReq
- 将 GetGameByVersionResp 重命名为 GetGameVersionResp
- 更新了相关的函数和结构体名称,以提高代码的一致性和可读性
2025-06-20 15:13:16 +08:00
25552dd187 feat(game): 添加获取游戏客户端版本配置接口
- 在 game/client.go 中添加了 GetGameByVersion 方法- 在 game/game.go 中定义了 GetGameByVersionReq 和 GetGameByVersionResp 结构体
- 实现了创建请求和响应对象的函数 CreateGetGameByVersionReq 和 CreateGetGameByVersionResp
2025-06-20 12:09:20 +08:00
liguanjie
eb25c8f20a 【cs服务】
1、新增热门faq获取
2025-06-20 11:41:24 +08:00
liguanjie
92868ce4a0 【cs服务】
1、新增faq详情
2025-06-20 11:34:19 +08:00
liguanjie
f3a11907ee 【cs服务】
1、工单详情查询
2025-06-11 18:03:42 +08:00
liguanjie
e79d0819ad 【cs服务】
1、工单记录列表查询
2025-06-11 17:44:00 +08:00
liguanjie
32ba08b231 【cs服务】
1、用户补充资料
2025-06-11 16:35:33 +08:00
liguanjie
c0ced849fc 【cs服务】
1、用户提交工单
2025-06-11 16:09:29 +08:00
liguanjie
ce7d7f2ee7 【cs服务】
1、用户重启工单
2025-06-11 15:33:38 +08:00
liguanjie
bc565ac059 【cs服务】
1、用户催单
2、用户评价工单
2025-06-11 15:24:35 +08:00
liguanjie
6a7cfdc82f 【cs服务】
1、获取工单补充字段设置
2、获取工单模板详情,字段设置
2025-06-11 15:02:19 +08:00
liguanjie
73ca794581 Merge branch 'develop/lgj' 2025-06-10 21:47:41 +08:00
liguanjie
a5e43aa59a 【cs服务】
1、json参数优化
2025-06-10 21:46:21 +08:00
liguanjie
2ab968dfb2 【cs服务】
1、新增工单图片上传
2025-06-10 21:41:57 +08:00
huangqz
b69ed4b807 新增获取iOS切支付规则接口 2025-06-10 19:46:35 +08:00
liguanjie
607dbc87c6 【cs服务】
1、新增用户短信认证码发送
2025-06-10 14:46:46 +08:00
liguanjie
d3f303e20c 【cs服务】
1、新增用户角色列表获取
2025-06-10 14:19:18 +08:00
liguanjie
b282de0a2f 【cs服务】
1、新增用户基本信息获取
2025-06-10 10:32:20 +08:00
liguanjie
abb6cc61fb 【cs服务】
1、初始化 2、新增faq获取
2025-06-10 10:16:15 +08:00
21 changed files with 1797 additions and 2 deletions

134
services/cs/client.go Normal file
View File

@ -0,0 +1,134 @@
package cs
import (
"errors"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
)
const (
VERSION = "2025-06-10"
)
var HOST = requests.Host{
Default: "cs",
}
type Client struct {
sdk.Client
}
func NewClient() (client *Client, err error) {
client = new(Client)
err = client.Init()
return
}
func (client *Client) GetFaq(req *GetFaqRequest) (resp *GetFaqResponse, err error) {
resp = CreateGetFaqResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetUserInfo(req *GetUserInfoRequest) (resp *GetUserInfoResponse, err error) {
resp = CreateGetUserInfoResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetCsUserRoleList(req *GetUserRoleListRequest) (resp *GetUserRoleListResponse, err error) {
resp = CreateGetUserRoleListResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetUserServerList(req *GetUserServerListRequest) (resp *GetUserServerListResponse, err error) {
resp = CreateGetUserServerListResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) SendSmsCode(req *SendSmsRequest) (resp *SendSmsResponse, err error) {
resp = CreateSendSmsResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) Upload(req *UploadRequest) (resp *UploadResponse, err error) {
// check file stream
if req.FileStream == nil {
err = errors.New("stream is empty")
return
}
// 必须设置content
req.SetContent(req.FileStream)
resp = CreateUploadResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetOrderTemplateDetail(req *OrderTemplateDetailReq) (resp *OrderTemplateDetailResp, err error) {
resp = CreateOrderTemplateDetailResp()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetOrderFurtherPart(req *GetOrderFurtherPartRequest) (resp *GetOrderFurtherPartResponse, err error) {
resp = CreateGetOrderFurtherPartResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderUrgent(req *OrderUrgentRequest) (resp *OrderUrgentResponse, err error) {
resp = CreateOrderUrgentResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderUpdateHandle(req *OrderUpdateHandleRequest) (resp *OrderUpdateHandleResponse, err error) {
resp = CreateOrderUpdateHandleResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderAppraise(req *OrderAppraiseRequest) (resp *OrderAppraiseResponse, err error) {
resp = CreateOrderAppraiseResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderRestart(req *OrderRestartRequest) (resp *OrderRestartResponse, err error) {
resp = CreateOrderRestartResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderSubmit(req *OrderSubmitRequest) (resp *OrderSubmitResponse, err error) {
resp = CreateOrderSubmitResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderFurtherPart(req *OrderFurtherPartRequest) (resp *OrderFurtherPartResponse, err error) {
resp = CreateOrderFurtherPartResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderRecordList(req *GetWorkOrderRecordListRequest) (resp *GetWorkOrderRecordListResponse, err error) {
resp = CreateGetWorkOrderRecordListResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) OrderRecordDetail(req *GetWorkOrderRecordDetailReq) (resp *GetWorkOrderRecordDetailResp, err error) {
resp = CreateGetWorkOrderRecordDetailResp()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetFaqDetail(req *GetFaqDetailRequest) (resp *GetFaqDetailResponse, err error) {
resp = CreateGetFaqDetailResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) GetHotFaqList(req *GetHotFaqRequest) (resp *GetHotFaqResponse, err error) {
resp = CreateGetHotFaqResponse()
err = client.DoAction(req, resp)
return
}

406
services/cs/client_test.go Normal file
View File

@ -0,0 +1,406 @@
package cs
import (
"fmt"
"os"
"testing"
)
/**
* 客服工单服务单元测试
*/
// 获取faq树状数据
func TestGetFaq(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetFaqRequest()
faq, err := client.GetFaq(req)
if err != nil {
t.Error(err)
return
}
fmt.Printf(fmt.Sprintf("%#+v", faq))
}
// 获取玩家基本信息
func TestGetUserInfo(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetUserInfoRequest("ws45265737")
info, err := client.GetUserInfo(req)
if err != nil {
t.Error(err)
return
}
fmt.Printf(fmt.Sprintf("%v", info))
}
// 获取玩家角色列表
func TestGetUserRoleList(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetUserRoleListRequest(int64(63610626), int64(2850))
info, err := client.GetCsUserRoleList(req)
if err != nil {
t.Error(err)
return
}
if info.Code != 0 {
t.Error("获取玩家角色列表失败")
fmt.Printf(fmt.Sprintf("%v", info))
return
}
fmt.Printf(fmt.Sprintf("%v", info))
}
// 获取玩家区服列表
func TestGetUserServerList(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetUserServerListRequest(int64(63610626), int64(2850))
info, err := client.GetUserServerList(req)
if err != nil {
t.Error(err)
return
}
if info.Code != 0 {
t.Error("获取玩家区服列表失败")
fmt.Printf(fmt.Sprintf("%v", info))
return
}
fmt.Printf(fmt.Sprintf("%v", info))
}
// 给玩家发送短信
func TestSendSms(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateSendSmsRequest(SendSmsReq{
Phone: "13725263463",
})
info, err := client.SendSmsCode(req)
if err != nil {
t.Error(err)
return
}
if info.Code != 0 {
t.Error("给玩家发送短信失败")
}
fmt.Printf(fmt.Sprintf("%v", info))
}
// 工单图片上传
func TestUpload(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
// 读取文件流
file, err := os.ReadFile("test.png")
if err != nil {
t.Error(err)
return
}
req := CreateUploadRequest()
req.FileStream = file
res, err := client.Upload(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单图片上传失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 工单模板查询
func TestGetOrderTemplateDetail(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
templateId := int64(12)
req := CreateOrderTemplateDetailReq(templateId)
res, err := client.GetOrderTemplateDetail(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单模板查询失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 工单补充字段设置
func TestGetOrderFurtherPart(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetOrderFurtherPartRequest(GetOrderFurtherPartParam{
OrderNum: "20250605092301764049"})
res, err := client.GetOrderFurtherPart(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单补充字段设置获取失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 用户催单
func TestOrderUrgent(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateOrderUrgentRequest(OrderUrgentParam{
OrderNum: "20250530173554491048"})
res, err := client.OrderUrgent(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("用户催单失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 用户更新工单处理标识
func TestOrderUpdateHandle(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateOrderUpdateHandleRequest(OrderUpdateHandleParam{
IsHandle: 1,
OrderNum: "20250530173554491048"})
res, err := client.OrderUpdateHandle(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("用户催单失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 用户评价工单
func TestOrderAppraise(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateOrderAppraiseRequest(OrderAppraiseParam{
OrderNum: "20250530173554491048",
Score: 5,
})
res, err := client.OrderAppraise(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("用户评价失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 工单重启
func TestOrderRestart(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateOrderRestartRequest(OrderRestartParam{
OrderNum: "20250530173554491048",
RemarkContent: "模拟用户重启",
RemarkPic: []string{},
})
res, err := client.OrderRestart(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单重启失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 提交工单
func TestOrderSubmit(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateOrderSubmitRequest(OrderSubmitParam{
GameId: 7991,
UserName: "ws45265737",
Uid: 65598086,
RoleId: "10676785",
RoleName: "流水行者",
ServerName: "血阳琉璃",
OrderTemplateCode: "btu7RoDj",
Detail: "我的问题是,组队这个玩法的初衷是希望实现大家能和身边认识的朋友一起下洞的目标。但是现在看来,很多玩家都选择了在游戏中随机匹配队友,而我们发现,组队机制暴露的绝大部分玩家体验问题都是在随机匹配中出现的。<br/>比如恶意踢人,又比如匹配到的玩家等级比较低,不符合自己本次下洞的目标,再或者是组队进入洞窟却发现队友已经快要收尾结束探险了。",
Phone: "13725263463",
ApplyIp: "183.63.75.58",
OrderParts: []OrderSubmitPart{
{
PartKey: "email",
PartName: "联系邮箱",
PartValue: "kingson2011@126.com",
PicValue: nil,
},
{
PartKey: "pay_pic",
PartName: "充值凭证",
PartValue: "",
PicValue: []string{
"uploads/d1a/d1aba28357b89e7ebfc77e5c43fc81b7.jpeg",
"uploads/c37/c3726c5cf7175ed048f6c68416dbf30b.jpeg",
"uploads/ca2/ca285ae8feae8c60d51b53079fa9b2a9.jpeg",
},
},
},
SmsCode: "7204",
})
res, err := client.OrderSubmit(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单提交失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 用户工单补充资料
func TestOrderFurtherPart(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateOrderFurtherPartRequest(OrderFurtherPartParam{
OrderNum: "20250611160840208567",
OrderParts: []OrderSubmitPart{
{
PartKey: "game_name",
PartName: "游戏名称",
PartValue: "镇魂街:最终章",
},
},
})
res, err := client.OrderFurtherPart(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("用户工单补充资料失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 工单列表查询
func TestGetWorkOrderRecordList(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetWorkOrderRecordListRequest(GetWorkOrderRecordListParam{
HandleStatus: "",
UserName: "ws45265737",
GameId: 7991,
Page: 1,
PageSize: 20,
})
res, err := client.OrderRecordList(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单列表查询失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 工单详情查询
func TestOrderRecordDetail(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetWorkOrderRecordDetailRequest(OrderDetailParam{
OrderNum: "20250611160840208567",
})
res, err := client.OrderRecordDetail(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("工单详情查询失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 获取faq详情
func TestGetFaqDetail(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetFaqDetailRequest(FaqDetailRequest{
Id: int64(31),
})
res, err := client.GetFaqDetail(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 || res.Data.Id == 0 {
t.Error("获取faq详情失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 获取热门faq
func TestGetFaqHotList(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateGetHotFaqRequest()
res, err := client.GetHotFaqList(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 || len(res.Data) == 0 {
t.Error("获取热门faq失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}

120
services/cs/faq.go Normal file
View File

@ -0,0 +1,120 @@
package cs
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
// Faq 树状结构
type Faq struct {
Id int64 `json:"id"`
ParentId int64 `json:"parent_id"`
Title string `json:"title"`
Answer string `json:"answer"`
Type int64 `json:"type"`
WorkOrderTemplateId int64 `json:"work_order_template_id"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
ProcessFlow string `json:"process_flow"`
Children []*Faq `json:"children"`
}
type GetFaqRequest struct {
*requests.RpcRequest
}
type GetFaqResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data Faq `json:"data"`
}
func CreateGetFaqRequest() (req *GetFaqRequest) {
req = &GetFaqRequest{
RpcRequest: &requests.RpcRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/v1/faq/list")
req.Method = requests.POST
return
}
func CreateGetFaqResponse() (response *GetFaqResponse) {
response = &GetFaqResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
// FaqDetail Faq详情
type FaqDetail struct {
Id int64 `json:"id"`
ParentId int64 `json:"parent_id"`
Title string `json:"title"`
Answer string `json:"answer"`
Type int64 `json:"type"`
WorkOrderTemplateId int64 `json:"work_order_template_id"`
ProcessFlow string `json:"process_flow"`
}
type GetFaqDetailRequest struct {
*requests.JsonRequest
Id int64 `position:"Json" field:"id"`
}
type GetFaqDetailResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data FaqDetail `json:"data"`
}
type FaqDetailRequest struct {
Id int64 `json:"id"`
}
func CreateGetFaqDetailRequest(param FaqDetailRequest) (req *GetFaqDetailRequest) {
req = &GetFaqDetailRequest{
JsonRequest: &requests.JsonRequest{},
Id: param.Id,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/faq/detail")
req.Method = requests.POST
return
}
func CreateGetFaqDetailResponse() (response *GetFaqDetailResponse) {
response = &GetFaqDetailResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
// 热门faq列表
type HotFaq struct {
Id int64 `json:"id"`
Title string `json:"title"`
}
type GetHotFaqRequest struct {
*requests.JsonRequest
}
type GetHotFaqResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data []HotFaq `json:"data"`
}
func CreateGetHotFaqRequest() (req *GetHotFaqRequest) {
req = &GetHotFaqRequest{
JsonRequest: &requests.JsonRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/v1/faq/hot_list")
req.Method = requests.POST
return
}
func CreateGetHotFaqResponse() (response *GetHotFaqResponse) {
response = &GetHotFaqResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}

314
services/cs/order.go Normal file
View File

@ -0,0 +1,314 @@
package cs
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
/**
* 客服工单相关方法
*/
type UploadRequest struct {
*requests.StreamRequest
FileStream []byte
}
type UploadResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
FileName string `json:"file_name"`
FileUrl string `json:"file_url"`
FilePath string `json:"file_path"`
}
TraceId string `json:"trace_id"`
}
func CreateUploadRequest() (req *UploadRequest) {
req = &UploadRequest{
StreamRequest: &requests.StreamRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/upload_image")
req.Method = requests.POST
return
}
func CreateUploadResponse() (resp *UploadResponse) {
return &UploadResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// 获取工单补充字段设置
// GetOrderFurtherPartParam 请求参数
type GetOrderFurtherPartParam struct {
OrderNum string `json:"order_num"`
}
type GetOrderFurtherPartRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
}
type OrderFurtherPart struct {
OrderNum string `json:"order_num"`
FurtherParts []*OrderPart `json:"further_parts"`
}
type GetOrderFurtherPartResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Data OrderFurtherPart `json:"data"`
Msg string `json:"msg"`
}
func CreateGetOrderFurtherPartRequest(param GetOrderFurtherPartParam) (req *GetOrderFurtherPartRequest) {
req = &GetOrderFurtherPartRequest{
JsonRequest: &requests.JsonRequest{},
OrderNum: param.OrderNum,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/get_order_further_part")
req.Method = requests.POST
return
}
func CreateGetOrderFurtherPartResponse() (resp *GetOrderFurtherPartResponse) {
return &GetOrderFurtherPartResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// OrderUrgentParam 用户催单
type OrderUrgentParam struct {
OrderNum string `json:"order_num"`
}
type OrderUrgentRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
}
type OrderUrgentResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
}
func CreateOrderUrgentRequest(param OrderUrgentParam) (req *OrderUrgentRequest) {
req = &OrderUrgentRequest{
JsonRequest: &requests.JsonRequest{},
OrderNum: param.OrderNum,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_urgent")
req.Method = requests.POST
return
}
func CreateOrderUrgentResponse() (resp *OrderUrgentResponse) {
return &OrderUrgentResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// OrderUpdateHandleParam 更新工单处理标识
type OrderUpdateHandleParam struct {
OrderNum string `json:"order_num"`
IsHandle int64 `json:"is_handle"`
}
type OrderUpdateHandleRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
IsHandle int64 `position:"Json" field:"is_handle"`
}
type OrderUpdateHandleResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
}
func CreateOrderUpdateHandleRequest(param OrderUpdateHandleParam) (req *OrderUpdateHandleRequest) {
req = &OrderUpdateHandleRequest{
JsonRequest: &requests.JsonRequest{},
OrderNum: param.OrderNum,
IsHandle: param.IsHandle,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_handle")
req.Method = requests.POST
return
}
func CreateOrderUpdateHandleResponse() (resp *OrderUpdateHandleResponse) {
return &OrderUpdateHandleResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// OrderAppraiseParam 用户评价工单
type OrderAppraiseParam struct {
OrderNum string `json:"order_num"`
Score int `json:"score"`
}
type OrderAppraiseRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
Score int `position:"Json" field:"score"`
}
type OrderAppraiseResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
}
func CreateOrderAppraiseRequest(param OrderAppraiseParam) (req *OrderAppraiseRequest) {
req = &OrderAppraiseRequest{
JsonRequest: &requests.JsonRequest{},
OrderNum: param.OrderNum,
Score: param.Score,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_appraise")
req.Method = requests.POST
return
}
func CreateOrderAppraiseResponse() (resp *OrderAppraiseResponse) {
return &OrderAppraiseResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// OrderRestartParam 用户重启工单
type OrderRestartParam struct {
OrderNum string `json:"order_num"`
RemarkContent string `json:"remark_content"`
RemarkPic []string `json:"remark_pic"`
}
type OrderRestartRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
RemarkContent string `position:"Json" field:"remark_content"`
RemarkPic []string `position:"Json" field:"remark_pic"`
}
type OrderRestartResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
}
func CreateOrderRestartRequest(param OrderRestartParam) (req *OrderRestartRequest) {
req = &OrderRestartRequest{
JsonRequest: &requests.JsonRequest{},
OrderNum: param.OrderNum,
RemarkContent: param.RemarkContent,
RemarkPic: param.RemarkPic,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_restart")
req.Method = requests.POST
return
}
func CreateOrderRestartResponse() (resp *OrderRestartResponse) {
return &OrderRestartResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// OrderSubmitParam 工单提交
type OrderSubmitParam struct {
GameId int64 `json:"game_id"`
UserName string `json:"user_name"`
Uid int64 `json:"uid"`
RoleId string `json:"role_id"`
RoleName string `json:"role_name"`
ServerName string `json:"server_name"`
OrderTemplateCode string `json:"order_template_code"`
Detail string `json:"detail"`
Phone string `json:"phone"`
ApplyIp string `json:"apply_ip"`
OrderParts []OrderSubmitPart `json:"order_parts"`
SmsCode string `json:"sms_code"`
}
type OrderSubmitPart struct {
PartId int64 `json:"part_id"`
PartKey string `json:"part_key"`
PartName string `json:"part_name"`
PartValue string `json:"part_value"`
PartType int64 `json:"part_type"`
PicValue []string `json:"pic_value"`
}
type OrderSubmitRequest struct {
*requests.JsonRequest
GameId int64 `position:"Json" field:"game_id"`
UserName string `position:"Json" field:"user_name"`
Uid int64 `position:"Json" field:"uid"`
RoleId string `position:"Json" field:"role_id"`
RoleName string `position:"Json" field:"role_name"`
ServerName string `position:"Json" field:"server_name"`
OrderTemplateCode string `position:"Json" field:"order_template_code"`
Detail string `position:"Json" field:"detail"`
Phone string `position:"Json" field:"phone"`
ApplyIp string `position:"Json" field:"apply_ip"`
OrderParts []OrderSubmitPart `position:"Json" field:"order_parts"`
SmsCode string `position:"Json" field:"sms_code"`
}
type OrderSubmitResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
OrderNum string `json:"order_num"`
} `json:"data"`
}
func CreateOrderSubmitRequest(param OrderSubmitParam) (req *OrderSubmitRequest) {
req = &OrderSubmitRequest{
JsonRequest: &requests.JsonRequest{},
GameId: param.GameId,
UserName: param.UserName,
Uid: param.Uid,
RoleId: param.RoleId,
RoleName: param.RoleName,
ServerName: param.ServerName,
OrderTemplateCode: param.OrderTemplateCode,
Detail: param.Detail,
Phone: param.Phone,
ApplyIp: param.ApplyIp,
OrderParts: param.OrderParts,
SmsCode: param.SmsCode,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_submit")
req.Method = requests.POST
return
}
func CreateOrderSubmitResponse() (resp *OrderSubmitResponse) {
return &OrderSubmitResponse{
BaseResponse: &responses.BaseResponse{},
}
}
// OrderFurtherPartParam 工单补充资料
type OrderFurtherPartParam struct {
OrderNum string `json:"order_num"`
OrderParts []OrderSubmitPart `json:"order_parts"`
}
type OrderFurtherPartRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
OrderParts []OrderSubmitPart `position:"Json" field:"order_parts"`
}
type OrderFurtherPartResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
}
func CreateOrderFurtherPartRequest(param OrderFurtherPartParam) (req *OrderFurtherPartRequest) {
req = &OrderFurtherPartRequest{
JsonRequest: &requests.JsonRequest{},
OrderNum: param.OrderNum,
OrderParts: param.OrderParts,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_further_data")
req.Method = requests.POST
return
}
func CreateOrderFurtherPartResponse() (resp *OrderFurtherPartResponse) {
return &OrderFurtherPartResponse{
BaseResponse: &responses.BaseResponse{},
}
}

135
services/cs/orderrecord.go Normal file
View File

@ -0,0 +1,135 @@
package cs
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
// 获取客服工单列表
type GetWorkOrderRecordListParam struct {
OrderNum string `position:"Json" field:"order_num"`
Page int64 `position:"Json" field:"page"`
PageSize int64 `position:"Json" field:"page_size"`
UserName string `position:"Json" field:"user_name"`
GameId int64 `position:"Json" field:"game_id"`
HandleStatus string `position:"Json" field:"handle_status"`
}
type OrderRecord struct {
OrderNum string `json:"order_num"`
WorkOrderTemplateFirstLevelName string `json:"work_order_template_first_level_name"`
UserName string `json:"user_name"`
GameId int64 `json:"game_id"`
GameName string `json:"game_name"`
RoleId string `json:"role_id"`
RoleName string `json:"role_name"`
ServerName string `json:"server_name"`
Detail string `json:"detail"`
ApplyTime string `json:"apply_time"`
HandleStatus string `json:"handle_status"`
HandleStatusName string `json:"handle_status_name"`
IsUrgent int64 `json:"is_urgent"`
IsAppraise int64 `json:"is_appraise"`
FinishTime string `json:"finish_time"`
OrderParts []*OrderSubmitPart `json:"order_parts"`
Id int64 `json:"id"`
WorkOrderTemplateFirstLevelId int64 `json:"work_order_template_first_level_id"`
}
// PageInfoResp 分页响应
type PageInfoResp struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalNumber int `json:"total_number"`
TotalPage int `json:"total_page"`
}
type GetWorkOrderRecordListResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Data struct {
Data []*OrderRecord `json:"data"`
PageInfo *PageInfoResp `json:"page_info"`
} `json:"data"`
Msg string `json:"msg"`
TraceId string `json:"trace_id"`
}
type GetWorkOrderRecordListRequest struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
Page int64 `position:"Json" field:"page"`
PageSize int64 `position:"Json" field:"page_size"`
UserName string `position:"Json" field:"user_name"`
GameId int64 `position:"Json" field:"game_id"`
HandleStatus string `position:"Json" field:"handle_status"`
}
func CreateGetWorkOrderRecordListRequest(param GetWorkOrderRecordListParam) (req *GetWorkOrderRecordListRequest) {
req = &GetWorkOrderRecordListRequest{
JsonRequest: &requests.JsonRequest{},
}
req.OrderNum = param.OrderNum
req.Page = param.Page
req.PageSize = param.PageSize
req.UserName = param.UserName
req.GameId = param.GameId
req.HandleStatus = param.HandleStatus
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_record_list")
req.Method = requests.POST
return
}
func CreateGetWorkOrderRecordListResponse() (resp *GetWorkOrderRecordListResponse) {
resp = &GetWorkOrderRecordListResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
// 工单详情
type OrderDetailParam struct {
OrderNum string `json:"order_num"`
}
type OrderLog struct {
Id int64 `json:"id"`
ApplyCount int64 `json:"apply_count"`
ActionType string `json:"action_type"`
PlayerLinkType string `json:"player_link_type"`
PlayerLinkTypeName string `json:"player_link_type_name"`
Content []*OrderSubmitPart `json:"content"`
PicContent []*OrderSubmitPart `json:"pic_content"`
CreatedAt string `json:"created_at"`
}
type OrderDetail struct {
OrderRecord *OrderRecord `json:"order_record"`
OrderLogs []*OrderLog `json:"order_logs"`
}
type GetWorkOrderRecordDetailResp struct {
*responses.BaseResponse
Code int `json:"code"`
Data OrderDetail `json:"data"`
Msg string `json:"msg"`
}
type GetWorkOrderRecordDetailReq struct {
*requests.JsonRequest
OrderNum string `position:"Json" field:"order_num"`
}
func CreateGetWorkOrderRecordDetailRequest(param OrderDetailParam) (req *GetWorkOrderRecordDetailReq) {
req = &GetWorkOrderRecordDetailReq{
JsonRequest: &requests.JsonRequest{},
}
req.OrderNum = param.OrderNum
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_record_detail")
req.Method = requests.POST
return
}
func CreateGetWorkOrderRecordDetailResp() (resp *GetWorkOrderRecordDetailResp) {
resp = &GetWorkOrderRecordDetailResp{
BaseResponse: &responses.BaseResponse{},
}
return
}

View File

@ -0,0 +1,55 @@
package cs
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
// OrderTemplate 工单模板
type OrderTemplate struct {
Id int64 `json:"id"`
Name string `json:"name"`
UniqueCode string `json:"unique_code"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
TemplateParts []*OrderPart `json:"template_parts"`
}
// OrderPart 工单字段
type OrderPart struct {
Id int64 `json:"id"`
PartName string `json:"part_name"`
PartKey string `json:"part_key"`
PartType int64 `json:"part_type"`
IsRequire int64 `json:"is_require"`
TipsContent string `json:"tips_content"`
MaxNum int64 `json:"max_num"`
}
type OrderTemplateDetailReq struct {
*requests.JsonRequest
Id int64 `position:"Json" field:"id"`
}
type OrderTemplateDetailResp struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data OrderTemplate `json:"data"`
}
func CreateOrderTemplateDetailReq(templateId int64) (req *OrderTemplateDetailReq) {
req = &OrderTemplateDetailReq{
JsonRequest: &requests.JsonRequest{},
Id: templateId,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order_template/detail")
req.Method = requests.POST
return
}
func CreateOrderTemplateDetailResp() (response *OrderTemplateDetailResp) {
response = &OrderTemplateDetailResp{
BaseResponse: &responses.BaseResponse{},
}
return
}

BIN
services/cs/test.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

157
services/cs/user.go Normal file
View File

@ -0,0 +1,157 @@
package cs
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
/**
* 获取玩家用户相关信息
*/
// UserInfo 用户信息
type UserInfo struct {
UserName string `json:"user_name"`
Uid int64 `json:"uid"`
Telephone string `json:"telephone"`
}
type GetUserInfoRequest struct {
*requests.RpcRequest
}
type GetUserInfoResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data UserInfo `json:"data"`
}
func CreateGetUserInfoRequest(userName string) (req *GetUserInfoRequest) {
req = &GetUserInfoRequest{
RpcRequest: &requests.RpcRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/v1/user/info")
req.FormParams = map[string]string{
"user_name": userName,
}
req.Method = requests.POST
return
}
func CreateGetUserInfoResponse() (response *GetUserInfoResponse) {
response = &GetUserInfoResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
// UserRoleInfo 玩家角色信息
type UserRoleInfo struct {
Uid int64 `json:"uid"`
RoleName string `json:"role_name"`
RoleId string `json:"role_id"`
}
type GetUserRoleListRequest struct {
*requests.JsonRequest
}
type GetUserRoleListResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data []UserRoleInfo `json:"data"`
}
func CreateGetUserRoleListRequest(uId int64, gameId int64) (req *GetUserRoleListRequest) {
req = &GetUserRoleListRequest{
JsonRequest: &requests.JsonRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/v1/user/role_list")
req.JsonParams["uid"] = uId
req.JsonParams["game_id"] = gameId
req.Method = requests.POST
return
}
func CreateGetUserRoleListResponse() (response *GetUserRoleListResponse) {
response = &GetUserRoleListResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
// UserServerInfo 玩家区服信息
type UserServerInfo struct {
ServerName string `json:"server_name"`
}
type GetUserServerListRequest struct {
*requests.JsonRequest
}
type GetUserServerListResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data []UserServerInfo `json:"data"`
}
func CreateGetUserServerListRequest(uId int64, gameId int64) (req *GetUserServerListRequest) {
req = &GetUserServerListRequest{
JsonRequest: &requests.JsonRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/v1/user/server_list")
req.JsonParams["uid"] = uId
req.JsonParams["game_id"] = gameId
req.Method = requests.POST
return
}
func CreateGetUserServerListResponse() (response *GetUserServerListResponse) {
response = &GetUserServerListResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
type SendSmsReq struct {
Phone string `json:"phone"`
}
// SendSmsResp 发送短信返回
type SendSmsResp struct {
// 短信发送时间戳,工单模块 有效期5分钟
SendCodeTime int64 `json:"send_code_time"`
}
type SendSmsRequest struct {
*requests.JsonRequest
Phone string `position:"Json" field:"phone"`
}
type SendSmsResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data SendSmsResp `json:"data"`
}
func CreateSendSmsRequest(param SendSmsReq) (req *SendSmsRequest) {
req = &SendSmsRequest{
JsonRequest: &requests.JsonRequest{},
Phone: param.Phone,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/user/send_sms")
req.Method = requests.POST
return
}
func CreateSendSmsResponse() (response *SendSmsResponse) {
response = &SendSmsResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}

View File

@ -75,3 +75,16 @@ func (c *Client) GetGameCompany(req *GetGameCompanyReq) (resp *GetGameCompanyRes
err = c.DoAction(req, resp) err = c.DoAction(req, resp)
return return
} }
// GetIsBlockOutIos 获取iOS切支付规则
func (c *Client) GetIsBlockOutIos(req *IsBlockOutIosReq) (resp *IsBlockOutIosResp, err error) {
resp = CreateIsBlockOutIosResp()
err = c.DoAction(req, resp)
return
}
func (c *Client) GetGameVersion(req *GetGameVersionReq) (resp *GetGameVersionResp, err error) {
resp = CreateGetGameVersionResp()
err = c.DoAction(req, resp)
return
}

View File

@ -120,3 +120,17 @@ func TestGetGameCompany(t *testing.T) {
fmt.Println(gameCompany) fmt.Println(gameCompany)
fmt.Println(gameCompany.Data.System) fmt.Println(gameCompany.Data.System)
} }
func TestIsBlockOutIos(t *testing.T) {
client, err := NewClient()
if err != nil {
t.Error(err)
}
isBlockOutIosReq := CreateIsBlockOutIosReq("ec63860282", 4570, "116.26.129.38", "", 0, 0)
isBlockOutIos, err := client.GetIsBlockOutIos(isBlockOutIosReq)
if err != nil {
t.Error(err)
return
}
t.Log(isBlockOutIos)
}

View File

@ -89,7 +89,7 @@ type GameInfoData struct {
Discount int `json:"discount"` Discount int `json:"discount"`
Divide int `json:"divide"` Divide int `json:"divide"`
DownloadDomain string `json:"download_domain"` DownloadDomain string `json:"download_domain"`
DownloadId int `json:"download_id"` DownloadId string `json:"download_id"`
ExchangeRate int `json:"exchange_rate"` ExchangeRate int `json:"exchange_rate"`
ExtData string `json:"ext_data"` ExtData string `json:"ext_data"`
Fcmathod int `json:"fcmathod"` Fcmathod int `json:"fcmathod"`
@ -99,6 +99,8 @@ type GameInfoData struct {
FlashAuthLogo string `json:"flash_auth_logo"` FlashAuthLogo string `json:"flash_auth_logo"`
FlashAuthName string `json:"flash_auth_name"` FlashAuthName string `json:"flash_auth_name"`
FlashAuthStatus int `json:"flash_auth_status"` FlashAuthStatus int `json:"flash_auth_status"`
FlashPassId string `json:"flash_pass_id"`
FlashPassKey string `json:"flash_pass_key"`
GameByname string `json:"game_byname"` GameByname string `json:"game_byname"`
GameIconImg string `json:"game_icon_img"` GameIconImg string `json:"game_icon_img"`
GameSign string `json:"game_sign"` GameSign string `json:"game_sign"`
@ -208,7 +210,7 @@ func CreateGetGameSimpleListResp() *GetGameSimpleListResp {
} }
// GameCompany // GameCompany
// 获取根游戏记录 // ==== 获取根游戏信息
type GameCompany struct { type GameCompany struct {
Id int `json:"id"` Id int `json:"id"`
GameSign string `json:"game_sign"` GameSign string `json:"game_sign"`
@ -255,3 +257,61 @@ func CreateGetGameCompanyResp() *GetGameCompanyResp {
BaseResponse: &responses.BaseResponse{}, BaseResponse: &responses.BaseResponse{},
} }
} }
// ==== 获取游戏客户端版本配置
type GameVersion struct {
ID int `json:"id"`
GameID int `json:"game_id"`
GameVersion string `json:"version"`
GameURL string `json:"url"`
PayCallbackURL string `json:"pay_callback_url"`
DomainURL string `json:"domain_url"`
Status int `json:"status"`
H5Version int `json:"h5_version"`
H5Status int `json:"h5_status"`
IsH5Logout int `json:"is_h5_logout"`
HideWindow int `json:"hidewindow"`
PayInfo PayInfo `json:"pay_display_info"`
IsYsdk int `json:"is_ysdk"`
CheckVerified int `json:"check_verified"`
Company string `json:"company"`
CompanyKf string `json:"company_kf"`
CompanyProto string `json:"company_proto"`
CompanySms string `json:"company_sms"`
KfStatus int `json:"kf_status"`
PopupTime int `json:"popup_time"`
ExtData map[string]any `json:"ext_data"`
VersionStatus int `json:"version_status"`
VersionTime int `json:"version_time"`
}
type GetGameVersionReq struct {
*requests.RpcRequest
GameId int `position:"Body" field:"game_id"`
GameVersion string `position:"Body" field:"game_version"`
}
type GetGameVersionResp struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data GameVersion `json:"data"`
}
func CreateGetGameVersionReq(gameId int, gameVersion string) *GetGameVersionReq {
req := &GetGameVersionReq{
RpcRequest: &requests.RpcRequest{},
}
req.GameId = gameId
req.GameVersion = gameVersion
req.InitWithApiInfo(HOST, VERSION, "/api/game/getGameVersion")
req.Method = requests.POST
return req
}
func CreateGetGameVersionResp() *GetGameVersionResp {
return &GetGameVersionResp{
BaseResponse: &responses.BaseResponse{},
}
}

60
services/game/pay.go Normal file
View File

@ -0,0 +1,60 @@
package game
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
// IsBlockOutIosReq
// 获取切支付规则
type IsBlockOutIosReq struct {
*requests.RpcRequest
UserName string `position:"Body" field:"user_name"`
GameId int64 `position:"Body" field:"appid"`
Ip string `position:"Body" field:"ip"`
Imei string `position:"Body" field:"imei"`
LoginDays int64 `position:"Body" field:"login_days"`
PlayTime int64 `position:"Body" field:"play_time"`
}
type IsBlockOutIosRespData struct {
PayInChannel bool `json:"pay_in_channel"`
PayInChannelMatchedRule []int64 `json:"pay_in_channel_matched_rule"`
DoDisplayIos bool `json:"do_display_ios"`
DoDisplayIosMatchedRule []int64 `json:"do_display_ios_matched_rule"`
DoDisplayWebsite bool `json:"do_display_website"`
DoDisplayWebsiteMatchedRule []int64 `json:"do_display_website_matched_rule"`
DoDisplayWebsiteWechatInfo string `json:"do_display_website_wechat_info"`
DoWebOrderPay bool `json:"do_web_order_pay"`
DoWebOrderPayMatchedRule []int64 `json:"do_web_order_pay_matched_rule"`
DoWebOrderPayWechatInfo string `json:"do_web_order_pay_wechat_info"`
}
type IsBlockOutIosResp struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data IsBlockOutIosRespData `json:"data"`
}
func CreateIsBlockOutIosReq(userName string, gameId int64, ip string, imei string, loginDays, playTime int64) *IsBlockOutIosReq {
req := &IsBlockOutIosReq{
RpcRequest: &requests.RpcRequest{},
}
req.UserName = userName
req.GameId = gameId
req.Ip = ip
req.Imei = imei
req.LoginDays = loginDays
req.PlayTime = playTime
req.InitWithApiInfo(HOST, VERSION, "/api/pay/isBlockOutIos")
req.Method = requests.POST
return req
}
func CreateIsBlockOutIosResp() *IsBlockOutIosResp {
resp := &IsBlockOutIosResp{
BaseResponse: &responses.BaseResponse{},
}
return resp
}

36
services/ip/client.go Normal file
View File

@ -0,0 +1,36 @@
package ip
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
)
const (
VERSION = "2025-06-24"
)
var HOST = requests.Host{
Default: "ip",
}
type Client struct {
sdk.Client
}
func NewClient() (client *Client, err error) {
client = new(Client)
err = client.Init()
return
}
func (client *Client) CreateGetIpRequest(req *IpRequest) (resp *IpResponse, err error) {
resp = CreateIpResponse()
err = client.DoAction(req, resp)
return
}
func (client *Client) CreateGetIpsRequest(req *IpsRequest) (resp *IpsResponse, err error) {
resp = CreateIpsResponse()
err = client.DoAction(req, resp)
return
}

View File

@ -0,0 +1,48 @@
package ip
import (
"fmt"
"testing"
)
// 测试获取单个ip地区信息
func TestGetIp(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateIpRequest(IpParam{
Ip: "114.234.202.136",
})
res, doErr := client.CreateGetIpRequest(req)
if doErr != nil {
panic(doErr)
}
if res.Code != 0 {
t.Error("查询多个ip失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}
// 测试获取多个ip地区信息
func TestGetIps(t *testing.T) {
client, newErr := NewClient()
if newErr != nil {
panic(newErr)
}
req := CreateIpsRequest(IpsParam{
Ips: []string{
"2001:ee0:5208:e600:4c51:3189:28a4:b668",
"114.234.202.136",
},
})
res, err := client.CreateGetIpsRequest(req)
if err != nil {
t.Error(err)
return
}
if res.Code != 0 {
t.Error("查询多个ip失败")
}
fmt.Printf(fmt.Sprintf("%v", res))
}

100
services/ip/ip.go Normal file
View File

@ -0,0 +1,100 @@
package ip
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
type IpInfo struct {
Ip string `json:"ip"`
City string `json:"city"`
Province string `json:"province"`
Country string `json:"country"`
Isp string `json:"isp"`
Owner string `json:"owner"`
Continent string `json:"continent"`
Accuracy string `json:"accuracy"`
Adcode string `json:"adcode"`
Areacode string `json:"areacode"`
Asnumber string `json:"asnumber"`
Radius string `json:"radius"`
Latwgs string `json:"latwgs"`
Lngwgs string `json:"lngwgs"`
Source string `json:"source"`
Timezone string `json:"timezone"`
Zipcode string `json:"zipcode"`
District string `json:"district"`
}
// IpsParam
// 单个ip请求参数
type IpParam struct {
Ip string `json:"ip"`
}
type IpRequest struct {
*requests.JsonRequest
Ip string `position:"Json" field:"ip"`
}
// IpResponse
// 单个ip返回参数
type IpResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data IpInfo `json:"data"`
}
// CreateIpRequest
// 同时支持ipv4、ipv6格式查询
func CreateIpRequest(param IpParam) (req *IpRequest) {
req = &IpRequest{
JsonRequest: &requests.JsonRequest{},
Ip: param.Ip,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/getIp")
req.Method = requests.POST
return
}
func CreateIpResponse() (resp *IpResponse) {
resp = &IpResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}
// 多个ip请求参数
type IpsParam struct {
Ips []string `json:"ips"`
}
type IpsRequest struct {
*requests.JsonRequest
Ips []string `position:"Json" field:"ips"`
}
// IpsResponse
// 多个ip返回参数
type IpsResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data map[string]IpInfo `json:"data"`
}
// CreateIpsRequest
// 同时支持ipv4、ipv6格式查询
func CreateIpsRequest(param IpsParam) (req *IpsRequest) {
req = &IpsRequest{
JsonRequest: &requests.JsonRequest{},
Ips: param.Ips,
}
req.InitWithApiInfo(HOST, VERSION, "/v1/getIps")
req.Method = requests.POST
return
}
func CreateIpsResponse() (resp *IpsResponse) {
resp = &IpsResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}

View File

@ -33,3 +33,14 @@ func (c *Client) OpenGame(req *OpenGameReq) (resp *OpenGameResp, err error) {
return return
} }
// NewPayRedisData 设置支付redis相关数据
func (c *Client) NewPayRedisData(req *NewPayRedisDataReq) (resp *NewPayRedisDataResp, err error) {
resp = CreateNewPayRedisDataResp()
err = c.DoAction(req, resp)
if err != nil {
return
}
return
}

View File

@ -19,3 +19,18 @@ func TestOpenGame(t *testing.T) {
fmt.Println(resp.Code, resp.Msg) fmt.Println(resp.Code, resp.Msg)
} }
func TestNewPayRedisData(t *testing.T) {
client, err := NewClient()
if err != nil {
panic(err)
}
req := CreateNewPayRedisDataReq()
resp, err := client.NewPayRedisData(req)
if err != nil {
panic(err)
}
fmt.Println(resp.Code, resp.Msg)
}

View File

@ -15,6 +15,14 @@ type OpenGameResp struct {
*responses.BaseResponse *responses.BaseResponse
} }
type NewPayRedisDataReq struct {
*requests.RpcRequest
}
type NewPayRedisDataResp struct {
*responses.BaseResponse
}
// GetHttpContentBytes 因为http://script.gaore.com/open_game.php?game_id=这个接口返回的不是json反序列化会报错所以返回一个固定的json // GetHttpContentBytes 因为http://script.gaore.com/open_game.php?game_id=这个接口返回的不是json反序列化会报错所以返回一个固定的json
func (baseResponse *OpenGameResp) GetHttpContentBytes() []byte { func (baseResponse *OpenGameResp) GetHttpContentBytes() []byte {
b, _ := json.Marshal(map[string]interface{}{"code": 200, "msg": "success"}) b, _ := json.Marshal(map[string]interface{}{"code": 200, "msg": "success"})
@ -40,3 +48,21 @@ func CreateOpenGameResp() *OpenGameResp {
BaseResponse: &responses.BaseResponse{}, BaseResponse: &responses.BaseResponse{},
} }
} }
// CreateNewPayRedisDataReq 设置支付redis相关数据
func CreateNewPayRedisDataReq() *NewPayRedisDataReq {
req := &NewPayRedisDataReq{
&requests.RpcRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "pay/new_pay_redis_data.php")
req.Method = requests.GET
return req
}
func CreateNewPayRedisDataResp() *NewPayRedisDataResp {
return &NewPayRedisDataResp{
BaseResponse: &responses.BaseResponse{},
}
}

View File

@ -3,6 +3,7 @@ package stat
import ( import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"time"
) )
const ( const (
@ -49,3 +50,17 @@ func (c *Client) GetAgentList(req *GetAgentListReq) (resp *GetAgentListResp, err
} }
return return
} }
// GetUserRoleRegPage 获取用户角色注册分页列表
func (c *Client) GetUserRoleRegPage(req *UserRoleRegReq) (resp *UserRoleRegResp, err error) {
resp = CreateUserRoleRegPageResp()
// 设置超时时间
req.SetConnectTimeout(10 * time.Second)
// 设置读取超时时间
req.SetReadTimeout(20 * time.Second)
err = c.DoAction(req, resp)
if err != nil {
return
}
return
}

View File

@ -78,3 +78,23 @@ func TestClient_GetAgentList(t *testing.T) {
t.Log("GetAgentList test passed") t.Log("GetAgentList test passed")
} }
} }
// TestClient_GetUserRoleRegPage 查询用户角色注册分页
func TestClient_GetUserRoleRegPage(t *testing.T) {
client, err := NewClient()
if err != nil {
panic(err)
}
req := CreateUserRoleRegPageReq(UserRoleRegParam{
Page: 1,
PageSize: 10,
RoleId: "",
RoleName: "温文波箐魔灵",
})
resp, err := client.GetUserRoleRegPage(req)
if err != nil {
panic(err)
}
fmt.Println(resp.Code, resp.Msg, resp.Data)
}

View File

@ -57,3 +57,59 @@ func CreateSetUserNewGameAuthResp() *SetUserNewGameAuthResp {
BaseResponse: &responses.BaseResponse{}, BaseResponse: &responses.BaseResponse{},
} }
} }
// ------------------------------------
// UserRoleReg 玩家汇总角色创建记录
type UserRoleReg struct {
UserName string `json:"user_name"`
Uid string `json:"uid"`
RoleId string `json:"role_id"`
RoleName string `json:"role_name"`
GameSign string `json:"game_sign"`
Id string `json:"id"`
CreatedAt string `json:"created_at"`
}
type UserRoleRegPage struct {
Page int `json:"page"`
TotalCount int `json:"total_count"`
PageSize int `json:"page_size"`
Data []UserRoleReg `json:"data"`
}
type UserRoleRegParam struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
RoleId string `json:"role_id"`
RoleName string `json:"role_name"`
}
type UserRoleRegReq struct {
*requests.RpcRequest
}
type UserRoleRegResp struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data UserRoleRegPage `json:"data"`
}
func CreateUserRoleRegPageReq(param UserRoleRegParam) *UserRoleRegReq {
req := &UserRoleRegReq{
&requests.RpcRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/user/getRoleRegPage")
req.Method = requests.POST
req.FormParams = map[string]string{
"page": fmt.Sprintf("%v", param.Page),
"page_size": fmt.Sprintf("%v", param.PageSize),
"role_id": param.RoleId,
"role_name": param.RoleName,
}
return req
}
func CreateUserRoleRegPageResp() *UserRoleRegResp {
return &UserRoleRegResp{
BaseResponse: &responses.BaseResponse{},
}
}