Compare commits
52 Commits
Author | SHA1 | Date | |
---|---|---|---|
eb6157ce05 | |||
a329d30296 | |||
|
49c41fb60b | ||
|
384d257e03 | ||
e1c163ef10 | |||
45e449df11 | |||
90cc6c3719 | |||
|
b0027fd6e3 | ||
|
0b9b6ec0d9 | ||
e4b852e4a6 | |||
efaf155924 | |||
|
ef5d453838 | ||
|
a274190b01 | ||
|
eea0eb790e | ||
|
de55d3d7d5 | ||
6d3f8d8232 | |||
089a9091ec | |||
ba79540f78 | |||
7e9eae718c | |||
25552dd187 | |||
|
eb25c8f20a | ||
|
92868ce4a0 | ||
|
f3a11907ee | ||
|
e79d0819ad | ||
|
32ba08b231 | ||
|
c0ced849fc | ||
|
ce7d7f2ee7 | ||
|
bc565ac059 | ||
|
6a7cfdc82f | ||
|
73ca794581 | ||
|
a5e43aa59a | ||
|
2ab968dfb2 | ||
|
b69ed4b807 | ||
|
607dbc87c6 | ||
|
d3f303e20c | ||
|
b282de0a2f | ||
|
abb6cc61fb | ||
|
7e664f3f29 | ||
|
abca5f01ed | ||
|
34de4b0401 | ||
|
71b93169e2 | ||
|
7dc4a177f9 | ||
|
9591e794f0 | ||
|
055fb8abb9 | ||
3652d43f34 | |||
|
7c96d7163b | ||
|
561eb1416a | ||
|
b9a481e71b | ||
5a8de98af3 | |||
6c3dfae18b | |||
b29010cac6 | |||
792d13fa32 |
services
cs
game
ip
oss
passport
pay
script
sms
stat
134
services/cs/client.go
Normal file
134
services/cs/client.go
Normal 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
406
services/cs/client_test.go
Normal 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
120
services/cs/faq.go
Normal 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
314
services/cs/order.go
Normal 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
135
services/cs/orderrecord.go
Normal 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
|
||||||
|
}
|
55
services/cs/ordertemplate.go
Normal file
55
services/cs/ordertemplate.go
Normal 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
BIN
services/cs/test.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 25 KiB |
157
services/cs/user.go
Normal file
157
services/cs/user.go
Normal 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
|
||||||
|
}
|
@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
VERSION = "2025-04-27"
|
VERSION = "2025-05-28"
|
||||||
)
|
)
|
||||||
|
|
||||||
var HOST = requests.Host{
|
var HOST = requests.Host{
|
||||||
@ -54,3 +54,37 @@ func (c *Client) GetProtocolByGameId(req *GetProtocolByGameIdRep) (resp *GetProt
|
|||||||
err = c.DoAction(req, resp)
|
err = c.DoAction(req, resp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGameSimpleList 获取子游戏简单列表
|
||||||
|
func (c *Client) GetGameSimpleList(req *GetGameSimpleListReq) (resp *GetGameSimpleListResp, err error) {
|
||||||
|
resp = CreateGetGameSimpleListResp()
|
||||||
|
err = c.DoAction(req, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetGameServerV2 获取游戏服务器列表v2
|
||||||
|
func (c *Client) GetGameServerV2(req *GetServerV2Request) (resp *GetServerV2Response, err error) {
|
||||||
|
resp = CreateGetServerV2Response()
|
||||||
|
err = c.DoAction(req, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetGameCompany 获取单个根游戏信息
|
||||||
|
func (c *Client) GetGameCompany(req *GetGameCompanyReq) (resp *GetGameCompanyResp, err error) {
|
||||||
|
resp = CreateGetGameCompanyResp()
|
||||||
|
err = c.DoAction(req, resp)
|
||||||
|
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
|
||||||
|
}
|
||||||
|
@ -77,3 +77,60 @@ func TestGetProtocolByGameId(t *testing.T) {
|
|||||||
}
|
}
|
||||||
fmt.Println(info)
|
fmt.Println(info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetGameSimpleList(t *testing.T) {
|
||||||
|
client, err := NewClient()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
req := CreateGetGameSimpleListReq("8071,8062", "")
|
||||||
|
info, err := client.GetGameSimpleList(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetGameServerV2(t *testing.T) {
|
||||||
|
client, newErr := NewClient()
|
||||||
|
if newErr != nil {
|
||||||
|
panic(newErr)
|
||||||
|
}
|
||||||
|
req := CreateGetServerV2Request("n2", "", "")
|
||||||
|
info, err := client.GetGameServerV2(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetGameCompany(t *testing.T) {
|
||||||
|
client, err := NewClient()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
req := CreateGetGameCompanyReq("ascq")
|
||||||
|
gameCompany, err := client.GetGameCompany(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println(gameCompany)
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
@ -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"`
|
||||||
@ -162,3 +164,154 @@ func CreateGetGameInfoByIdResp() *GetGameInfoResp {
|
|||||||
BaseResponse: &responses.BaseResponse{},
|
BaseResponse: &responses.BaseResponse{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetGameSimpleListReq struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetGameSimpleListResp struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data map[string]GameSimple `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GameSimple struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
GameSign string `json:"game_sign"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGetGameSimpleListReq
|
||||||
|
// gids 子游戏字符串,多个子游戏id用英文逗号分割
|
||||||
|
// game_signs 根游戏标识字符串,多个标识用英文逗号分割
|
||||||
|
func CreateGetGameSimpleListReq(gameIds string, gameSigns string) *GetGameSimpleListReq {
|
||||||
|
req := &GetGameSimpleListReq{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/api/game/getSimpleList")
|
||||||
|
tmpParams := make(map[string]string)
|
||||||
|
if gameIds != "" {
|
||||||
|
tmpParams["gids"] = gameIds
|
||||||
|
}
|
||||||
|
if gameSigns != "" {
|
||||||
|
tmpParams["game_signs"] = gameSigns
|
||||||
|
}
|
||||||
|
req.FormParams = tmpParams
|
||||||
|
|
||||||
|
req.Method = requests.POST
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetGameSimpleListResp() *GetGameSimpleListResp {
|
||||||
|
return &GetGameSimpleListResp{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GameCompany
|
||||||
|
// ==== 获取根游戏信息
|
||||||
|
type GameCompany struct {
|
||||||
|
Id int `json:"id"`
|
||||||
|
GameSign string `json:"game_sign"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
GameName string `json:"game_name"`
|
||||||
|
ContractName string `json:"contract_name"`
|
||||||
|
PayKey string `json:"pay_key"`
|
||||||
|
LoginKey string `json:"login_key"`
|
||||||
|
LoginUrlH5 string `json:"login_url_h5"`
|
||||||
|
LoginUrlIos string `json:"login_url_ios"`
|
||||||
|
LoginUrlAndroid string `json:"login_url_android"`
|
||||||
|
PayUrl string `json:"pay_url"`
|
||||||
|
Ext string `json:"ext"`
|
||||||
|
Status int `json:"status"`
|
||||||
|
Company string `json:"company"`
|
||||||
|
System string `json:"system"`
|
||||||
|
Sync int `json:"sync"`
|
||||||
|
Type int `json:"type"`
|
||||||
|
GameProductId int `json:"game_product_id"`
|
||||||
|
}
|
||||||
|
type GetGameCompanyReq struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
type GetGameCompanyResp struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data GameCompany `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetGameCompanyReq(gameSign string) *GetGameCompanyReq {
|
||||||
|
req := &GetGameCompanyReq{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/api/game/getGameCompanyBySign")
|
||||||
|
req.FormParams = map[string]string{
|
||||||
|
"gameSign": gameSign,
|
||||||
|
}
|
||||||
|
req.Method = requests.POST
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
func CreateGetGameCompanyResp() *GetGameCompanyResp {
|
||||||
|
return &GetGameCompanyResp{
|
||||||
|
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{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
107
services/game/game_server.go
Normal file
107
services/game/game_server.go
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
package game
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
gameServerKey = "gaoreapi"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetGameServerSign 子游戏区服信息,特有验签
|
||||||
|
func GetGameServerSign(gameId int) (ts int64, sign string) {
|
||||||
|
ts = time.Now().Unix()
|
||||||
|
hash := md5.New()
|
||||||
|
hash.Write([]byte(fmt.Sprintf("%v%v%v", gameId, ts, gameServerKey)))
|
||||||
|
hashBytes := hash.Sum(nil)
|
||||||
|
sign = hex.EncodeToString(hashBytes)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetServerIdRequest struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetServerIdResponse struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data map[string]string `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGetServerIdRequest
|
||||||
|
// Deprecated 方法已废弃,不要用
|
||||||
|
func CreateGetServerIdRequest(gameId int) (req *GetServerIdRequest) {
|
||||||
|
req = &GetServerIdRequest{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/api/game/getServerId")
|
||||||
|
// 获取时间戳、签名
|
||||||
|
ts, sign := GetGameServerSign(gameId)
|
||||||
|
|
||||||
|
req.FormParams = map[string]string{
|
||||||
|
"appid": fmt.Sprintf("%v", gameId),
|
||||||
|
"time": fmt.Sprintf("%v", ts),
|
||||||
|
"sign": sign,
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Method = requests.POST
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGetServerIdResponse
|
||||||
|
// Deprecated 方法已废弃,不要用
|
||||||
|
func CreateGetServerIdResponse() (response *GetServerIdResponse) {
|
||||||
|
response = &GetServerIdResponse{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------游戏区服v2列表查询----------
|
||||||
|
|
||||||
|
// GetServerV2Request 请求结构体
|
||||||
|
type GetServerV2Request struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetServerV2Response struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data []GameServerV2 `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GameServerV2 struct {
|
||||||
|
ServerId int `json:"server_id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
GameSign string `json:"game_sign"`
|
||||||
|
ServerSign int `json:"server_sign"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetServerV2Request(gameSign string, serverSigns string, types string) (req *GetServerV2Request) {
|
||||||
|
req = &GetServerV2Request{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/api/game/getServerV2")
|
||||||
|
|
||||||
|
req.FormParams = map[string]string{
|
||||||
|
"game_sign": gameSign,
|
||||||
|
"server_signs": serverSigns,
|
||||||
|
"types": types,
|
||||||
|
}
|
||||||
|
req.Method = requests.POST
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetServerV2Response() (response *GetServerV2Response) {
|
||||||
|
response = &GetServerV2Response{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
@ -13,11 +13,13 @@ type GetLoginInfoByIdReq struct {
|
|||||||
UserName string `position:"Body" field:"uname"`
|
UserName string `position:"Body" field:"uname"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type GetLoginInfoByIdResp struct {
|
type PayInfo struct {
|
||||||
*responses.BaseResponse
|
HiddenAlipay int `json:"hide_alipay"`
|
||||||
Code int `json:"code"`
|
HiddenWx int `json:"hide_wx"`
|
||||||
Msg string `json:"msg"`
|
HiddenUnionPay int `json:"hide_union_pay"`
|
||||||
Data struct {
|
}
|
||||||
|
|
||||||
|
type GameVersionInfo struct {
|
||||||
AppName string `json:"app_name"`
|
AppName string `json:"app_name"`
|
||||||
AppID string `json:"app_id"`
|
AppID string `json:"app_id"`
|
||||||
LoginURL string `json:"login_url"`
|
LoginURL string `json:"login_url"`
|
||||||
@ -29,25 +31,27 @@ type GetLoginInfoByIdResp struct {
|
|||||||
GameVersion string `json:"version"`
|
GameVersion string `json:"version"`
|
||||||
GameSign string `json:"game_sign"`
|
GameSign string `json:"game_sign"`
|
||||||
GameSignName string `json:"game_sign_name"`
|
GameSignName string `json:"game_sign_name"`
|
||||||
GameSignID string `json:"game_sign_id"`
|
GameSignID int `json:"game_sign_id"`
|
||||||
IsYsdk int `json:"is_ysdk"`
|
IsYsdk int `json:"is_ysdk"`
|
||||||
Company string `json:"company"`
|
Company string `json:"company"`
|
||||||
CompanyKf string `json:"company_kf"`
|
CompanyKf string `json:"company_kf"`
|
||||||
CompanyProto string `json:"company_proto"`
|
CompanyProto string `json:"company_proto"`
|
||||||
CompanySms string `json:"company_sms"`
|
CompanySms string `json:"company_sms"`
|
||||||
KfStatus string `json:"kf_status"`
|
KfStatus int `json:"kf_status"`
|
||||||
PopupTime int `json:"popup_time"`
|
PopupTime int `json:"popup_time"`
|
||||||
PayInfo struct {
|
GameId int `json:"game_id"`
|
||||||
HiddenAlipay int `json:"hide_alipay"`
|
ScreenType int `json:"screen_type"`
|
||||||
HiddenWx int `json:"hide_wx"`
|
|
||||||
HiddenUnionPay int `json:"hide_union_pay"`
|
|
||||||
} `json:"pay_info"`
|
|
||||||
GameID string `json:"game_id"`
|
|
||||||
ScreenType string `json:"screen_type"`
|
|
||||||
GameSwitch int `json:"game_switch"` // 根据上下文,0 或 1 的整数表示布尔值
|
GameSwitch int `json:"game_switch"` // 根据上下文,0 或 1 的整数表示布尔值
|
||||||
ExtData map[string]any `json:"ext_data"`
|
ExtData map[string]any `json:"ext_data"`
|
||||||
OsName string `json:"os_name"`
|
OsName string `json:"os_name"`
|
||||||
} `json:"data"`
|
PayInfo PayInfo `json:"pay_info"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetLoginInfoByIdResp struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data GameVersionInfo `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateGetLoginInfoByIdReq(gameId int, gameVersion string) *GetLoginInfoByIdReq {
|
func CreateGetLoginInfoByIdReq(gameId int, gameVersion string) *GetLoginInfoByIdReq {
|
||||||
|
60
services/game/pay.go
Normal file
60
services/game/pay.go
Normal 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
36
services/ip/client.go
Normal 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
|
||||||
|
}
|
48
services/ip/client_test.go
Normal file
48
services/ip/client_test.go
Normal 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
100
services/ip/ip.go
Normal 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
|
||||||
|
}
|
@ -31,7 +31,7 @@ func NewClientWithSts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) PutOss(req *PutOssRequest) (resp *PutOssResponse, err error) {
|
func (c *Client) PutOss(req *PutOssRequest) (resp *PutOssResponse, err error) {
|
||||||
if req.BucketName == "" {
|
if req.Bucket == "" {
|
||||||
err = errors.New("bucket name is empty")
|
err = errors.New("bucket name is empty")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,8 @@ import (
|
|||||||
|
|
||||||
func TestUpload_Put(t *testing.T) {
|
func TestUpload_Put(t *testing.T) {
|
||||||
req := CreatePutOssRequest()
|
req := CreatePutOssRequest()
|
||||||
req.BucketName = "image"
|
req.Bucket = "image"
|
||||||
|
//req.Bucket = "web"
|
||||||
file, err := os.ReadFile("test.jpg")
|
file, err := os.ReadFile("test.jpg")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
@ -26,7 +27,7 @@ func TestUpload_Put(t *testing.T) {
|
|||||||
|
|
||||||
func TestUpload_Del(t *testing.T) {
|
func TestUpload_Del(t *testing.T) {
|
||||||
req := CreateDelOssRequest()
|
req := CreateDelOssRequest()
|
||||||
req.BucketName = "image"
|
req.Bucket = "image"
|
||||||
req.MediaUrl = "https://image.89yoo.com/uploads/549/549e887460a72333c361661683023018.jpeg"
|
req.MediaUrl = "https://image.89yoo.com/uploads/549/549e887460a72333c361661683023018.jpeg"
|
||||||
client, err := NewClient()
|
client, err := NewClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
type DelOssRequest struct {
|
type DelOssRequest struct {
|
||||||
*requests.JsonRequest
|
*requests.JsonRequest
|
||||||
BucketName string `position:"Json" field:"bucket_name" default:"image"`
|
Bucket string `position:"Json" field:"bucket" default:"image"`
|
||||||
MediaUrl string `position:"Json" field:"url" default:"-"`
|
MediaUrl string `position:"Json" field:"url" default:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
type PutOssRequest struct {
|
type PutOssRequest struct {
|
||||||
*requests.StreamRequest
|
*requests.StreamRequest
|
||||||
BucketName string `position:"Query" field:"bucket_name" default:"image"`
|
Bucket string `position:"Query" field:"bucket" default:"image"`
|
||||||
FileStream []byte
|
FileStream []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,6 +17,7 @@ type PutOssResponse struct {
|
|||||||
Msg string `json:"msg"`
|
Msg string `json:"msg"`
|
||||||
Data struct {
|
Data struct {
|
||||||
Url string `json:"url"`
|
Url string `json:"url"`
|
||||||
|
SavePath string `json:"save_path"`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
42
services/passport/client.go
Normal file
42
services/passport/client.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package passport
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
VERSION = "2025-05-28"
|
||||||
|
// 对称加密密钥
|
||||||
|
appKey = "#gr*%com#"
|
||||||
|
)
|
||||||
|
|
||||||
|
var HOST requests.Host = requests.Host{
|
||||||
|
Default: "passport.gaore.com",
|
||||||
|
}
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
sdk.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient() (client *Client, err error) {
|
||||||
|
client = new(Client)
|
||||||
|
err = client.Init()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserList
|
||||||
|
// 获取用户列表
|
||||||
|
func (c *Client) GetUserList(req *GetUserListRequest) (response *GetUserListResponse, err error) {
|
||||||
|
response = CreateGetUserListResponse()
|
||||||
|
err = c.DoAction(req, response)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserRoleList
|
||||||
|
// 获取用户角色列表
|
||||||
|
func (c *Client) GetUserRoleList(req *GetUserRoleListRequest) (response *GetUserRoleListResponse, err error) {
|
||||||
|
response = CreateGetUserRoleListResponse()
|
||||||
|
err = c.DoAction(req, response)
|
||||||
|
return
|
||||||
|
}
|
33
services/passport/client_test.go
Normal file
33
services/passport/client_test.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package passport
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
// 单元测试
|
||||||
|
|
||||||
|
func TestGetUserList(t *testing.T) {
|
||||||
|
client, err := NewClient()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
req := CreateGetUserListRequest("ws45265737")
|
||||||
|
resp, err := client.GetUserList(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
t.Logf("resp code:%+v", resp.Code)
|
||||||
|
t.Logf("resp data:%+v", resp.Data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetUserRoleList(t *testing.T) {
|
||||||
|
client, err := NewClient()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
req := CreateGetUserRoleListRequest(63610626, 2850)
|
||||||
|
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)
|
||||||
|
}
|
114
services/passport/userinfo.go
Normal file
114
services/passport/userinfo.go
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
package passport
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GetUserListRequest struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetUserListResponse struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data []UserInfo `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserInfo struct {
|
||||||
|
UserName string `json:"user_name"` // 用户名
|
||||||
|
Uid string `json:"uid"` // uid
|
||||||
|
Telephone string `json:"telephone"` // 手机号
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGetUserListRequest 获取玩家用户列表
|
||||||
|
func CreateGetUserListRequest(userName string) (req *GetUserListRequest) {
|
||||||
|
ts, sign := GetSign()
|
||||||
|
|
||||||
|
req = &GetUserListRequest{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/remote_login.php")
|
||||||
|
req.FormParams = map[string]string{
|
||||||
|
"act": "info",
|
||||||
|
"do": "get_user_list",
|
||||||
|
"user_names": userName,
|
||||||
|
"time": fmt.Sprintf("%v", ts),
|
||||||
|
"sign": sign,
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Method = requests.POST
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetUserListResponse() (response *GetUserListResponse) {
|
||||||
|
response = &GetUserListResponse{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetUserRoleListRequest struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetUserRoleListResponse struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data []UserRoleInfo `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserRoleInfo struct {
|
||||||
|
Uid string `json:"uid"` // uid
|
||||||
|
GameId string `json:"game_id"` // 子游戏id
|
||||||
|
RoleId string `json:"role_id"` // 角色id
|
||||||
|
RoleName string `json:"role_name"` // 角色名
|
||||||
|
RoleServer string `json:"role_server"` // 角色服务器名
|
||||||
|
AddTime string `json:"add_time"` // 创建时间戳
|
||||||
|
UpdateTime string `json:"update_time"` // 更新时间戳
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSign 封装一个方法,获取当天时间戳和api签名
|
||||||
|
func GetSign() (ts int64, sign string) {
|
||||||
|
ts = time.Now().Unix()
|
||||||
|
hash := md5.New()
|
||||||
|
hash.Write([]byte(fmt.Sprintf("%v%v", ts, appKey)))
|
||||||
|
hashBytes := hash.Sum(nil)
|
||||||
|
sign = hex.EncodeToString(hashBytes)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGetUserRoleListRequest 获取玩家角色列表
|
||||||
|
func CreateGetUserRoleListRequest(uid int, gameId int) (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", uid),
|
||||||
|
"game_id": fmt.Sprintf("%d", gameId),
|
||||||
|
"time": fmt.Sprintf("%v", ts),
|
||||||
|
"sign": sign,
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Method = requests.POST
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetUserRoleListResponse() (response *GetUserRoleListResponse) {
|
||||||
|
response = &GetUserRoleListResponse{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
@ -54,3 +54,11 @@ func (c *Client) MerchantConfigDebug(req *merchantConfigDebugRequest) (response
|
|||||||
err = c.DoAction(req, response)
|
err = c.DoAction(req, response)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetOrderState
|
||||||
|
// 获取订单状态
|
||||||
|
func (c *Client) GetOrderState(req *GetOrderStateRequest) (response *GetOrderStateResponse, err error) {
|
||||||
|
response = CreateGetOrderStateResponse()
|
||||||
|
err = c.DoAction(req, response)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
@ -24,3 +24,18 @@ func TestClient_GetUserInfo(t *testing.T) {
|
|||||||
//fmt.Println(resp.GetHttpContentString())
|
//fmt.Println(resp.GetHttpContentString())
|
||||||
//fmt.Println(resp.GetHttpHeaders())
|
//fmt.Println(resp.GetHttpHeaders())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetOrderState(t *testing.T) {
|
||||||
|
getOrderStateRequest := CreateGetOrderStateRequest("202112060000193551730")
|
||||||
|
client, err := NewClient()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getOrderStateResponse, err := client.GetOrderState(getOrderStateRequest)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.Log(getOrderStateResponse.GetHttpContentString())
|
||||||
|
}
|
||||||
|
44
services/pay/get_order_state.go
Normal file
44
services/pay/get_order_state.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package pay
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GetOrderStateRequest struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
OrderId string `position:"Body" field:"orderid" default:"" `
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetOrderStateResponse struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
Code int `json:"code"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
Data struct {
|
||||||
|
Orderid string `json:"orderid"` // 订单号
|
||||||
|
Succ string `json:"succ"` // 是否成功
|
||||||
|
Money string `json:"money"` // 支付金额
|
||||||
|
UserName string `json:"user_name"` // 用户名
|
||||||
|
BNum string `json:"b_num"`
|
||||||
|
GameId string `json:"game_id"` // 游戏id
|
||||||
|
PayDate string `json:"pay_date"` // 付费日期
|
||||||
|
SyncDate string `json:"sync_date"` // 回调时间
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetOrderStateRequest(orderId string) (req *GetOrderStateRequest) {
|
||||||
|
req = &GetOrderStateRequest{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
OrderId: orderId,
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/api/user/getOrderState")
|
||||||
|
req.Method = requests.POST
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateGetOrderStateResponse() (response *GetOrderStateResponse) {
|
||||||
|
response = &GetOrderStateResponse{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
@ -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{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -15,7 +15,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var HOST = requests.Host{
|
var HOST = requests.Host{
|
||||||
Default: "sms.gaore.com:8804",
|
Default: "sms.gaore.com",
|
||||||
}
|
}
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
@ -83,17 +83,6 @@ func (c *Client) SendSms(req *SendSmsRequest) (resp *SendSmsResponse, err error)
|
|||||||
err = errors.New("type is empty")
|
err = errors.New("type is empty")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.Expired == 0 {
|
|
||||||
err = errors.New("expired is empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if req.Code == 0 {
|
|
||||||
err = errors.New("code is empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp = CreateSendSmsResponse()
|
resp = CreateSendSmsResponse()
|
||||||
err = c.DoAction(req, resp)
|
err = c.DoAction(req, resp)
|
||||||
return
|
return
|
||||||
|
@ -2,6 +2,7 @@ package sms
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -37,9 +38,9 @@ func TestClient_SendEmail(t *testing.T) {
|
|||||||
|
|
||||||
func TestClient_SendFeiShuWebHook(t *testing.T) {
|
func TestClient_SendFeiShuWebHook(t *testing.T) {
|
||||||
//req := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
//req := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||||
// Do: "sendCardText",
|
// Do: FeiShuWebHookDoTypeSendRichText,
|
||||||
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
||||||
// Content: "[{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"请完成以下任务:\"}},{\"tag\":\"action\",\"actions\":[{\"tag\":\"button\",\"text\":{\"tag\":\"plain_text\",\"content\":\"查看详情\"},\"type\":\"primary\",\"url\":\"https:\\\\\\\\/\\\\\\\\/example.com\\\\\\\\/task\"}]}]",
|
// Content: "[[{\"tag\":\"text\",\"text\":\"富文本信息: \"},{\"tag\":\"a\",\"text\":\"请查看\",\"href\":\"http://www.example.com/\"},{\"tag\":\"at\",\"user_id\":\"ou_18eac8********17ad4f02e8bbbb\"}]]",
|
||||||
// Title: "卡片主标题",
|
// Title: "卡片主标题",
|
||||||
// TitleColor: "purple",
|
// TitleColor: "purple",
|
||||||
//})
|
//})
|
||||||
@ -48,10 +49,10 @@ func TestClient_SendFeiShuWebHook(t *testing.T) {
|
|||||||
//if err != nil {
|
//if err != nil {
|
||||||
// panic(err)
|
// panic(err)
|
||||||
//}
|
//}
|
||||||
//fmt.Println(resp)
|
//fmt.Println(resp.Msg)
|
||||||
//
|
|
||||||
//req2 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
//req2 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||||
// Do: "sendSimpleText",
|
// Do: FeiShuWebHookDoTypeSendSimpleText,
|
||||||
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
||||||
// Content: " - 苹果ID:XXXX\n - 游戏ID:XXXX\n - bundleID:XXXX\n - 应用名:XXX\n - 下架时间:2025-04-18 12:36:52\n - IP:XX(城市A省份)、XX(城市B省份);说明:XX为具体的IP,括号内为IP对应的城市;",
|
// Content: " - 苹果ID:XXXX\n - 游戏ID:XXXX\n - bundleID:XXXX\n - 应用名:XXX\n - 下架时间:2025-04-18 12:36:52\n - IP:XX(城市A省份)、XX(城市B省份);说明:XX为具体的IP,括号内为IP对应的城市;",
|
||||||
//})
|
//})
|
||||||
@ -80,7 +81,7 @@ func TestClient_SendFeiShuWebHook(t *testing.T) {
|
|||||||
req3 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
req3 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||||
TitleColor: "purple",
|
TitleColor: "purple",
|
||||||
Title: "监控报警",
|
Title: "监控报警",
|
||||||
Do: "sendCardText",
|
Do: FeiShuWebHookDoTypeSendCardText,
|
||||||
Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
||||||
Content: "[{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"苹果ID:XXXX\"}},{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"游戏ID:XXXX\"}}]",
|
Content: "[{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"苹果ID:XXXX\"}},{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"游戏ID:XXXX\"}}]",
|
||||||
})
|
})
|
||||||
@ -93,14 +94,45 @@ func TestClient_SendFeiShuWebHook(t *testing.T) {
|
|||||||
fmt.Println(resp3)
|
fmt.Println(resp3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestClient_SendSms(t *testing.T) {
|
func TestClient_SendSmsCode(t *testing.T) {
|
||||||
req := CreateSendSmsRequest(SendSmsParam{
|
req := CreateSendSmsRequest(SendSmsParam{
|
||||||
Mobile: "18320021439",
|
Mobile: "18320021439",
|
||||||
Type: SmsTypeRegister,
|
Type: SmsTypeBindPhone,
|
||||||
Code: 123456,
|
Replaces: []Item{{
|
||||||
Expired: 5,
|
Key: ReplaceKeyCode,
|
||||||
|
Value: "6379",
|
||||||
|
}, {
|
||||||
|
Key: ReplaceKeySecond,
|
||||||
|
Value: "120",
|
||||||
|
}},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
req.Domain = requests.Host{
|
||||||
|
Default: "127.0.0.1:8804",
|
||||||
|
}
|
||||||
|
|
||||||
|
sms, err := client.SendSms(req)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(sms)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestClient_SendSmsUrl(t *testing.T) {
|
||||||
|
req := CreateSendSmsRequest(SendSmsParam{
|
||||||
|
Mobile: "18320021439",
|
||||||
|
Type: TemplateTypeOrderComplete,
|
||||||
|
Replaces: []Item{{
|
||||||
|
Key: ReplaceKeyUrl,
|
||||||
|
Value: "http://www.baidu.com",
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
|
||||||
|
req.Domain = requests.Host{
|
||||||
|
Default: "127.0.0.1:8804",
|
||||||
|
}
|
||||||
|
|
||||||
sms, err := client.SendSms(req)
|
sms, err := client.SendSms(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -32,7 +32,7 @@ func CreateSendEmailRequest(param SendEmailParam) (req *SendEmailRequest) {
|
|||||||
Body: param.Body,
|
Body: param.Body,
|
||||||
FromName: param.FromName,
|
FromName: param.FromName,
|
||||||
}
|
}
|
||||||
req.InitWithApiInfo(HOST, VERSION, "/email/send")
|
req.InitWithApiInfo(HOST, VERSION, "/v1/email/send")
|
||||||
req.Method = requests.POST
|
req.Method = requests.POST
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,16 @@ type SendFeiShuWebHookResponse struct {
|
|||||||
FeishuData string `json:"feishu_data"`
|
FeishuData string `json:"feishu_data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FeiShuWebHookDoType = string
|
||||||
|
|
||||||
|
const (
|
||||||
|
FeiShuWebHookDoTypeSendSimpleText FeiShuWebHookDoType = "sendSimpleText"
|
||||||
|
FeiShuWebHookDoTypeSendRichText FeiShuWebHookDoType = "sendRichText"
|
||||||
|
FeiShuWebHookDoTypeSendCardText FeiShuWebHookDoType = "sendCardText"
|
||||||
|
)
|
||||||
|
|
||||||
type SendFeiShuWebHookParam struct {
|
type SendFeiShuWebHookParam struct {
|
||||||
Do string
|
Do FeiShuWebHookDoType
|
||||||
Token string
|
Token string
|
||||||
Content string
|
Content string
|
||||||
Title string
|
Title string
|
||||||
@ -36,7 +44,7 @@ func CreateSendFeiShuWebHookRequest(param SendFeiShuWebHookParam) (req *SendFeiS
|
|||||||
Title: param.Title,
|
Title: param.Title,
|
||||||
TitleColor: param.TitleColor,
|
TitleColor: param.TitleColor,
|
||||||
}
|
}
|
||||||
req.InitWithApiInfo(HOST, VERSION, "/feishu/webhook_send")
|
req.InitWithApiInfo(HOST, VERSION, "/v1/feishu/webhook_send")
|
||||||
req.Method = requests.POST
|
req.Method = requests.POST
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,24 @@ import (
|
|||||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ReplaceKey = string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ReplaceKeyCode ReplaceKey = "${code}" // 验证码
|
||||||
|
ReplaceKeySecond ReplaceKey = "${second}" // 秒数
|
||||||
|
ReplaceKeyUrl ReplaceKey = "${url}" // 链接
|
||||||
|
)
|
||||||
|
|
||||||
|
type Item struct {
|
||||||
|
Key ReplaceKey // 要替换的key
|
||||||
|
Value string // 要替换的值
|
||||||
|
}
|
||||||
|
|
||||||
type SendSmsRequest struct {
|
type SendSmsRequest struct {
|
||||||
*requests.JsonRequest
|
*requests.JsonRequest
|
||||||
Mobile string `position:"Json" field:"mobile"`
|
Mobile string `position:"Json" field:"mobile"`
|
||||||
Type string `position:"Json" field:"type"`
|
Type string `position:"Json" field:"type"`
|
||||||
Expired int64 `position:"Json" field:"expired"`
|
Replaces []Item `position:"Json" field:"replaces"`
|
||||||
Code int64 `position:"Json" field:"code"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type SendSmsResponse struct {
|
type SendSmsResponse struct {
|
||||||
@ -21,13 +33,15 @@ type SmsType = string
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
SmsTypeRegister SmsType = "reg" // 注册
|
SmsTypeRegister SmsType = "reg" // 注册
|
||||||
|
SmsTypeBindPhone SmsType = "bind_phone" // 绑定手机号
|
||||||
|
TemplateTypeOrderComplete SmsType = "kf_order_complete" // 客服工单完成
|
||||||
|
TemplateTypeKFOrderAdditional SmsType = "kf_order_additional" // 客服工单完成
|
||||||
)
|
)
|
||||||
|
|
||||||
type SendSmsParam struct {
|
type SendSmsParam struct {
|
||||||
Mobile string // 手机号
|
Mobile string // 手机号
|
||||||
Type SmsType // 验证码类型
|
Type SmsType // 验证码类型
|
||||||
Expired int64 // 过期时间,秒数
|
Replaces []Item
|
||||||
Code int64 // 验证码
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateSendSmsRequest(param SendSmsParam) (req *SendSmsRequest) {
|
func CreateSendSmsRequest(param SendSmsParam) (req *SendSmsRequest) {
|
||||||
@ -35,10 +49,9 @@ func CreateSendSmsRequest(param SendSmsParam) (req *SendSmsRequest) {
|
|||||||
JsonRequest: &requests.JsonRequest{},
|
JsonRequest: &requests.JsonRequest{},
|
||||||
Mobile: param.Mobile,
|
Mobile: param.Mobile,
|
||||||
Type: param.Type,
|
Type: param.Type,
|
||||||
Expired: param.Expired,
|
Replaces: param.Replaces,
|
||||||
Code: param.Code,
|
|
||||||
}
|
}
|
||||||
req.InitWithApiInfo(HOST, VERSION, "/sms/agg/send")
|
req.InitWithApiInfo(HOST, VERSION, "/v1/sms/send")
|
||||||
req.Method = requests.POST
|
req.Method = requests.POST
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
@ -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{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user