Compare commits
133 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c81fa6be2c | ||
|
07bdfcb7b3 | ||
|
353e07b984 | ||
c753415404 | |||
|
743883792d | ||
|
f31c37759b | ||
0e4cb0c4ad | |||
|
ab3c9f33d0 | ||
|
e06a5867a7 | ||
|
23d59fad11 | ||
89250bd328 | |||
|
90c2b1213a | ||
|
c8e5c19dc7 | ||
|
5d0ba49e7e | ||
|
7d0deb756a | ||
|
3e45030be8 | ||
|
c0b4a0d83c | ||
|
7b904f4d5f | ||
|
13a6e20087 | ||
|
0f671231b5 | ||
|
011d446784 | ||
|
6c002a3917 | ||
|
1a0253c56b | ||
|
63f5bd86c0 | ||
|
f56cdad6d0 | ||
|
f296d38583 | ||
|
96132c6cba | ||
|
5e4a2468a7 | ||
9aa5924b97 | |||
|
66ee953f5f | ||
|
4b13de26bd | ||
|
e6d4532874 | ||
|
e30ecac33b | ||
|
b06b846be7 | ||
|
699a113863 | ||
|
22551147eb | ||
ade7ca2d03 | |||
|
51e0eaec33 | ||
f3ab307f18 | |||
28d51baaab | |||
|
d283be207b | ||
f902dccb54 | |||
|
2622e7c3c9 | ||
|
85ab17cfd6 | ||
|
d2c5d53aba | ||
eb4425350b | |||
|
68a9435cb7 | ||
|
13bf104d52 | ||
|
083c5a7ba1 | ||
66eb586d88 | |||
5f5a1160bf | |||
6a7beb5497 | |||
c02d5b5201 | |||
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 | |||
ce30ff4ef9 | |||
78d60083f7 | |||
bee78a0b12 | |||
c582fbf8ed | |||
|
14551a66b4 | ||
d8528ecbe8 | |||
b7bf3c7585 | |||
|
eae413bc00 | ||
631959c0ec | |||
4a8d29f57f | |||
4f63f8f302 | |||
956e294a2f | |||
30afd2cbe1 | |||
517d422993 | |||
721b735a0e | |||
e89f227e54 | |||
1902a769f8 | |||
857f7b9f90 | |||
5d941b865b | |||
e26c54c474 | |||
|
a7a0099cb8 | ||
|
e3cfca5bfa | ||
|
6ef4ff5389 | ||
4b55160177 | |||
1faace6bce | |||
995293926f | |||
675a48f7d1 | |||
f11735110f |
10
go.mod
Normal file
10
go.mod
Normal file
@ -0,0 +1,10 @@
|
||||
module golib.gaore.com/GaoreGo/gaore-common-sdk-go
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/json-iterator/go v1.1.12
|
||||
|
||||
require (
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
)
|
15
go.sum
Normal file
15
go.sum
Normal file
@ -0,0 +1,15 @@
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
@ -18,38 +18,40 @@ func signRpcRequest(request requests.AcsRequest, signer Signer) (err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if _, isContainsSign := request.GetQueryParams()["sign"]; isContainsSign {
|
||||
delete(request.GetQueryParams(), "sign")
|
||||
if signer != nil {
|
||||
if _, isContainsSign := request.GetQueryParams()["sign"]; isContainsSign {
|
||||
delete(request.GetQueryParams(), "sign")
|
||||
}
|
||||
stringToSign := buildRpcStringToSign(request)
|
||||
request.SetStringToSign(stringToSign)
|
||||
signature := signer.Sign(stringToSign, "&")
|
||||
request.GetQueryParams()["sign"] = signature
|
||||
debug("GrSdk sign: %s", signature)
|
||||
debug("GrSdk sign string: %s", stringToSign)
|
||||
debug("GrSdk sign: \r\n")
|
||||
}
|
||||
|
||||
stringToSign := buildRpcStringToSign(request)
|
||||
request.SetStringToSign(stringToSign)
|
||||
signature := signer.Sign(stringToSign, "&")
|
||||
request.GetQueryParams()["sign"] = signature
|
||||
debug("GrSdk sign: %s", signature)
|
||||
debug("GrSdk sign string: %s", stringToSign)
|
||||
debug("GrSdk sign: \r\n")
|
||||
return
|
||||
}
|
||||
|
||||
func completeRpcSignParams(request requests.AcsRequest, signer Signer) (err error) {
|
||||
if signer != nil {
|
||||
var accessKeyFrom string
|
||||
if accessKeyFrom, err = signer.GetAccessKeyFrom(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var accessKeyFrom string
|
||||
if accessKeyFrom, err = signer.GetAccessKeyFrom(); err != nil {
|
||||
return
|
||||
queryParams := request.GetQueryParams()
|
||||
queryParams["access_time"] = fmt.Sprintf("%d", time.Now().Unix())
|
||||
queryParams["access_key"], err = signer.GetAccessKeyId()
|
||||
queryParams["access_from"] = accessKeyFrom
|
||||
request.GetHeaders()["Gr-Sdk-From"] = accessKeyFrom
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
queryParams := request.GetQueryParams()
|
||||
queryParams["access_time"] = fmt.Sprintf("%d", time.Now().Unix())
|
||||
queryParams["access_key"], err = signer.GetAccessKeyId()
|
||||
queryParams["access_from"] = accessKeyFrom
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
request.GetHeaders()["Content-type"] = requests.Form
|
||||
request.GetHeaders()["Gr-Sdk-From"] = accessKeyFrom
|
||||
|
||||
formString := utils.GetUrlFormedMap(request.GetFormParams())
|
||||
request.SetContent(bytes.NewBufferString(formString).Bytes())
|
||||
return
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/json-iterator/go/extra"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/credentials"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
@ -18,6 +19,7 @@ import (
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -44,6 +46,27 @@ type Client struct {
|
||||
httpProxy string
|
||||
httpsProxy string
|
||||
noProxy string
|
||||
|
||||
header *requests.RefererHeader
|
||||
}
|
||||
|
||||
func (c *Client) SetRefererHeader(header *requests.RefererHeader) {
|
||||
c.header = header
|
||||
}
|
||||
|
||||
func (c *Client) GetRefererHeader() map[string]string {
|
||||
var header *requests.RefererHeader
|
||||
if c.header == nil {
|
||||
header = &requests.RefererHeader{
|
||||
TraceId: utils.MakeTraceId(),
|
||||
}
|
||||
} else {
|
||||
header = c.header
|
||||
}
|
||||
return map[string]string{
|
||||
"Referer": header.Referer,
|
||||
"Traceparent": header.TraceId,
|
||||
}
|
||||
}
|
||||
|
||||
func (client *Client) GetNoProxy() string {
|
||||
@ -89,11 +112,15 @@ func (client *Client) Init() (err error) {
|
||||
|
||||
func (client *Client) InitWithAccessKey(accessKeyId, accessKeySecret, accessKeyFrom string) (err error) {
|
||||
config := client.InitWithConfig()
|
||||
credential := &credentials.BaseCredential{
|
||||
AccessKeyId: accessKeyId,
|
||||
AccessKeySecret: accessKeySecret,
|
||||
AccessKeyFrom: accessKeyFrom,
|
||||
var credential auth.Credential
|
||||
if accessKeyId != "" {
|
||||
credential = &credentials.BaseCredential{
|
||||
AccessKeyId: accessKeyId,
|
||||
AccessKeySecret: accessKeySecret,
|
||||
AccessKeyFrom: accessKeyFrom,
|
||||
}
|
||||
}
|
||||
|
||||
return client.InitWithOptions(config, credential)
|
||||
}
|
||||
|
||||
@ -131,8 +158,9 @@ func (client *Client) InitWithOptions(config *Config, credential auth.Credential
|
||||
if config.Timeout > 0 {
|
||||
client.httpClient.Timeout = config.Timeout
|
||||
}
|
||||
|
||||
client.signer, err = auth.NewSignerWithCredential(credential, client.ProcessCommonRequestWithSigner)
|
||||
if credential != nil {
|
||||
client.signer, err = auth.NewSignerWithCredential(credential, client.ProcessCommonRequestWithSigner)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -211,7 +239,7 @@ func (client *Client) DoAction(request requests.AcsRequest, response responses.A
|
||||
}
|
||||
|
||||
func (client *Client) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse, signer auth.Signer) (err error) {
|
||||
|
||||
request.AddHeaders(client.GetRefererHeader())
|
||||
httpRequest, err := client.buildRequestWithSigner(request, signer)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -359,3 +387,10 @@ func (client *Client) getNoProxy(scheme string) []string {
|
||||
func hookDo(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
|
||||
return fn
|
||||
}
|
||||
|
||||
func init() {
|
||||
once := sync.Once{}
|
||||
once.Do(func() {
|
||||
extra.RegisterFuzzyDecoders()
|
||||
})
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ type JsonRequest struct {
|
||||
|
||||
func (request *JsonRequest) init() {
|
||||
request.baseRequest = defaultBaseRequest()
|
||||
request.baseRequest.AddHeaderParam("Content-Type", Json)
|
||||
request.Method = POST
|
||||
}
|
||||
|
||||
@ -35,12 +36,16 @@ func (request *JsonRequest) BuildUrl() string {
|
||||
}
|
||||
|
||||
func (request *JsonRequest) GetStyle() string {
|
||||
return RPC
|
||||
return STREAM
|
||||
}
|
||||
|
||||
func (request *JsonRequest) BuildQueries() string {
|
||||
path := strings.TrimLeft(strings.TrimSpace(request.GetActionName()), "/")
|
||||
request.queries = "/" + path + "?" + utils.GetUrlFormedMap(request.QueryParams)
|
||||
mod := "&"
|
||||
if !strings.Contains(path, "?") {
|
||||
mod = "?"
|
||||
}
|
||||
request.queries = "/" + path + mod + utils.GetUrlFormedMap(request.QueryParams)
|
||||
return request.queries
|
||||
}
|
||||
|
||||
@ -56,8 +61,8 @@ func (request *JsonRequest) InitWithApiInfo(domain Host, version, urlPath string
|
||||
}
|
||||
|
||||
func (request *JsonRequest) GetBodyReader() io.Reader {
|
||||
if request.FormParams != nil && len(request.FormParams) > 0 {
|
||||
body, err := json.Marshal(request.FormParams)
|
||||
if request.JsonParams != nil && len(request.JsonParams) > 0 {
|
||||
body, err := json.Marshal(request.JsonParams)
|
||||
if err == nil {
|
||||
return bytes.NewReader(body)
|
||||
}
|
||||
|
@ -32,15 +32,17 @@ const (
|
||||
HEAD = "HEAD"
|
||||
OPTIONS = "OPTIONS"
|
||||
|
||||
Json = "application/json"
|
||||
Xml = "application/xml"
|
||||
Raw = "application/octet-stream"
|
||||
Form = "application/x-www-form-urlencoded"
|
||||
Json = "application/json"
|
||||
Xml = "application/xml"
|
||||
Raw = "application/octet-stream"
|
||||
Form = "application/x-www-form-urlencoded"
|
||||
FormData = "multipart/form-data"
|
||||
|
||||
Header = "Header"
|
||||
Query = "Query"
|
||||
Body = "Body"
|
||||
Path = "Path"
|
||||
Header = "Header"
|
||||
Query = "Query"
|
||||
Body = "Body"
|
||||
BodyJson = "Json"
|
||||
Path = "Path"
|
||||
|
||||
TEST = "TEST"
|
||||
PRE = "PRE"
|
||||
@ -54,6 +56,11 @@ type Host struct {
|
||||
Func func(string) string
|
||||
}
|
||||
|
||||
type RefererHeader struct {
|
||||
Referer string
|
||||
TraceId string
|
||||
}
|
||||
|
||||
var debug utils.Debug
|
||||
|
||||
func init() {
|
||||
@ -93,8 +100,10 @@ type AcsRequest interface {
|
||||
GetBodyReader() io.Reader
|
||||
|
||||
AddHeaderParam(key, value string)
|
||||
AddHeaders(headers map[string]string)
|
||||
addQueryParam(key, value string)
|
||||
addFormParam(key, value string)
|
||||
addJsonParam(string, any)
|
||||
}
|
||||
|
||||
type baseRequest struct {
|
||||
@ -118,6 +127,7 @@ type baseRequest struct {
|
||||
QueryParams map[string]string
|
||||
Headers map[string]string
|
||||
FormParams map[string]string
|
||||
JsonParams map[string]any
|
||||
Content []byte
|
||||
|
||||
queries string
|
||||
@ -222,6 +232,12 @@ func (request *baseRequest) AddHeaderParam(key, val string) {
|
||||
request.Headers[key] = val
|
||||
}
|
||||
|
||||
func (request *baseRequest) AddHeaders(headers map[string]string) {
|
||||
for key, val := range headers {
|
||||
request.Headers[key] = val
|
||||
}
|
||||
}
|
||||
|
||||
func (request *baseRequest) addQueryParam(key, val string) {
|
||||
request.QueryParams[key] = val
|
||||
}
|
||||
@ -230,6 +246,10 @@ func (request *baseRequest) addFormParam(key, val string) {
|
||||
request.FormParams[key] = val
|
||||
}
|
||||
|
||||
func (request *baseRequest) addJsonParam(key string, val any) {
|
||||
request.JsonParams[key] = val
|
||||
}
|
||||
|
||||
func defaultBaseRequest() (request *baseRequest) {
|
||||
request = &baseRequest{
|
||||
Scheme: HTTP,
|
||||
@ -242,6 +262,7 @@ func defaultBaseRequest() (request *baseRequest) {
|
||||
"Accept-Encoding": Json,
|
||||
},
|
||||
FormParams: make(map[string]string),
|
||||
JsonParams: make(map[string]any),
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -290,14 +311,14 @@ func flatRepeatedList(reflectValue reflect.Value, request AcsRequest, position s
|
||||
value = fieldDefault
|
||||
}
|
||||
|
||||
err = addParam(request, fieldPosition, name, value)
|
||||
err = addParam(request, fieldPosition, name, value, reflectValue.Field(i).Interface())
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func addParam(request AcsRequest, position, key, value string) (err error) {
|
||||
func addParam(request AcsRequest, position, key, value string, vAny any) (err error) {
|
||||
if len(value) > 0 {
|
||||
switch position {
|
||||
case Header:
|
||||
@ -306,6 +327,8 @@ func addParam(request AcsRequest, position, key, value string) (err error) {
|
||||
request.addQueryParam(key, value)
|
||||
case Body:
|
||||
request.addFormParam(key, value)
|
||||
case BodyJson:
|
||||
request.addJsonParam(key, vAny)
|
||||
default:
|
||||
errmsg := fmt.Sprintf("unsupport positions add param `%s`", position)
|
||||
err = errors.New(errmsg)
|
||||
|
@ -13,6 +13,7 @@ type RpcRequest struct {
|
||||
|
||||
func (request *RpcRequest) init() {
|
||||
request.baseRequest = defaultBaseRequest()
|
||||
request.baseRequest.AddHeaderParam("Content-Type", Form)
|
||||
request.Method = POST
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ type StreamRequest struct {
|
||||
|
||||
func (s *StreamRequest) init() {
|
||||
s.baseRequest = defaultBaseRequest()
|
||||
s.baseRequest.AddHeaderParam("Content-Type", "application/form-data")
|
||||
s.baseRequest.AddHeaderParam("Content-Type", FormData)
|
||||
s.Method = POST
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
package responses
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/json-iterator/go"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@ -89,7 +89,7 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string)
|
||||
return
|
||||
}
|
||||
|
||||
if _, isCommonResponse := response.(CommonResponse); isCommonResponse {
|
||||
if _, isCommonResponse := response.(*CommonResponse); isCommonResponse {
|
||||
return
|
||||
}
|
||||
|
||||
@ -97,7 +97,10 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string)
|
||||
if contentType, ok := response.GetHttpHeaders()["Content-Type"]; ok {
|
||||
for _, v := range contentType {
|
||||
if strings.Contains(v, requests.Json) {
|
||||
json.Unmarshal(response.GetHttpContentBytes(), response)
|
||||
err = jsoniter.Unmarshal(response.GetHttpContentBytes(), response)
|
||||
if err != nil {
|
||||
return errors.New("json Unmarshal:" + err.Error())
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -108,10 +111,11 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string)
|
||||
}
|
||||
|
||||
if format != "xml" {
|
||||
err = json.Unmarshal(response.GetHttpContentBytes(), response)
|
||||
err = jsoniter.Unmarshal(response.GetHttpContentBytes(), response)
|
||||
if err != nil {
|
||||
return errors.New("json Unmarshal:" + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
69
sdk/utils/random/str_random.go
Normal file
69
sdk/utils/random/str_random.go
Normal file
@ -0,0 +1,69 @@
|
||||
package random
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
type Mode int // 随机数模式
|
||||
|
||||
const (
|
||||
Letter Mode = iota
|
||||
Number
|
||||
LetterNumber
|
||||
LetterHex
|
||||
)
|
||||
|
||||
const (
|
||||
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
numbers = "0123456789"
|
||||
lettersHex = "0123456789abcdef"
|
||||
letterIdBit = 6
|
||||
letterIdxMask = 1<<letterIdBit - 1
|
||||
letterIdxMax = 63 / letterIdBit
|
||||
)
|
||||
|
||||
func StrRandom(n int64) string {
|
||||
return Random(n, Letter)
|
||||
}
|
||||
|
||||
func NumRandom(n int64) string {
|
||||
return Random(n, Number)
|
||||
}
|
||||
|
||||
func Random(n int64, mode ...Mode) string {
|
||||
var baseStr string
|
||||
mode = append(mode, LetterNumber)
|
||||
switch mode[0] {
|
||||
case LetterHex:
|
||||
baseStr = lettersHex
|
||||
case Letter:
|
||||
baseStr = letters
|
||||
case Number:
|
||||
baseStr = numbers
|
||||
case LetterNumber:
|
||||
fallthrough
|
||||
default:
|
||||
baseStr = letters + numbers
|
||||
}
|
||||
return random(n, baseStr)
|
||||
}
|
||||
|
||||
func random(n int64, baseStr string) string {
|
||||
|
||||
var src = rand.NewSource(time.Now().UnixNano())
|
||||
b := make([]byte, n)
|
||||
for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; {
|
||||
if remain == 0 {
|
||||
cache, remain = src.Int63(), letterIdxMax
|
||||
}
|
||||
if idx := int(cache & letterIdxMask); idx < len(baseStr) {
|
||||
b[i] = baseStr[idx]
|
||||
i--
|
||||
}
|
||||
cache >>= letterIdBit
|
||||
remain--
|
||||
}
|
||||
return *(*string)(unsafe.Pointer(&b))
|
||||
}
|
@ -5,8 +5,8 @@ import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils/random"
|
||||
"hash"
|
||||
rand2 "math/rand"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"sort"
|
||||
@ -36,11 +36,7 @@ func NewUUID() UUID {
|
||||
}
|
||||
|
||||
func RandStringBytes(n int) string {
|
||||
b := make([]byte, n)
|
||||
for i := range b {
|
||||
b[i] = letterBytes[rand2.Intn(len(letterBytes))]
|
||||
}
|
||||
return string(b)
|
||||
return random.StrRandom(int64(n))
|
||||
}
|
||||
|
||||
func newFromHash(h hash.Hash, ns UUID, name string) UUID {
|
||||
@ -109,3 +105,12 @@ func InitStructWithDefaultTag(bean interface{}) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Md5(data string) string {
|
||||
s := md5.Sum([]byte(data))
|
||||
return hex.EncodeToString(s[:])
|
||||
}
|
||||
|
||||
func MakeTraceId() string {
|
||||
return fmt.Sprintf("00-%s-%s-01", random.Random(32, random.LetterHex), random.Random(16, random.LetterHex))
|
||||
}
|
||||
|
@ -23,3 +23,7 @@ func TestInitStructWithDefaultTag(t *testing.T) {
|
||||
InitStructWithDefaultTag(testcase)
|
||||
fmt.Printf("%+v", testcase)
|
||||
}
|
||||
|
||||
func TestMd5(t *testing.T) {
|
||||
t.Log(Md5("123456"))
|
||||
}
|
||||
|
47
services/asdk/client.go
Normal file
47
services/asdk/client.go
Normal file
@ -0,0 +1,47 @@
|
||||
package asdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"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/utils"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2020-11-16"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "asdk",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// GenerateInnerApiSign
|
||||
// 生成内部接口签名
|
||||
func GenerateInnerApiSign(ts int64) (int64, string) {
|
||||
const InnerSignSecret = "sYbfhozSu^@K8~y*"
|
||||
if ts == 0 {
|
||||
ts = time.Now().Unix()
|
||||
}
|
||||
return ts, utils.Md5(fmt.Sprintf("%d%s", ts, InnerSignSecret))
|
||||
}
|
||||
|
||||
// CreateKickUserReq 踢人
|
||||
func (c *Client) CreateKickUserReq(req *KickUserReq) (resp *KickUserResp, err error) {
|
||||
resp = CreateKickUserResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
26
services/asdk/client_test.go
Normal file
26
services/asdk/client_test.go
Normal file
@ -0,0 +1,26 @@
|
||||
package asdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// 获取用户累计付费
|
||||
func TestKickUser(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
ts, sign := GenerateInnerApiSign(0)
|
||||
req := CreateKickUserReq(KickUserParam{
|
||||
Ts: ts,
|
||||
Sign: sign,
|
||||
UserName: "aq36604627",
|
||||
})
|
||||
|
||||
resp, err := client.CreateKickUserReq(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data)
|
||||
}
|
45
services/asdk/inner_api.go
Normal file
45
services/asdk/inner_api.go
Normal file
@ -0,0 +1,45 @@
|
||||
package asdk
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type KickUserReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type KickUserResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct{} `json:"data"`
|
||||
TraceId string `json:"trace_id"`
|
||||
}
|
||||
type KickUserParam struct {
|
||||
Ts int64 `json:"ts"`
|
||||
Sign string `json:"sign"`
|
||||
UserName string `json:"user_name"`
|
||||
}
|
||||
|
||||
func CreateKickUserReq(data KickUserParam) *KickUserReq {
|
||||
req := &KickUserReq{
|
||||
&requests.RpcRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/kick")
|
||||
req.Method = requests.GET
|
||||
req.QueryParams = map[string]string{
|
||||
"ts": strconv.FormatInt(data.Ts, 10),
|
||||
"sign": data.Sign,
|
||||
"user_name": data.UserName,
|
||||
}
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateKickUserResp() *KickUserResp {
|
||||
return &KickUserResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
42
services/capk/client.go
Normal file
42
services/capk/client.go
Normal file
@ -0,0 +1,42 @@
|
||||
package capk
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2024-10-30"
|
||||
)
|
||||
|
||||
var HOST requests.Host = requests.Host{
|
||||
Default: "capk.gaore.com",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) TaskCreate(req *TaskCreateRequest) (resp *TaskCreateResponse, err error) {
|
||||
resp = CreateTaskCreateResponse()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) ConfigModify(req *ConfigModifyRequest) (resp *ConfigModifyResponse, err error) {
|
||||
resp = CreateConfigModifyResponse()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) ConfigGet(req *ConfigGetRequest) (resp *ConfigGetResponse, err error) {
|
||||
resp = CreateConfigGetResponse()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
39
services/capk/client_test.go
Normal file
39
services/capk/client_test.go
Normal file
@ -0,0 +1,39 @@
|
||||
package capk
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestTask_Create(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
req := CreateTaskCreateRequest()
|
||||
req.GameId = 7788
|
||||
req.GameVersion = "1.0.1"
|
||||
req.Config = "{\"data\":{\"sdkPath\":\"\",\"localPath\":\"\",\"plugins\":{\"addictioncheck\":\"\",\"msaid\":\"\",\"bugly\":\"\",\"gdt\":\"\",\"gdt_channel\":\"\"},\"decompileApk\":\"\"},\"game\":{\"appID\":\"7477\",\"appName\":\"xyxmz_xlhh_ylh\",\"appKey\":\"yWpx3hWQHFhSnTCj#7477#6KuRKuaAjLJ5sYRy\",\"appDescNew\":\"西游仙魔传\",\"orientation\":\"landscape\",\"cpuSupport\":\"armeabi-v7a|arm64-v8a\",\"minSdkVersion\":\"21\",\"targetSdkVersion\":\"31\",\"outputApkName\":\"{appName}_{appID}_{versionCode}_{versionName}_{time}.apk\",\"gameCategory\":\"25|771-2.0.4.3\",\"icon\":\"\",\"logoPath\":\"\",\"loadingPath\":\"\",\"certificatePath\":\"\"},\"channel\":{\"id\":\"1\",\"name\":\"gaore\",\"sdk\":\"gaore\",\"desc\":\"GRSDK\",\"suffix\":\"com.bjhr.xyxmz\",\"splash\":\"0\",\"splash_copy_to_unity\":\"0\",\"sdkParams\":{\"SCREEN_ORIENTATION\":\"0\",\"GAORE_CHANNELID\":\"1\",\"GAORE_VERSION_TAG\":\"1\",\"GAORE_LOGO_SHOW\":\"1\",\"GAORE_CHANNEL_KEY\":\"GRSDK\",\"GAORE_GAME_VERSION\":\"1.0.0\",\"GAORE_APPLICATION_PROXY_NAME\":\"com.gr.sdk.GaoreApplication,com.gr.sdk.MSAApplication,com.gr.sdk.addictioncheck.application.GaoreApplication,com.gr.sdk.BuglyProxyApplication,com.gr.sdk.GDTProxyApplication,com.gr.sdk.GDTChannelProxyApplication\",\"GAORE_WX_APP_ID\":\"\",\"GAORE_FLOAT_POSITION\":\"0|30\",\"GAORE_ROUND_ICON\":\"0\",\"GAORE_ROUND_ICON_PATH\":\"\",\"GAORE_ROUND_ICON_FOREGROUND_PATH\":\"\",\"GAORE_ROUND_ICON_BACKGROUND_PATH\":\"\",\"GR_AGEWARN\":\"true\",\"GR_REDPACKET\":\"1\",\"GR_REDPACKET_GUIDE\":\"1\",\"GAORE_INIT_SDK_TYPE\":\"2\",\"appkey_avscan\":\"\",\"seckey_avscan\":\"\",\"GDT_USER_ACTION_SET_ID\":\"1203968086\",\"GDT_APP_SECRET_KEY\":\"8ad271167be3dcf120468770a4ee9b21\",\"GISM_APPID\":\"\",\"GISM_APPNAME\":\"\",\"QL_APPID\":\"\",\"KUAISHOU_APPID\":\"\",\"KUAISHOU_APPNAME\":\"\",\"TOUTIAO_AID\":\"\",\"addPermissionActivity\":\"1\",\"VIVO_SRC_ID\":\"\"},\"sdkVersion\":{\"versionName\":\"2.6.1\"},\"plugins\":{\"addictioncheck\":\"\",\"msaid\":\"\",\"bugly\":\"\",\"gdt\":\"\",\"gdt_channel\":\"\"}}}"
|
||||
req.Env = 0 // 灰度为 1 正式为0
|
||||
resp, err := client.TaskCreate(req)
|
||||
t.Logf("%v", resp.Data.TaskId)
|
||||
}
|
||||
|
||||
func TestConfig_Modify(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
req := CreateConfigModifyRequest()
|
||||
req.Content = []byte(`<?xml version='1.0' encoding='UTF-8'?><xml><apks><!-- name:母包文件名 --><!-- screen:屏幕方向 0竖屏 1横屏 --><!-- targetSdk:targetSdkVersion支持30以上 0否 1是 --><apk><param name="id" value="1" /><param name="name" value="heji" /><param name="desc" value="合击" /><param name="screen" value="1" /><param name="targetSdk" value="0" /></apk><apk><param name="id" value="2" /><param name="name" value="lanyue" /><param name="desc" value="蓝月" /><param name="screen" value="1" /><param name="targetSdk" value="0" /></apk></apks></xmls>`)
|
||||
resp, err := client.ConfigModify(req)
|
||||
t.Log(resp.Code, resp.Msg)
|
||||
}
|
||||
|
||||
func TestConfig_Get(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
req := CreateConfigGetRequest()
|
||||
resp, err := client.ConfigGet(req)
|
||||
t.Log(resp.Code, resp.Data)
|
||||
}
|
34
services/capk/config_get.go
Normal file
34
services/capk/config_get.go
Normal file
@ -0,0 +1,34 @@
|
||||
package capk
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type ConfigGetRequest struct {
|
||||
*requests.JsonRequest
|
||||
}
|
||||
|
||||
type ConfigGetResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
func CreateConfigGetRequest() *ConfigGetRequest {
|
||||
req := &ConfigGetRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/pack/config/get")
|
||||
req.Method = requests.GET
|
||||
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateConfigGetResponse() *ConfigGetResponse {
|
||||
return &ConfigGetResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
33
services/capk/config_modify.go
Normal file
33
services/capk/config_modify.go
Normal file
@ -0,0 +1,33 @@
|
||||
package capk
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type ConfigModifyRequest struct {
|
||||
*requests.StreamRequest
|
||||
}
|
||||
|
||||
type ConfigModifyResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
func CreateConfigModifyRequest() (req *ConfigModifyRequest) {
|
||||
req = &ConfigModifyRequest{
|
||||
StreamRequest: &requests.StreamRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/pack/config/set")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateConfigModifyResponse() (resp *ConfigModifyResponse) {
|
||||
return &ConfigModifyResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
38
services/capk/task_create.go
Normal file
38
services/capk/task_create.go
Normal file
@ -0,0 +1,38 @@
|
||||
package capk
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type TaskCreateRequest struct {
|
||||
*requests.JsonRequest
|
||||
GameId int `position:"Json" field:"game_id"`
|
||||
GameVersion string `position:"Json" field:"game_version"`
|
||||
Config string `position:"Json" field:"config"`
|
||||
Env int `position:"Json" field:"env"`
|
||||
}
|
||||
|
||||
type TaskCreateResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
TaskId string `json:"task_id"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateTaskCreateRequest() (req *TaskCreateRequest) {
|
||||
req = &TaskCreateRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/pack/task/create")
|
||||
return
|
||||
}
|
||||
|
||||
func CreateTaskCreateResponse() (resp *TaskCreateResponse) {
|
||||
resp = &TaskCreateResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
31
services/center-api/client.go
Normal file
31
services/center-api/client.go
Normal file
@ -0,0 +1,31 @@
|
||||
package center_api
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2020-11-16"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "center-api",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// PackagingTaskCallback 打包任务回调
|
||||
func (c *Client) PackagingTaskCallback(req *PackagingTaskCallbackReq) (resp *PackagingTaskCallbackResp, err error) {
|
||||
resp = CreatePackagingTaskCallbackResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
28
services/center-api/client_test.go
Normal file
28
services/center-api/client_test.go
Normal file
@ -0,0 +1,28 @@
|
||||
package center_api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPackagingTaskCallback(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
req := CreatePackagingTaskCallbackReq(Data{
|
||||
TaskId: "asdada120",
|
||||
Status: 1,
|
||||
Msg: "test",
|
||||
Url: "http://www.baidu.com",
|
||||
Md5: "adadsadasdasda",
|
||||
})
|
||||
|
||||
resp, err := client.PackagingTaskCallback(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(resp.StatusCode, resp.StatusMsg)
|
||||
}
|
64
services/center-api/packaging.go
Normal file
64
services/center-api/packaging.go
Normal file
@ -0,0 +1,64 @@
|
||||
package center_api
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
type PackagingTaskCallbackReq struct {
|
||||
*requests.RpcRequest
|
||||
TaskId string `position:"Body" field:"task_id"`
|
||||
Status int `position:"Body" field:"status"`
|
||||
Msg string `position:"Body" field:"msg"`
|
||||
Url string `position:"Body" field:"url"`
|
||||
Md5 string `position:"Body" field:"md5"`
|
||||
Sign string `position:"Body" field:"sign"`
|
||||
Ts int64 `position:"Body" field:"ts"`
|
||||
}
|
||||
|
||||
type PackagingTaskCallbackResp struct {
|
||||
*responses.BaseResponse
|
||||
StatusCode int `json:"status_code"`
|
||||
StatusMsg string `json:"status_msg"`
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
TaskId string `json:"task_id"`
|
||||
Status int `json:"status"`
|
||||
Msg string `json:"msg"`
|
||||
Url string `json:"url"`
|
||||
Md5 string `json:"md5"`
|
||||
}
|
||||
|
||||
func CreatePackagingTaskCallbackReq(data Data) *PackagingTaskCallbackReq {
|
||||
req := &PackagingTaskCallbackReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
|
||||
req.TaskId = data.TaskId
|
||||
req.Status = data.Status
|
||||
req.Msg = data.Msg
|
||||
req.Url = data.Url
|
||||
req.Md5 = data.Md5
|
||||
req.Ts = 1730357662
|
||||
|
||||
// sign=md5(ts+task_id+sign_key) 32位
|
||||
// 生成 MD5 哈希
|
||||
hash := md5.Sum([]byte(fmt.Sprintf("%d%s%s", req.Ts, req.TaskId, "xBPVBJ132asdUeJC3XjD7AnFWD2sbGH6pJC4654y89")))
|
||||
|
||||
// 将哈希结果转换为十六进制字符串
|
||||
hashString := hex.EncodeToString(hash[:])
|
||||
req.Sign = hashString
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/packaging/task/callback")
|
||||
req.Method = requests.POST
|
||||
return req
|
||||
}
|
||||
|
||||
func CreatePackagingTaskCallbackResp() *PackagingTaskCallbackResp {
|
||||
return &PackagingTaskCallbackResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
162
services/cs/client.go
Normal file
162
services/cs/client.go
Normal file
@ -0,0 +1,162 @@
|
||||
package cs
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2025-06-10"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "cs.api.gaore.com",
|
||||
}
|
||||
|
||||
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)
|
||||
// 考虑网络不佳的情况,提高超时时间
|
||||
req.SetReadTimeout(10 * time.Second)
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
func (client *Client) ClearFaqListCache(req *ClearFaqListCacheRequest) (resp *ClearFaqListCacheResponse, err error) {
|
||||
resp = CreateClearFaqListCacheResponse()
|
||||
err = client.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (client *Client) ClearFaqDetailCache(req *ClearFaqDetailCacheRequest) (resp *ClearFaqDetailCacheResponse, err error) {
|
||||
resp = CreateClearFaqDetailCacheResponse()
|
||||
err = client.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (client *Client) ClearHotFaqCache(req *ClearHotFaqCacheRequest) (resp *ClearHotFaqCacheResponse, err error) {
|
||||
resp = CreateClearHotFaqCacheResponse()
|
||||
err = client.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (client *Client) GetLinkGameConfig(req *GetLinkGameConfigRequest) (resp *GetLinkGameConfigResponse, err error) {
|
||||
resp = CreateGetLinkGameConfigResponse()
|
||||
err = client.DoAction(req, resp)
|
||||
return
|
||||
}
|
478
services/cs/client_test.go
Normal file
478
services/cs/client_test.go
Normal file
@ -0,0 +1,478 @@
|
||||
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",
|
||||
SysRemarkContent: "模拟用户重启",
|
||||
SysRemarkPic: []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{
|
||||
SysGameId: 7874,
|
||||
SysUserName: "rz35990497",
|
||||
SysUid: 221016372,
|
||||
SysRoleId: "265500394",
|
||||
SysRoleName: "好玩的尼",
|
||||
SysServerName: "碧水连天",
|
||||
SysOrderTemplateCode: "findAccount",
|
||||
SysDetail: "测试go-common改动。",
|
||||
SysPhone: "13725263463",
|
||||
ApplyIp: "192.168.1.202",
|
||||
SysOrderParts: []OrderSubmitPart{
|
||||
{
|
||||
PartKey: "email",
|
||||
PartName: "联系邮箱",
|
||||
PartValue: "kingson2011@126.com",
|
||||
PicValue: nil,
|
||||
},
|
||||
{
|
||||
PartKey: "pay_pic",
|
||||
PartName: "充值凭证",
|
||||
PartValue: "",
|
||||
PicValue: []string{
|
||||
"uploads/068/068eefab055a96ae404db19b7a121898.jpeg",
|
||||
"uploads/908/90822cca4e87ed49acaf82050dd3ac09.jpeg",
|
||||
},
|
||||
},
|
||||
},
|
||||
SysSmsCode: "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))
|
||||
}
|
||||
|
||||
// 清理faq列表缓存
|
||||
func TestClearFaqListCache(t *testing.T) {
|
||||
client, newErr := NewClient()
|
||||
if newErr != nil {
|
||||
panic(newErr)
|
||||
}
|
||||
req := CreateClearFaqListCacheRequest()
|
||||
res, err := client.ClearFaqListCache(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if res.Code != 0 {
|
||||
t.Error("清理faq列表缓存失败")
|
||||
}
|
||||
fmt.Printf(fmt.Sprintf("%v", res))
|
||||
}
|
||||
|
||||
// 清理faq详情缓存
|
||||
func TestClearFaqDetailCache(t *testing.T) {
|
||||
client, newErr := NewClient()
|
||||
if newErr != nil {
|
||||
panic(newErr)
|
||||
}
|
||||
req := CreateClearFaqDetailCacheRequest(FaqDetailRequest{
|
||||
Id: int64(30),
|
||||
})
|
||||
res, err := client.ClearFaqDetailCache(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if res.Code != 0 {
|
||||
t.Error("清理faq详情缓存失败")
|
||||
}
|
||||
fmt.Printf(fmt.Sprintf("%v", res))
|
||||
}
|
||||
|
||||
// 清理热门faq缓存
|
||||
func TestClearHotFaqCache(t *testing.T) {
|
||||
client, newErr := NewClient()
|
||||
if newErr != nil {
|
||||
panic(newErr)
|
||||
}
|
||||
req := CreateClearHotFaqCacheRequest()
|
||||
res, err := client.ClearHotFaqCache(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if res.Code != 0 {
|
||||
t.Error("清理热门faq缓存失败")
|
||||
}
|
||||
fmt.Printf(fmt.Sprintf("%v", res))
|
||||
}
|
||||
|
||||
// 获取人工客服链接,主体与游戏参数配置详情
|
||||
func TestGetLinkGameConfigDetail(t *testing.T) {
|
||||
client, newErr := NewClient()
|
||||
if newErr != nil {
|
||||
panic(newErr)
|
||||
}
|
||||
req := CreateGetLinkGameConfigRequest(LinkGameConfigRequest{
|
||||
Company: "JJW",
|
||||
})
|
||||
res, err := client.GetLinkGameConfig(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
if res.Code != 0 || res.Data.SubjectSign == "" {
|
||||
t.Error("获取人工客服链接,主体与游戏参数配置详情失败")
|
||||
}
|
||||
fmt.Printf(fmt.Sprintf("%v", res.Data))
|
||||
}
|
45
services/cs/config.go
Normal file
45
services/cs/config.go
Normal file
@ -0,0 +1,45 @@
|
||||
package cs
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
// 中旭人工客服链接,主体与游戏配置
|
||||
|
||||
type LinkGameConfig struct {
|
||||
SubjectSign string `json:"subject_sign"`
|
||||
SubjectName string `json:"subject_name"`
|
||||
LinkGameId int64 `json:"link_game_id"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
}
|
||||
type GetLinkGameConfigRequest struct {
|
||||
*requests.JsonRequest
|
||||
Company string `position:"Json" field:"company"`
|
||||
}
|
||||
type GetLinkGameConfigResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data *LinkGameConfig `json:"data"`
|
||||
}
|
||||
type LinkGameConfigRequest struct {
|
||||
Company string `json:"company"`
|
||||
}
|
||||
|
||||
func CreateGetLinkGameConfigRequest(param LinkGameConfigRequest) (req *GetLinkGameConfigRequest) {
|
||||
req = &GetLinkGameConfigRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
Company: param.Company,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/config/get_link_game_config")
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
func CreateGetLinkGameConfigResponse() (response *GetLinkGameConfigResponse) {
|
||||
response = &GetLinkGameConfigResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
203
services/cs/faq.go
Normal file
203
services/cs/faq.go
Normal file
@ -0,0 +1,203 @@
|
||||
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"`
|
||||
WorkOrderTemplateCode string `json:"work_order_template_code"`
|
||||
}
|
||||
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"`
|
||||
ParentId int64 `json:"parent_id"`
|
||||
ParentTitle string `json:"parent_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
|
||||
}
|
||||
|
||||
// 清理faq树缓存
|
||||
type ClearFaqListCacheRequest struct {
|
||||
*requests.JsonRequest
|
||||
}
|
||||
type ClearFaqListCacheResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateClearFaqListCacheRequest() (req *ClearFaqListCacheRequest) {
|
||||
req = &ClearFaqListCacheRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/faq/clear_list_cache")
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
func CreateClearFaqListCacheResponse() (response *ClearFaqListCacheResponse) {
|
||||
response = &ClearFaqListCacheResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 清理faq详情缓存
|
||||
type ClearFaqDetailCacheRequest struct {
|
||||
*requests.JsonRequest
|
||||
Id int64 `position:"Json" field:"id"`
|
||||
}
|
||||
type ClearFaqDetailCacheResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateClearFaqDetailCacheRequest(param FaqDetailRequest) (req *ClearFaqDetailCacheRequest) {
|
||||
req = &ClearFaqDetailCacheRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
Id: param.Id,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/faq/clear_detail_cache")
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
func CreateClearFaqDetailCacheResponse() (response *ClearFaqDetailCacheResponse) {
|
||||
response = &ClearFaqDetailCacheResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 清理热门faq缓存
|
||||
type ClearHotFaqCacheRequest struct {
|
||||
*requests.JsonRequest
|
||||
}
|
||||
type ClearHotFaqCacheResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateClearHotFaqCacheRequest() (req *ClearHotFaqCacheRequest) {
|
||||
req = &ClearHotFaqCacheRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/faq/clear_hot_list_cache")
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
func CreateClearHotFaqCacheResponse() (response *ClearHotFaqCacheResponse) {
|
||||
response = &ClearHotFaqCacheResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
320
services/cs/order.go
Normal file
320
services/cs/order.go
Normal file
@ -0,0 +1,320 @@
|
||||
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"`
|
||||
SysRemarkContent string `json:"sys_remark_content"`
|
||||
SysRemarkPic []string `json:"sys_remark_pic"`
|
||||
UserName string `json:"user_name"`
|
||||
}
|
||||
type OrderRestartRequest struct {
|
||||
*requests.JsonRequest
|
||||
OrderNum string `position:"Json" field:"order_num"`
|
||||
SysRemarkContent string `position:"Json" field:"sys_remark_content"`
|
||||
SysRemarkPic []string `position:"Json" field:"sys_remark_pic"`
|
||||
UserName string `position:"Json" field:"user_name"`
|
||||
}
|
||||
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,
|
||||
SysRemarkContent: param.SysRemarkContent,
|
||||
SysRemarkPic: param.SysRemarkPic,
|
||||
UserName: param.UserName,
|
||||
}
|
||||
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 {
|
||||
SysGameId int64 `json:"sys_game_id"`
|
||||
SysUserName string `json:"sys_user_name"`
|
||||
SysUid int64 `json:"sys_uid"`
|
||||
SysRoleId string `json:"sys_role_id"`
|
||||
SysRoleName string `json:"sys_role_name"`
|
||||
SysServerName string `json:"sys_server_name"`
|
||||
SysOrderTemplateCode string `json:"sys_order_template_code"`
|
||||
SysDetail string `json:"sys_detail"`
|
||||
SysPhone string `json:"sys_phone"`
|
||||
ApplyIp string `json:"apply_ip"`
|
||||
SysOrderParts []OrderSubmitPart `json:"sys_order_parts"`
|
||||
SysSmsCode string `json:"sys_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
|
||||
SysGameId int64 `position:"Json" field:"sys_game_id"`
|
||||
SysUserName string `position:"Json" field:"sys_user_name"`
|
||||
SysUid int64 `position:"Json" field:"sys_uid"`
|
||||
SysRoleId string `position:"Json" field:"sys_role_id"`
|
||||
SysRoleName string `position:"Json" field:"sys_role_name"`
|
||||
SysServerName string `position:"Json" field:"sys_server_name"`
|
||||
SysOrderTemplateCode string `position:"Json" field:"sys_order_template_code"`
|
||||
SysDetail string `position:"Json" field:"sys_detail"`
|
||||
SysPhone string `position:"Json" field:"sys_phone"`
|
||||
ApplyIp string `position:"Json" field:"apply_ip"`
|
||||
SysOrderParts []OrderSubmitPart `position:"Json" field:"sys_order_parts"`
|
||||
SysSmsCode string `position:"Json" field:"sys_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{},
|
||||
SysGameId: param.SysGameId,
|
||||
SysUserName: param.SysUserName,
|
||||
SysUid: param.SysUid,
|
||||
SysRoleId: param.SysRoleId,
|
||||
SysRoleName: param.SysRoleName,
|
||||
SysServerName: param.SysServerName,
|
||||
SysOrderTemplateCode: param.SysOrderTemplateCode,
|
||||
SysDetail: param.SysDetail,
|
||||
SysPhone: param.SysPhone,
|
||||
ApplyIp: param.ApplyIp,
|
||||
SysOrderParts: param.SysOrderParts,
|
||||
SysSmsCode: param.SysSmsCode,
|
||||
}
|
||||
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"`
|
||||
UserName string `json:"user_name"`
|
||||
}
|
||||
type OrderFurtherPartRequest struct {
|
||||
*requests.JsonRequest
|
||||
OrderNum string `position:"Json" field:"order_num"`
|
||||
OrderParts []OrderSubmitPart `position:"Json" field:"order_parts"`
|
||||
UserName string `position:"Json" field:"user_name"`
|
||||
}
|
||||
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,
|
||||
UserName: param.UserName,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/order_further_data")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
func CreateOrderFurtherPartResponse() (resp *OrderFurtherPartResponse) {
|
||||
return &OrderFurtherPartResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
140
services/cs/orderrecord.go
Normal file
140
services/cs/orderrecord.go
Normal file
@ -0,0 +1,140 @@
|
||||
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"`
|
||||
WorkOrderTemplateId int64 `json:"work_order_template_id"`
|
||||
WorkOrderTemplateName string `json:"work_order_template_name"`
|
||||
Uid int64 `json:"uid"`
|
||||
OrderStatus string `json:"order_status"`
|
||||
OrderStatusName string `json:"order_status_name"`
|
||||
}
|
||||
|
||||
// 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 Width: | Height: | 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
|
||||
}
|
43
services/game/channel.go
Normal file
43
services/game/channel.go
Normal file
@ -0,0 +1,43 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type ChannelInfoReq struct {
|
||||
*requests.RpcRequest
|
||||
ChannelId int64 `position:"Body" field:"channelId"`
|
||||
ChannelKey string `position:"Body" field:"channelKey"`
|
||||
}
|
||||
|
||||
type ChannelInfoResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data map[int64]struct {
|
||||
Id int64 `json:"id"`
|
||||
PlatKey string `json:"plat_key"`
|
||||
PlatName string `json:"plat_name"`
|
||||
PlatCompany string `json:"plat_company"`
|
||||
PlatUrl string `json:"plat_url"`
|
||||
Company string `json:"company"`
|
||||
PlatCategoryId int64 `json:"plat_category_id"`
|
||||
CategoryName string `json:"category_name"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateChannelInfoReq() *ChannelInfoReq {
|
||||
req := &ChannelInfoReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/channel/getChannelInfo")
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateChannelInfoResp() *ChannelInfoResp {
|
||||
resp := &ChannelInfoResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return resp
|
||||
}
|
125
services/game/client.go
Normal file
125
services/game/client.go
Normal file
@ -0,0 +1,125 @@
|
||||
package game
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "game",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// GetGameOsInfo 获取游戏系统信息
|
||||
func (c *Client) GetGameOsInfo(req *GetGameOsInfoReq) (resp *GetGameOsInfoResp, err error) {
|
||||
resp = CreateGetGameOsInfoResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetGameInfo 获取游戏信息
|
||||
func (c *Client) GetGameInfo(req *GetGameInfoReq) (resp *GetGameInfoResp, err error) {
|
||||
resp = CreateGetGameInfoByIdResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) GetChannelInfo(req *ChannelInfoReq) (resp *ChannelInfoResp, err error) {
|
||||
resp = CreateChannelInfoResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) GetLoginInfoById(req *GetLoginInfoByIdReq) (resp *GetLoginInfoByIdResp, err error) {
|
||||
resp = CreateGetLoginInfoByIdResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) GetProtocolByGameId(req *GetProtocolByGameIdRep) (resp *GetProtocolByGameIdResp, err error) {
|
||||
resp = CreateGetProtocolByGameIdResp()
|
||||
err = c.DoAction(req, resp)
|
||||
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
|
||||
}
|
||||
|
||||
// GetConfig 获取游戏全局配置
|
||||
func (c *Client) GetConfig(req *GetConfigReq) (resp *GetConfigResp, err error) {
|
||||
resp = CreateGetConfigResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetRealAuthBlackList 获取实名黑名单
|
||||
func (c *Client) GetRealAuthBlackList(req *GetRealAuthBlackListReq) (resp *GetRealAuthBlackListResp, err error) {
|
||||
resp = CreateGetRealAuthBlackListResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetGameRealAuthInfo 获取实名参数
|
||||
func (c *Client) GetGameRealAuthInfo(req *GetGameRealAuthInfoReq) (resp *GetGameRealAuthInfoResp, err error) {
|
||||
resp = CreateGetGameRealAuthInfoResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetProtocolByCompany 根据主体获取用户协议
|
||||
func (c *Client) GetProtocolByCompany(req *GetProtocolByCompanyRep) (resp *GetProtocolByCompanyResp, err error) {
|
||||
resp = CreateGetProtocolByCompanyResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// KickUser 踢人
|
||||
func (c *Client) KickUser(req *KickUserReq) (resp *KickUserResp, err error) {
|
||||
resp = CreateKickUserResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
229
services/game/client_test.go
Normal file
229
services/game/client_test.go
Normal file
@ -0,0 +1,229 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestGetGameOsInfo(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
req := CreateGetGameOsInfoReq()
|
||||
|
||||
resp, err := client.GetGameOsInfo(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data.OsList, resp.Data.OsRelList2)
|
||||
}
|
||||
|
||||
func TestGetGameInfo(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
resp, err := client.GetGameInfo(CreateGetGameInfoByIdReq(797, 1))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data.GameHomeShortImage)
|
||||
}
|
||||
|
||||
func TestChannelInfo(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateChannelInfoReq()
|
||||
req.ChannelKey = "GRSDK"
|
||||
resp, err := client.GetChannelInfo(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp)
|
||||
}
|
||||
|
||||
func TestLoginInfoById(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateGetLoginInfoByIdReq(7349, "1.0.0")
|
||||
info, err := client.GetLoginInfoById(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
fmt.Println(info)
|
||||
}
|
||||
|
||||
func TestGetProtocolByGameId(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateGetProtocolByGameIdRep()
|
||||
req.GameId = 8088
|
||||
req.GameVersion = "1.1.0"
|
||||
req.Type = 1
|
||||
info, err := client.GetProtocolByGameId(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
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)
|
||||
}
|
||||
|
||||
// 获取游戏全局配置
|
||||
func TestGetConfig(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
getConfigReq := CreateGetConfigReq("overlord_act_config")
|
||||
isBlockOutIos, err := client.GetConfig(getConfigReq)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(isBlockOutIos)
|
||||
}
|
||||
|
||||
// 获取实名黑名单
|
||||
func TestGetRealAuthBlackList(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
getRealAuthBlackListReq := CreateGetRealAuthBlackListReq()
|
||||
isBlockOutIos, err := client.GetRealAuthBlackList(getRealAuthBlackListReq)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(isBlockOutIos)
|
||||
}
|
||||
|
||||
// 获取游戏实名参数
|
||||
func TestGetGameRealAuthInfo(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
getGameRealAuthInfoReq := CreateGetGameRealAuthInfoReq(7081)
|
||||
isBlockOutIos, err := client.GetGameRealAuthInfo(getGameRealAuthInfoReq)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(isBlockOutIos)
|
||||
}
|
||||
|
||||
func TestGetGameVersion(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetGameVersionReq(8071, "1.0.6")
|
||||
resp, err := client.GetGameVersion(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestClient_GetProtocolByCompany(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetProtocolByCompanyRep()
|
||||
req.Company = "GR"
|
||||
req.Type = 0
|
||||
resp, err := client.GetProtocolByCompany(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp.Code, resp.Msg, resp.Data.Content)
|
||||
}
|
||||
|
||||
// 测试踢人
|
||||
func TestKickUser(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
} // CreateKickUserReq
|
||||
getRealAuthBlackListReq := CreateKickUserReq(8677, "wzcqtest", "8676", time.Now().Unix())
|
||||
kickUserResp, err := client.KickUser(getRealAuthBlackListReq)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(kickUserResp)
|
||||
}
|
490
services/game/game.go
Normal file
490
services/game/game.go
Normal file
@ -0,0 +1,490 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type GetGameOsInfoReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type GetGameOsInfoResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data Data `json:"data"`
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
OsRelList2 []OsRelList2 `json:"os_rel_list2"`
|
||||
OsList map[string]OsList `json:"os_list"`
|
||||
}
|
||||
|
||||
type OsRelList2 struct {
|
||||
TwPlatID int `json:"tw_plat_id"`
|
||||
TwOs int `json:"tw_os"`
|
||||
Os int `json:"os"`
|
||||
OsTwo int `json:"os_two"`
|
||||
}
|
||||
|
||||
type OsList struct {
|
||||
Name string `json:"name"`
|
||||
OsTwo map[string]interface{}
|
||||
}
|
||||
|
||||
func CreateGetGameOsInfoReq() *GetGameOsInfoReq {
|
||||
req := &GetGameOsInfoReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/game/getGameOsInfo")
|
||||
req.Method = requests.POST
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetGameOsInfoResp() *GetGameOsInfoResp {
|
||||
return &GetGameOsInfoResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
type GetGameInfoReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type GetGameInfoResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data GameInfoData `json:"data"`
|
||||
}
|
||||
|
||||
type GetGameInfoReqData struct {
|
||||
GameId int
|
||||
NoCache int
|
||||
}
|
||||
|
||||
type GameInfoData struct {
|
||||
AcceptRelatedGame int `json:"accept_related_game"`
|
||||
ActCodeState int `json:"act_code_state"`
|
||||
AgentSign string `json:"agent_sign"`
|
||||
AppId string `json:"app_id"`
|
||||
AppName string `json:"app_name"`
|
||||
Autologin int `json:"autologin"`
|
||||
BName string `json:"b_name"`
|
||||
BackResult int `json:"back_result"`
|
||||
BusinessPurpose int `json:"business_purpose"`
|
||||
ChannelShow int `json:"channel_show"`
|
||||
ClientType int `json:"client_type"`
|
||||
Company string `json:"company"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
CreatedRealname string `json:"created_realname"`
|
||||
CreatedUsername string `json:"created_username"`
|
||||
DisableBack int `json:"disable_back"`
|
||||
DisablePay int `json:"disable_pay"`
|
||||
DisableRegister int `json:"disable_register"`
|
||||
DisableRelatedBack int `json:"disable_related_back"`
|
||||
DisableUnrelatedLogin int `json:"disable_unrelated_login"`
|
||||
Discount int `json:"discount"`
|
||||
Divide int `json:"divide"`
|
||||
DownloadDomain string `json:"download_domain"`
|
||||
DownloadId string `json:"download_id"`
|
||||
ExchangeRate int `json:"exchange_rate"`
|
||||
ExtData string `json:"ext_data"`
|
||||
Fcmathod int `json:"fcmathod"`
|
||||
FirstLetter string `json:"first_letter"`
|
||||
FlashAuthId string `json:"flash_auth_id"`
|
||||
FlashAuthKey string `json:"flash_auth_key"`
|
||||
FlashAuthLogo string `json:"flash_auth_logo"`
|
||||
FlashAuthName string `json:"flash_auth_name"`
|
||||
FlashAuthStatus int `json:"flash_auth_status"`
|
||||
FlashPassId string `json:"flash_pass_id"`
|
||||
FlashPassKey string `json:"flash_pass_key"`
|
||||
GameByname string `json:"game_byname"`
|
||||
GameIconImg string `json:"game_icon_img"`
|
||||
GameImage string `json:"game_image"`
|
||||
GameHomeImage string `json:"game_home_image"`
|
||||
GameHomeShortImage string `json:"game_home_short_image"`
|
||||
GameSign string `json:"game_sign"`
|
||||
GameTsUrl string `json:"game_ts_url"`
|
||||
GameVersion string `json:"game_version"`
|
||||
GameZsUrl string `json:"game_zs_url"`
|
||||
GetRoleUrl string `json:"get_role_url"`
|
||||
HideRedButton int `json:"hide_red_button"`
|
||||
Icon string `json:"icon"`
|
||||
Icp string `json:"icp"`
|
||||
IcpUrl string `json:"icp_url"`
|
||||
Id int `json:"id"`
|
||||
IsAugment int `json:"is_augment"`
|
||||
IsOpen int `json:"is_open"`
|
||||
IsSync int `json:"is_sync"`
|
||||
MarketName string `json:"market_name"`
|
||||
MediaAbbr string `json:"media_abbr"`
|
||||
MobileLoginState int `json:"mobile_login_state"`
|
||||
MobileRegState int `json:"mobile_reg_state"`
|
||||
Name string `json:"name"`
|
||||
ObjectiveId int `json:"objective_id"`
|
||||
OpenGame int `json:"open_game"`
|
||||
Os int `json:"os"`
|
||||
OsTwo int `json:"os_two"`
|
||||
Owner int `json:"owner"`
|
||||
PackageNameId int `json:"package_name_id"`
|
||||
PayUrl string `json:"pay_url"`
|
||||
PlatId int `json:"plat_id"`
|
||||
Platform int `json:"platform"`
|
||||
ProtocolPreState int `json:"protocol_pre_state"`
|
||||
Rank int `json:"rank"`
|
||||
RegisterProtocolState int `json:"register_protocol_state"`
|
||||
RelateGame string `json:"relate_game"`
|
||||
ReleaseState int `json:"release_state"`
|
||||
Remark string `json:"remark"`
|
||||
RequestDomain string `json:"request_domain"`
|
||||
ResultCode string `json:"result_code"`
|
||||
ScreenType int `json:"screen_type"`
|
||||
ServerGroupId int `json:"server_group_id"`
|
||||
ServerSign int `json:"server_sign"`
|
||||
SimId int `json:"sim_id"`
|
||||
SpareRequestDomain string `json:"spare_request_domain"`
|
||||
TwOs int `json:"tw_os"`
|
||||
TwPlatId int `json:"tw_plat_id"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
UpdatedRealname string `json:"updated_realname"`
|
||||
UpdatedUsername string `json:"updated_username"`
|
||||
IsAuth int `json:"is_auth"`
|
||||
}
|
||||
|
||||
func CreateGetGameInfoByIdReq(gameId, noCache int) *GetGameInfoReq {
|
||||
req := &GetGameInfoReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, fmt.Sprintf("/api/game/getGameById/%d?no_cache=%d", gameId, noCache))
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetGameInfoByIdResp() *GetGameInfoResp {
|
||||
return &GetGameInfoResp{
|
||||
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"`
|
||||
RequestDomain string `json:"request_domain"`
|
||||
SpareRequestDomain string `json:"spare_request_domain"`
|
||||
OtherRequestDomain string `json:"other_request_domain"`
|
||||
}
|
||||
|
||||
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{},
|
||||
}
|
||||
}
|
||||
|
||||
// GetConfigReq
|
||||
// 游戏全局配置
|
||||
type GetConfigReq struct {
|
||||
*requests.RpcRequest
|
||||
Key string `position:"Query" field:"key" default:"-" `
|
||||
}
|
||||
|
||||
type GetConfigRespData struct {
|
||||
Id int `json:"id"`
|
||||
Key string `json:"key"`
|
||||
ExtData string `json:"ext_data"`
|
||||
}
|
||||
type GetConfigResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data GetConfigRespData `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetConfigReq(key string) *GetConfigReq {
|
||||
req := &GetConfigReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.Key = key
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/game/getConfig")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetConfigResp() *GetConfigResp {
|
||||
return &GetConfigResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
// GetRealAuthBlackListReq
|
||||
// 获取实名黑名单
|
||||
type GetRealAuthBlackListReq struct {
|
||||
*requests.RpcRequest
|
||||
Key string `position:"Query" field:"key" default:"-" `
|
||||
}
|
||||
|
||||
type GetRealAuthBlackListRespDataItem struct {
|
||||
Id int `json:"id"`
|
||||
TrueName string `json:"true_name"`
|
||||
IdCard string `json:"id_card"`
|
||||
Remark string `json:"remark"`
|
||||
CreateBy string `json:"create_by"`
|
||||
UpdateBy string `json:"update_by"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
}
|
||||
|
||||
type GetRealAuthBlackListResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data []GetRealAuthBlackListRespDataItem `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetRealAuthBlackListReq() *GetRealAuthBlackListReq {
|
||||
req := &GetRealAuthBlackListReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/game/getRealAuthBlackList")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetRealAuthBlackListResp() *GetRealAuthBlackListResp {
|
||||
return &GetRealAuthBlackListResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
// GetGameRealAuthInfoReq
|
||||
// 获取实名参数
|
||||
type GetGameRealAuthInfoReq struct {
|
||||
*requests.RpcRequest
|
||||
GameId int64 `position:"Body" field:"game_id" default:"-" `
|
||||
}
|
||||
|
||||
type GetGameRealAuthInfoRespData struct {
|
||||
GroupName string `json:"group_name"`
|
||||
GroupDescription int `json:"group_description"`
|
||||
VerifiedTime string `json:"verified_time"`
|
||||
AreaProvince string `json:"area_province"`
|
||||
VersionInfo string `json:"version_info"`
|
||||
IsReal int `json:"is_real"`
|
||||
IsDirect int `json:"is_direct"`
|
||||
AuthChannel string `json:"auth_channel"`
|
||||
StandbyAuthChannel string `json:"standby_auth_channel"`
|
||||
ProtectTime int `json:"protect_time"`
|
||||
GovIoReport int `json:"gov_io_report"`
|
||||
MinorBan int `json:"minor_ban"`
|
||||
}
|
||||
|
||||
type GetGameRealAuthInfoResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data GetGameRealAuthInfoRespData `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetGameRealAuthInfoReq(gameId int64) *GetGameRealAuthInfoReq {
|
||||
req := &GetGameRealAuthInfoReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
GameId: gameId,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/login/getGameRealAuthInfo")
|
||||
req.Method = requests.POST
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetGameRealAuthInfoResp() *GetGameRealAuthInfoResp {
|
||||
return &GetGameRealAuthInfoResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
// KickUserReq
|
||||
// 踢人下线
|
||||
type KickUserReq struct {
|
||||
*requests.RpcRequest
|
||||
Uid int64 `position:"Body" field:"uid" default:"-" `
|
||||
GameSign string `position:"Body" field:"game_sign" default:"-" `
|
||||
ServerSign string `position:"Body" field:"server_sign" default:"-" `
|
||||
Time int64 `position:"Body" field:"time" default:"-" `
|
||||
}
|
||||
|
||||
type KickUserRespDataCallCpInfo struct {
|
||||
Url string `json:"url"`
|
||||
RequestParam map[string]any `json:"request_param"`
|
||||
Response map[string]any `json:"response"`
|
||||
}
|
||||
|
||||
type KickUserRespData struct {
|
||||
CallCpInfo KickUserRespDataCallCpInfo `json:"call_cp_info"`
|
||||
}
|
||||
|
||||
type KickUserResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data KickUserRespData `json:"data"`
|
||||
}
|
||||
|
||||
func CreateKickUserReq(uid int64, gameSign string, serverSign string, time int64) *KickUserReq {
|
||||
req := &KickUserReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
Uid: uid,
|
||||
GameSign: gameSign,
|
||||
ServerSign: serverSign,
|
||||
Time: time,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/game/kickUser")
|
||||
req.Method = requests.POST
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateKickUserResp() *KickUserResp {
|
||||
return &KickUserResp{
|
||||
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
|
||||
}
|
73
services/game/login.go
Normal file
73
services/game/login.go
Normal file
@ -0,0 +1,73 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type GetLoginInfoByIdReq struct {
|
||||
*requests.RpcRequest
|
||||
GameId int `position:"Body" field:"game_id"`
|
||||
GameVersion string `position:"Body" field:"game_version"`
|
||||
Uid int `position:"Body" field:"uid"`
|
||||
UserName string `position:"Body" field:"uname"`
|
||||
}
|
||||
|
||||
type PayInfo struct {
|
||||
HiddenAlipay int `json:"hide_alipay"`
|
||||
HiddenWx int `json:"hide_wx"`
|
||||
HiddenUnionPay int `json:"hide_union_pay"`
|
||||
}
|
||||
|
||||
type GameVersionInfo struct {
|
||||
AppName string `json:"app_name"`
|
||||
AppID string `json:"app_id"`
|
||||
LoginURL string `json:"login_url"`
|
||||
PayURL string `json:"pay_url"`
|
||||
GameURL string `json:"game_url"`
|
||||
PayCallbackURL string `json:"pay_callback_url"`
|
||||
IsH5Logout int `json:"is_h5_logout"`
|
||||
HideWindow int `json:"hidewindow"`
|
||||
GameVersion string `json:"version"`
|
||||
GameSign string `json:"game_sign"`
|
||||
GameSignName string `json:"game_sign_name"`
|
||||
GameSignID int `json:"game_sign_id"`
|
||||
IsYsdk int `json:"is_ysdk"`
|
||||
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"`
|
||||
GameId int `json:"game_id"`
|
||||
ScreenType int `json:"screen_type"`
|
||||
GameSwitch int `json:"game_switch"` // 根据上下文,0 或 1 的整数表示布尔值
|
||||
ExtData map[string]any `json:"ext_data"`
|
||||
OsName string `json:"os_name"`
|
||||
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 {
|
||||
req := &GetLoginInfoByIdReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.GameId = gameId
|
||||
req.GameVersion = gameVersion
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/login/getInfoById")
|
||||
req.Method = requests.POST
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetLoginInfoByIdResp() *GetLoginInfoByIdResp {
|
||||
resp := &GetLoginInfoByIdResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return resp
|
||||
}
|
67
services/game/news.go
Normal file
67
services/game/news.go
Normal file
@ -0,0 +1,67 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type GetProtocolByGameIdRep struct {
|
||||
*requests.RpcRequest
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
GameVersion string `position:"Query" field:"game_version"`
|
||||
Type int `position:"Query" field:"type"`
|
||||
}
|
||||
|
||||
type GetProtocolByGameIdResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
Content string `json:"content"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetProtocolByGameIdRep() *GetProtocolByGameIdRep {
|
||||
req := &GetProtocolByGameIdRep{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/news/getProtocolByGameId")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetProtocolByGameIdResp() *GetProtocolByGameIdResp {
|
||||
return &GetProtocolByGameIdResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
type GetProtocolByCompanyRep struct {
|
||||
*requests.RpcRequest
|
||||
Company string `position:"Query" field:"company"`
|
||||
Type int `position:"Query" field:"type"`
|
||||
}
|
||||
|
||||
type GetProtocolByCompanyResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
Content string `json:"content"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetProtocolByCompanyRep() *GetProtocolByCompanyRep {
|
||||
req := &GetProtocolByCompanyRep{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/news/getProtocolByCompany")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateGetProtocolByCompanyResp() *GetProtocolByCompanyResp {
|
||||
return &GetProtocolByCompanyResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
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
|
||||
}
|
@ -29,3 +29,15 @@ func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client,
|
||||
err = client.InitWithAccessKey(accesskey, secrect, source)
|
||||
return
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SubjectList(req *SubjectListRequest) (response *SubjectListResponse, err error) {
|
||||
response = CreateSubjectListResponse()
|
||||
err = c.DoAction(req, response)
|
||||
return
|
||||
}
|
||||
|
29
services/mkt/client_test.go
Normal file
29
services/mkt/client_test.go
Normal file
@ -0,0 +1,29 @@
|
||||
package mkt
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSubjectList(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
req := CreateSubjectListRequest(0)
|
||||
req.Port = "9090"
|
||||
list, err := client.SubjectList(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
marshal, err := json.Marshal(list.Data)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(string(marshal))
|
||||
fmt.Println(list.Status, list.Code, list.Msg, list.Data)
|
||||
}
|
69
services/mkt/subject.go
Normal file
69
services/mkt/subject.go
Normal file
@ -0,0 +1,69 @@
|
||||
package mkt
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
const appKey = "fc1f841#@de!!08"
|
||||
|
||||
type SubjectListRequest struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type SubjectListResponse struct {
|
||||
*responses.BaseResponse
|
||||
Status bool `json:"status"`
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
List map[int]Data `json:"list"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
Abbr string `json:"abbr"`
|
||||
AbbrSign string `json:"abbr_sign"`
|
||||
Id int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
State int `json:"state"`
|
||||
System string `json:"system"`
|
||||
Type int `json:"type"`
|
||||
Uscc string `json:"uscc"`
|
||||
}
|
||||
|
||||
// CreateSubjectListRequest 公司列表请求
|
||||
func CreateSubjectListRequest(state int) (req *SubjectListRequest) {
|
||||
ts := time.Now().Unix()
|
||||
hash := md5.New()
|
||||
hash.Write([]byte(fmt.Sprintf("%v%v", ts, appKey)))
|
||||
hashBytes := hash.Sum(nil)
|
||||
|
||||
token := hex.EncodeToString(hashBytes)
|
||||
|
||||
req = &SubjectListRequest{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, fmt.Sprintf("/api/subject/list"))
|
||||
|
||||
req.FormParams = map[string]string{
|
||||
"token": token,
|
||||
"ts": fmt.Sprintf("%v", ts),
|
||||
"state": fmt.Sprintf("%v", state),
|
||||
}
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
// CreateSubjectListResponse 公司列表请求响应
|
||||
func CreateSubjectListResponse() (response *SubjectListResponse) {
|
||||
response = &SubjectListResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
61
services/msdk/client.go
Normal file
61
services/msdk/client.go
Normal file
@ -0,0 +1,61 @@
|
||||
package msdk
|
||||
|
||||
import (
|
||||
"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/responses"
|
||||
)
|
||||
|
||||
const VERSION = "2024-06-25"
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "msdk.api.gaore.com",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = &Client{}
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// GetIdfa 获取设备归因信息
|
||||
func (c *Client) GetIdfa(req *GetIdfaReq) (resp *GetIdfaResp, err error) {
|
||||
resp = &GetIdfaResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
if req.Imei == "" && req.Idfa != "" {
|
||||
req.Imei = req.Idfa
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetUserAttr 获取用户归因信息
|
||||
func (c *Client) GetUserAttr(req *GetUserAttrReq) (resp *GetUserAttrResp, err error) {
|
||||
resp = &GetUserAttrResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetImei 用户注册归因
|
||||
func (c *Client) GetImei(req *GetImeiReq) (resp *GetImeiResp, err error) {
|
||||
resp = &GetImeiResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SetImei(req *SetImeiReq) (resp *SetImeiResp, err error) {
|
||||
resp = &SetImeiResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
149
services/msdk/client_test.go
Normal file
149
services/msdk/client_test.go
Normal file
@ -0,0 +1,149 @@
|
||||
package msdk
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestClient_GetUserAttr(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetUserAttrReq("ql83649336", "xxhbbxxl")
|
||||
resp, err := client.GetUserAttr(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestGetIdfa(t *testing.T) {
|
||||
header := &requests.RefererHeader{
|
||||
Referer: "https://www.gaore.com",
|
||||
TraceId: utils.MakeTraceId(),
|
||||
}
|
||||
_ = header
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
client.SetRefererHeader(header)
|
||||
req := CreateGetIdfaReq()
|
||||
req.ChannelId = 1
|
||||
req.GameId = 3706
|
||||
req.Ip = "112.23.230.210"
|
||||
req.Imei = "00000000-0000-0000-0000-000000000000"
|
||||
req.LongId = "daff65f07c7cf84862f4217773e3d613"
|
||||
req.SdkVersion = "1.7.2"
|
||||
req.Os = "ios"
|
||||
req.GameOs = 2
|
||||
req.GameSubOs = 0
|
||||
req.Ua = "Mozilla/5.0 (iPad; CPU OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
|
||||
req.GameSign = "hlhj"
|
||||
req.PkgAgentId = "100"
|
||||
req.PkgSiteId = "1001"
|
||||
req.Network = "Wifi"
|
||||
req.Idfv = "53F2A5F7-B1D4-4716-9775-07727C29BC7A"
|
||||
req.ScreenResolution = "2360*1640"
|
||||
req.System = "15.6.1"
|
||||
req.ProcessorModel = "iPad13,16"
|
||||
req.BaseBand = ""
|
||||
req.Model = "iPad13,16"
|
||||
req.Battery = "74"
|
||||
req.Oaid = ""
|
||||
req.AdInfo = ""
|
||||
req.WxPlatform = ""
|
||||
req.AdDevice = "{\"bootTimeInSec\":\"1745364499\",\"countryCode\":\"CN\",\"language\":\"zh-Hans-CN\",\"deviceName\":\"1b9018182a49e16ba85bb095f224867c\",\"systemVersion\":\"15.6.1\",\"machine\":\"iPad13,16\",\"carrierInfo\":\"unknown\",\"memory\":\"8000356352\",\"disk\":\"255983177728\",\"sysFileTime\":\"1663537105.729985\",\"model\":\"J407AP\",\"timeZone\":\"28800\",\"mntId\":\"A058368B97B0D073829608AAC13FFA64D9BEFD0FE3E14EDB106F2BABD6DF94B1C2BFC7509CBB683EE5B22D91A19FF67A@/dev/disk0s1s1\",\"deviceInitTime\":\"1663537056.906820124\"}"
|
||||
resp, err := client.GetIdfa(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestGetImei(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetImeiReq()
|
||||
req.Uid = 218047048
|
||||
req.UserName = "ct939725671"
|
||||
req.GameId = 8050
|
||||
req.GameSign = "mrwld"
|
||||
req.RegTime = 1750939725
|
||||
req.Imei = "of5wO5sKWep0OFPt9rWQf6xNJVPg"
|
||||
req.ChannelId = 1
|
||||
req.AgentId = 100
|
||||
req.SiteId = 1001
|
||||
req.Ip = "1864204063"
|
||||
req.Idfa = "of5wO5sKWep0OFPt9rWQf6xNJVPg"
|
||||
req.Logined = 1
|
||||
req.MatchType = 1
|
||||
req.GameAwemeId = ""
|
||||
req.ComeBackUser = 0
|
||||
req.FanCode = ""
|
||||
req.Network = ""
|
||||
req.Idfv = ""
|
||||
req.ScreenResolution = ""
|
||||
req.System = ""
|
||||
req.Electric = ""
|
||||
req.ProcessorModel = ""
|
||||
req.BaseBand = ""
|
||||
req.Model = ""
|
||||
req.Battery = ""
|
||||
req.Oaid = ""
|
||||
req.AdInfo = ""
|
||||
req.AdDevice = ""
|
||||
req.Ua = "WebSdk GaoreGame/1.3.1"
|
||||
req.WxPlatform = ""
|
||||
resp, err := client.GetImei(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestSetImei(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateSetImeiReq()
|
||||
// 基础字段赋值
|
||||
req.UserName = "15179405888"
|
||||
req.GameId = 6062
|
||||
req.GameSign = "hlhj"
|
||||
req.ChannelId = 1 // mtype
|
||||
req.MatchType = 2
|
||||
req.Imei = "96d9acdd57535c92-null"
|
||||
req.Idfa = "96d9acdd57535c92-null"
|
||||
req.Network = "4G"
|
||||
req.Idfv = ""
|
||||
req.ScreenResolution = "2132x1080"
|
||||
req.System = "11"
|
||||
req.ProcessorModel = ""
|
||||
req.BaseBand = ""
|
||||
req.Model = "PCDM10"
|
||||
req.Battery = "45"
|
||||
req.Oaid = "B9258E43A5084B43B72D94580C830898343a97328d6fd210b9e23859b1d5e83d_gaore_"
|
||||
req.AdInfo = ""
|
||||
req.AdDevice = ""
|
||||
req.Ua = "Mozilla/5.0 (Linux; Android 11; PCDM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36; SHGR GaoreGame/2.3.5"
|
||||
req.WxPlatform = ""
|
||||
|
||||
resp, err := client.SetImei(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
218
services/msdk/user.go
Normal file
218
services/msdk/user.go
Normal file
@ -0,0 +1,218 @@
|
||||
package msdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
|
||||
"time"
|
||||
)
|
||||
|
||||
const msdkKey = "msdk@gaore.com#!!"
|
||||
|
||||
type GetIdfaReq struct {
|
||||
*requests.RpcRequest
|
||||
ChannelId int `position:"Query" field:"mtype"`
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
Ip string `position:"Query" field:"ip"`
|
||||
Imei string `position:"Query" field:"imei"`
|
||||
Idfa string `position:"Query" field:"idfa"`
|
||||
Idfv string `position:"Query" field:"idfv"`
|
||||
LongId string `position:"Query" field:"long_id"`
|
||||
SdkVersion string `position:"Query" field:"version"`
|
||||
Os string `position:"Query" field:"os"`
|
||||
GameOs int `position:"Query" field:"game_os"`
|
||||
GameSubOs int `position:"Query" field:"game_sub_os"`
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
Ua string `position:"Query" field:"ua"`
|
||||
LiveCode string `position:"Query" field:"live_code"`
|
||||
AdDevice string `position:"Query" field:"ad_device"`
|
||||
PkgAgentId string `position:"Query" field:"pkg_agent_id"`
|
||||
PkgSiteId string `position:"Query" field:"pkg_site_id"`
|
||||
Network string `position:"Query" field:"network"`
|
||||
ScreenResolution string `position:"Query" field:"screen_resolution"`
|
||||
System string `position:"Query" field:"system"`
|
||||
Electric string `position:"Query" field:"electric"`
|
||||
ProcessorModel string `position:"Query" field:"processor_model"`
|
||||
BaseBand string `position:"Query" field:"baseband"`
|
||||
Model string `position:"Query" field:"model"`
|
||||
Battery string `position:"Query" field:"battery"`
|
||||
Oaid string `position:"Query" field:"oaid"`
|
||||
AdInfo string `position:"Query" field:"adinfo"`
|
||||
WxPlatform string `position:"Query" field:"wx_platform"`
|
||||
}
|
||||
|
||||
type GetIdfaResp struct {
|
||||
*responses.BaseResponse
|
||||
GameId int `json:"game_id"`
|
||||
AgentId int `json:"agent_id"`
|
||||
SiteId int `json:"site_id"`
|
||||
GameAwemeId string `json:"game_aweme_id"`
|
||||
LongId string `json:"long_id"`
|
||||
DeviceId string `json:"device_id"`
|
||||
Exists bool `json:"exists"`
|
||||
FromAd bool `json:"from_ad"`
|
||||
MatchType int `json:"match_type"`
|
||||
ClickId string `json:"click_id,omitempty"` // 非必要字段,使用 omitempty 忽略空值
|
||||
MatchTrace string `json:"match_trace,omitempty"` // 非必要字段
|
||||
RegTime int64 `json:"reg_time"`
|
||||
}
|
||||
|
||||
func CreateGetIdfaReq() *GetIdfaReq {
|
||||
req := &GetIdfaReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/getidfa.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
type GetUserAttrReq struct {
|
||||
*requests.RpcRequest
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
Ts int64 `position:"Query" field:"ts"`
|
||||
Sign string `position:"Query" field:"sign"`
|
||||
}
|
||||
|
||||
type GetUserAttrResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
Uid int `json:"uid"`
|
||||
UserName string `json:"user_name"`
|
||||
RegTime int `json:"reg_time"` // 假设注册时间是时间戳
|
||||
GameID int `json:"game_id"`
|
||||
RegIP string `json:"reg_ip"`
|
||||
AgentId int `json:"agent_id"`
|
||||
SiteId int `json:"site_id"`
|
||||
Imei string `json:"imei"`
|
||||
Oaid string `json:"oaid"`
|
||||
LongId string `json:"long_id"`
|
||||
PromotionId string `json:"promotion_id"`
|
||||
Mid3 string `json:"mid3"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetUserAttrReq(userName, gameSign string) *GetUserAttrReq {
|
||||
req := &GetUserAttrReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.UserName = userName
|
||||
req.GameSign = gameSign
|
||||
req.Ts = time.Now().Unix()
|
||||
req.Sign = utils.Md5(fmt.Sprintf("%d%s", req.Ts, msdkKey))
|
||||
req.InitWithApiInfo(HOST, VERSION, "/getUserAttr.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
type GetImeiReq struct {
|
||||
*requests.RpcRequest
|
||||
Uid int `position:"Query" field:"uid"`
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
RegTime int64 `position:"Query" field:"reg_time"`
|
||||
Imei string `position:"Query" field:"imei"`
|
||||
ChannelId int `position:"Query" field:"mtype"`
|
||||
AgentId int `position:"Query" field:"agent_id"`
|
||||
SiteId int `position:"Query" field:"site_id"`
|
||||
Ip string `position:"Query" field:"ip"`
|
||||
UserIp string `position:"Query" field:"user_ip"`
|
||||
Idfa string `position:"Query" field:"idfa"`
|
||||
Logined int `position:"Query" field:"logined"`
|
||||
MatchType int `position:"Query" field:"match_type"`
|
||||
GameAwemeId string `position:"Query" field:"game_aweme_id"`
|
||||
ComeBackUser int `position:"Query" field:"come_back_user"` //回流用户标识 1=>回流用户
|
||||
LpReg int `position:"Query" field:"lp_reg"` // 落地页注册用户标识
|
||||
FanCode string `position:"Query" field:"fan_code"` // 粉丝码
|
||||
Network string `position:"Query" field:"network"`
|
||||
Idfv string `position:"Query" field:"idfv"`
|
||||
ScreenResolution string `position:"Query" field:"screen_resolution"`
|
||||
System string `position:"Query" field:"system"`
|
||||
Electric string `position:"Query" field:"electric"`
|
||||
ProcessorModel string `position:"Query" field:"processor_model"`
|
||||
BaseBand string `position:"Query" field:"baseband"`
|
||||
Model string `position:"Query" field:"model"`
|
||||
Battery string `position:"Query" field:"battery"`
|
||||
Oaid string `position:"Query" field:"oaid"`
|
||||
AdInfo string `position:"Query" field:"adinfo"`
|
||||
AdDevice string `position:"Query" field:"ad_device"`
|
||||
Ua string `position:"Query" field:"ua"`
|
||||
WxPlatform string `position:"Query" field:"wx_platform"`
|
||||
}
|
||||
|
||||
type GetImeiResp struct {
|
||||
*responses.BaseResponse
|
||||
Uid string `json:"uid"`
|
||||
UserName string `json:"user_name"`
|
||||
Openid string `json:"openid"`
|
||||
ChannelId string `json:"mtype"`
|
||||
Logined int `json:"logined"`
|
||||
GameId string `json:"game_id"`
|
||||
GameSign string `json:"game_sign"`
|
||||
MatchType int `json:"match_type"`
|
||||
RegTime int64 `json:"reg_time"` // 原始时间戳字符串
|
||||
Imei string `json:"imei"`
|
||||
Oaid string `json:"oaid"`
|
||||
Idfa string `json:"idfa"`
|
||||
Ip int64 `json:"ip"`
|
||||
UserIp string `json:"user_ip"`
|
||||
Ua string `json:"ua"`
|
||||
Media string `json:"media"`
|
||||
AgentId int `json:"agent_id"`
|
||||
SiteId int `json:"site_id"`
|
||||
AdInfo string `json:"adinfo"`
|
||||
GameAwemeId string `json:"game_aweme_id"`
|
||||
}
|
||||
|
||||
func CreateGetImeiReq() *GetImeiReq {
|
||||
req := &GetImeiReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/getimei.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
type SetImeiReq struct {
|
||||
*requests.RpcRequest
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
Imei string `position:"Query" field:"imei"`
|
||||
Idfa string `position:"Query" field:"idfa"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
ChannelId int `position:"Query" field:"mtype"`
|
||||
MatchType int `position:"Query" field:"match_type"`
|
||||
Network string `position:"Query" field:"network"`
|
||||
Idfv string `position:"Query" field:"idfv"`
|
||||
ScreenResolution string `position:"Query" field:"screen_resolution"`
|
||||
System string `position:"Query" field:"system"` // 可能为系统版本号字符串
|
||||
ProcessorModel string `position:"Query" field:"processor_model"`
|
||||
BaseBand string `position:"Query" field:"baseband"`
|
||||
Model string `position:"Query" field:"model"`
|
||||
Battery string `position:"Query" field:"battery"`
|
||||
Oaid string `position:"Query" field:"oaid"`
|
||||
AdInfo string `position:"Query" field:"adinfo"`
|
||||
AdDevice string `position:"Query" field:"ad_device"`
|
||||
Ua string `position:"Query" field:"ua"`
|
||||
WxPlatform string `position:"Query" field:"wx_platform"`
|
||||
}
|
||||
|
||||
type SetImeiResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateSetImeiReq() *SetImeiReq {
|
||||
req := &SetImeiReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/setimei.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
@ -3,11 +3,12 @@ package oss
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
"time"
|
||||
)
|
||||
|
||||
type GetApkVersionRequest struct {
|
||||
*requests.JsonRequest
|
||||
Filepath string `position:"Body" field:"filepath"`
|
||||
Filepath string `position:"Json" field:"filepath"`
|
||||
}
|
||||
|
||||
type GetApkVersionResponse struct {
|
||||
@ -15,8 +16,10 @@ type GetApkVersionResponse struct {
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
VersionCode string `json:"versionCode"`
|
||||
VersionName string `json:"versionName"`
|
||||
VersionCode string `json:"versionCode"`
|
||||
VersionName string `json:"versionName"`
|
||||
MinSdkVersion string `json:"minSdkVersion"`
|
||||
TargetSdkVersion string `json:"targetSdkVersion"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
@ -26,6 +29,7 @@ func CreateGetApkVersionRequest() (req *GetApkVersionRequest) {
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/apk/version")
|
||||
req.Method = requests.POST
|
||||
req.SetReadTimeout(30 * time.Second)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ func NewClientWithSts() {
|
||||
}
|
||||
|
||||
func (c *Client) PutOss(req *PutOssRequest) (resp *PutOssResponse, err error) {
|
||||
if req.BucketName == "" {
|
||||
if req.Bucket == "" {
|
||||
err = errors.New("bucket name is empty")
|
||||
return
|
||||
}
|
||||
|
@ -8,7 +8,8 @@ import (
|
||||
|
||||
func TestUpload_Put(t *testing.T) {
|
||||
req := CreatePutOssRequest()
|
||||
req.BucketName = "image"
|
||||
req.Bucket = "image"
|
||||
//req.Bucket = "web"
|
||||
file, err := os.ReadFile("test.jpg")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
@ -26,7 +27,7 @@ func TestUpload_Put(t *testing.T) {
|
||||
|
||||
func TestUpload_Del(t *testing.T) {
|
||||
req := CreateDelOssRequest()
|
||||
req.BucketName = "image"
|
||||
req.Bucket = "image"
|
||||
req.MediaUrl = "https://image.89yoo.com/uploads/549/549e887460a72333c361661683023018.jpeg"
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
@ -43,10 +44,16 @@ func TestUpload_Del(t *testing.T) {
|
||||
|
||||
func TestCreateInitMultipartUpload(t *testing.T) {
|
||||
req := CreateInitMultipartUploadRequest()
|
||||
req.Filepath = "test.jpg"
|
||||
|
||||
extInfo := map[string]any{"game_byname": "tech_test_tencent"}
|
||||
bExtInfo, _ := json.Marshal(extInfo)
|
||||
|
||||
req.UploadType = "package"
|
||||
req.TargetType = "oss"
|
||||
req.TargetName = "image"
|
||||
req.FileHash = "51c68615b8d21f9b72b02f48c400cb87"
|
||||
req.Filepath = "q5-01.zip"
|
||||
req.ExtInfo = string(bExtInfo)
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
@ -66,7 +73,7 @@ func TestCreateInitMultipartUpload(t *testing.T) {
|
||||
|
||||
func TestClient_GetApkVersion(t *testing.T) {
|
||||
req := CreateGetApkVersionRequest()
|
||||
req.Filepath = "36c55c4c3a2f4c79e3917b989d580496.zip"
|
||||
req.Filepath = "uploads/files/package/1f57ac9693f0593fc9073f366b1c1936.zip"
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
|
@ -15,10 +15,12 @@ const (
|
||||
|
||||
type InitMultipartUploadRequest struct {
|
||||
*requests.JsonRequest
|
||||
Filepath string `position:"Body" field:"filepath"`
|
||||
TargetType string `position:"Body" field:"target_type"`
|
||||
TargetName string `position:"Body" field:"target_name"`
|
||||
FileHash string `position:"Body" field:"file_hash"`
|
||||
UploadType string `position:"Json" field:"upload_type"`
|
||||
TargetType string `position:"Json" field:"target_type"`
|
||||
TargetName string `position:"Json" field:"target_name"`
|
||||
FileHash string `position:"Json" field:"file_hash"`
|
||||
Filepath string `position:"Json" field:"filepath"`
|
||||
ExtInfo string `position:"Json" field:"ext_info"`
|
||||
}
|
||||
|
||||
type InitMultipartUploadResponse struct {
|
||||
@ -50,7 +52,7 @@ func CreateInitMultipartUploadRequest() (req *InitMultipartUploadRequest) {
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/upload/multipart/init?ts="+ts+"&sign="+sign)
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/upload/multipart/init?_ts="+ts+"&_sign="+sign)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -7,8 +7,8 @@ import (
|
||||
|
||||
type DelOssRequest struct {
|
||||
*requests.JsonRequest
|
||||
BucketName string `position:"Body" field:"bucket_name" default:"image"`
|
||||
MediaUrl string `position:"Body" field:"url" default:"-"`
|
||||
Bucket string `position:"Json" field:"bucket" default:"image"`
|
||||
MediaUrl string `position:"Json" field:"url" default:"-"`
|
||||
}
|
||||
|
||||
type DelOssResponse struct {
|
||||
|
@ -7,7 +7,7 @@ import (
|
||||
|
||||
type PutOssRequest struct {
|
||||
*requests.StreamRequest
|
||||
BucketName string `position:"Query" field:"bucket_name" default:"image"`
|
||||
Bucket string `position:"Query" field:"bucket" default:"image"`
|
||||
FileStream []byte
|
||||
}
|
||||
|
||||
@ -16,7 +16,8 @@ type PutOssResponse struct {
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
Url string `json:"url"`
|
||||
Url string `json:"url"`
|
||||
SavePath string `json:"save_path"`
|
||||
}
|
||||
}
|
||||
|
||||
|
73
services/passport/client.go
Normal file
73
services/passport/client.go
Normal file
@ -0,0 +1,73 @@
|
||||
package passport
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"strings"
|
||||
)
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
// EditCard
|
||||
// 新增或修改实名信息
|
||||
func (c *Client) EditCard(req EditCardRequestParam) (response string, err error) {
|
||||
editCardRequest := CreateEditCardRequest(req)
|
||||
createEditCardResponse := CreateEditCardResponse()
|
||||
err = c.DoAction(editCardRequest, createEditCardResponse)
|
||||
if err != nil && strings.Contains(err.Error(), "json Unmarshal:") {
|
||||
return createEditCardResponse.GetHttpContentString(), nil
|
||||
} else if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return createEditCardResponse.GetHttpContentString(), nil
|
||||
}
|
||||
|
||||
// GetUserGameSign
|
||||
// 获取用户登录过的游戏大类
|
||||
func (c *Client) GetUserGameSign(req *GetUserGameSignRequest) (response *GetUserGameSignResponse, err error) {
|
||||
response = CreateGetUserGameSignResponse()
|
||||
err = c.DoAction(req, response)
|
||||
return
|
||||
}
|
||||
|
||||
// ChangePassword
|
||||
// 用户修改密码
|
||||
func (c *Client) ChangePassword(req *ChangePasswordRequest) (response *ChangePasswordResponse, err error) {
|
||||
response = CreateChangePasswordResponse()
|
||||
err = c.DoAction(req, response)
|
||||
return
|
||||
}
|
96
services/passport/client_test.go
Normal file
96
services/passport/client_test.go
Normal file
@ -0,0 +1,96 @@
|
||||
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(221016372, 7874, 0, "")
|
||||
// 限定角色
|
||||
req := CreateGetUserRoleListRequest(221016372, 7874, 265500390, "勇闯关东")
|
||||
resp, err := client.GetUserRoleList(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
t.Logf("resp code:%+v", resp.Code)
|
||||
t.Logf("resp data:%+v", resp.Data)
|
||||
}
|
||||
|
||||
func TestEditCard(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
editCardRequest := EditCardRequestParam{
|
||||
Uid: 32455414,
|
||||
GameId: 5010,
|
||||
Imei: "11111111",
|
||||
IsReal: 0,
|
||||
DirectStatus: 1,
|
||||
AuthChannel: "gjfcm_wzcq",
|
||||
DirectExtData: "测试测试测试",
|
||||
Pi: "",
|
||||
Ip: "",
|
||||
Ipv6: "",
|
||||
UserName: "asfasfd",
|
||||
RealName: "这艘啊",
|
||||
IdCard: "33032419950123532X",
|
||||
Mandatory: "3123123123",
|
||||
}
|
||||
editCardResponse, err := client.EditCard(editCardRequest)
|
||||
t.Logf("%v", editCardResponse)
|
||||
|
||||
}
|
||||
|
||||
// 测试获取用户登录过的游戏大类
|
||||
func TestGetUserGameSign(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
req := CreateGetUserGameSignRequest("oo70683572", "", "")
|
||||
resp, err := client.GetUserGameSign(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
t.Logf("resp code:%+v", resp.Code)
|
||||
t.Logf("resp data:%+v", resp.Data)
|
||||
}
|
||||
|
||||
// 测试用户修改密码
|
||||
func TestChangePassword(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
req := CreateChangePasswordRequest("rz35990497", "7654321")
|
||||
|
||||
resp, err := client.ChangePassword(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
// 记录文本结果
|
||||
t.Logf("resp code:%+v, msg:%s", resp.Code, resp.Msg)
|
||||
}
|
43
services/passport/getpwd.go
Normal file
43
services/passport/getpwd.go
Normal file
@ -0,0 +1,43 @@
|
||||
package passport
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type ChangePasswordRequest struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
func CreateChangePasswordRequest(userName string, newPwd string) (req *ChangePasswordRequest) {
|
||||
ts, sign := GetSign()
|
||||
|
||||
req = &ChangePasswordRequest{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/remote_login.php")
|
||||
req.FormParams = map[string]string{
|
||||
"act": "getpwd",
|
||||
"do": "passwd",
|
||||
"username": userName,
|
||||
"newpwd": newPwd,
|
||||
"time": fmt.Sprintf("%v", ts),
|
||||
"sign": sign,
|
||||
"format": "json",
|
||||
}
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateChangePasswordResponse() (response *ChangePasswordResponse) {
|
||||
response = &ChangePasswordResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type ChangePasswordResponse struct {
|
||||
*responses.BaseResponse
|
||||
}
|
202
services/passport/userinfo.go
Normal file
202
services/passport/userinfo.go
Normal file
@ -0,0 +1,202 @@
|
||||
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 {
|
||||
Id string `json:"id"`
|
||||
Uid string `json:"uid"`
|
||||
BbsUid string `json:"bbs_uid"`
|
||||
UserName string `json:"user_name"`
|
||||
UserPwd string `json:"user_pwd"`
|
||||
Email string `json:"email"`
|
||||
Integral string `json:"integral"`
|
||||
NickName string `json:"nick_name"`
|
||||
TrueName string `json:"true_name"`
|
||||
Sex string `json:"sex"`
|
||||
IdType string `json:"id_type"`
|
||||
IdCard string `json:"id_card"`
|
||||
Birthday string `json:"birthday"`
|
||||
Telephone string `json:"telephone"`
|
||||
Mobile string `json:"mobile"`
|
||||
Address string `json:"address"`
|
||||
Zipcode int64 `json:"zipcode"`
|
||||
Level string `json:"level"`
|
||||
Qq string `json:"qq"`
|
||||
Msn string `json:"msn"`
|
||||
Question string `json:"question"`
|
||||
Answer string `json:"answer"`
|
||||
HeadPic string `json:"head_pic"`
|
||||
Defendboss string `json:"defendboss"`
|
||||
RegTime int64 `json:"reg_time"`
|
||||
RegIp string `json:"reg_ip"`
|
||||
LoginIp string `json:"login_ip"`
|
||||
LoginTime string `json:"login_time"`
|
||||
State string `json:"state"`
|
||||
}
|
||||
|
||||
// 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, roleId int, roleServer string) (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),
|
||||
"role_id": fmt.Sprintf("%d", roleId),
|
||||
"role_server": roleServer,
|
||||
"time": fmt.Sprintf("%v", ts),
|
||||
"sign": sign,
|
||||
}
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateGetUserRoleListResponse() (response *GetUserRoleListResponse) {
|
||||
response = &GetUserRoleListResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type GetUserGameSignRequest struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type GetUserGameSignResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
List []UserGameSign `json:"list"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type UserGameSign struct {
|
||||
Id string `json:"id"`
|
||||
AgentId string `json:"agent_id"`
|
||||
SiteId string `json:"site_id"`
|
||||
Uid string `json:"uid"`
|
||||
UserName string `json:"user_name"`
|
||||
GameId string `json:"game_id"`
|
||||
GameSign string `json:"game_sign"`
|
||||
Oaid string `json:"oaid"`
|
||||
Imei string `json:"imei"`
|
||||
Imei2 string `json:"imei2"`
|
||||
Ua string `json:"ua"`
|
||||
FirstLoginIp string `json:"first_login_ip"`
|
||||
FirstLoginTime string `json:"first_login_time"`
|
||||
LastLoginIp string `json:"last_login_ip"`
|
||||
LastLoginTime string `json:"last_login_time"`
|
||||
}
|
||||
|
||||
// CreateGetUserGameSignRequest 获取用户登录过的游戏大类
|
||||
func CreateGetUserGameSignRequest(userName, gameSign, orderBy string) (req *GetUserGameSignRequest) {
|
||||
ts, sign := GetSign()
|
||||
|
||||
req = &GetUserGameSignRequest{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/remote_login.php")
|
||||
req.FormParams = map[string]string{
|
||||
"act": "info",
|
||||
"do": "get_user_game_sign",
|
||||
"username": userName,
|
||||
"game_sign": gameSign,
|
||||
"order_by": orderBy,
|
||||
"time": fmt.Sprintf("%v", ts),
|
||||
"sign": sign,
|
||||
}
|
||||
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateGetUserGameSignResponse() (response *GetUserGameSignResponse) {
|
||||
response = &GetUserGameSignResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
97
services/passport/weedong.go
Normal file
97
services/passport/weedong.go
Normal file
@ -0,0 +1,97 @@
|
||||
package passport
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
|
||||
"time"
|
||||
)
|
||||
|
||||
const weeDongKey = "aVCxX2B3yswpxCMjaaSUHFXAzLYyuGhW"
|
||||
|
||||
func weeDongGetSign(ts int64) string {
|
||||
return utils.Md5(utils.Md5(fmt.Sprintf("%d", ts)+weeDongKey) + weeDongKey)
|
||||
}
|
||||
|
||||
type EditCardRequestParam struct {
|
||||
Uid int64 `position:"Body" field:"uid"`
|
||||
GameId int64 `position:"Body" field:"game_id"`
|
||||
Imei string `position:"Body" field:"imei"`
|
||||
IsReal int64 `position:"Body" field:"is_real"`
|
||||
IsDirect int64 `position:"Body" field:"is_direct"`
|
||||
DirectStatus int64 `position:"Body" field:"direct_status"`
|
||||
AuthChannel string `position:"Body" field:"auth_channel"`
|
||||
DirectExtData string `position:"Body" field:"direct_ext_data"`
|
||||
Pi string `position:"Body" field:"pi"`
|
||||
Ip string `position:"Body" field:"ip"`
|
||||
Ipv6 string `position:"Body" field:"ipv6"`
|
||||
UserName string `position:"Body" field:"user_name"`
|
||||
RealName string `position:"Body" field:"truename"`
|
||||
IdCard string `position:"Body" field:"idcard"`
|
||||
Mandatory string `position:"Body" field:"mandatory"`
|
||||
}
|
||||
|
||||
type EditCardResponse struct {
|
||||
*responses.BaseResponse
|
||||
}
|
||||
|
||||
type EditCardRequest struct {
|
||||
*requests.RpcRequest
|
||||
Uid int64 `position:"Body" field:"uid"`
|
||||
GameId int64 `position:"Body" field:"game_id"`
|
||||
Imei string `position:"Body" field:"imei"`
|
||||
IsReal int64 `position:"Body" field:"is_real"`
|
||||
IsDirect int64 `position:"Body" field:"is_direct"`
|
||||
DirectStatus int64 `position:"Body" field:"direct_status"`
|
||||
AuthChannel string `position:"Body" field:"auth_channel"`
|
||||
DirectExtData string `position:"Body" field:"direct_ext_data"`
|
||||
Pi string `position:"Body" field:"pi"`
|
||||
Ip string `position:"Body" field:"ip"`
|
||||
Ipv6 string `position:"Body" field:"ipv6"`
|
||||
UserName string `position:"Body" field:"user_name"`
|
||||
RealName string `position:"Body" field:"truename"`
|
||||
IdCard string `position:"Body" field:"idcard"`
|
||||
Mandatory string `position:"Body" field:"mandatory"`
|
||||
Action string `position:"Body" field:"action"`
|
||||
Flag string `position:"Body" field:"flag"`
|
||||
Time string `position:"Body" field:"time"`
|
||||
}
|
||||
|
||||
// CreateEditCardRequest 记录实名结果接口
|
||||
func CreateEditCardRequest(param EditCardRequestParam) (req *EditCardRequest) {
|
||||
ts := time.Now().Unix()
|
||||
sign := weeDongGetSign(ts)
|
||||
|
||||
req = &EditCardRequest{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
Action: "edit_card",
|
||||
Flag: sign,
|
||||
Time: fmt.Sprintf("%v", ts),
|
||||
IsDirect: param.IsDirect,
|
||||
Uid: param.Uid,
|
||||
GameId: param.GameId,
|
||||
Imei: param.Imei,
|
||||
IsReal: param.IsReal,
|
||||
DirectStatus: param.DirectStatus,
|
||||
AuthChannel: param.AuthChannel,
|
||||
DirectExtData: param.DirectExtData,
|
||||
Pi: param.Pi,
|
||||
Ip: param.Ip,
|
||||
Ipv6: param.Ipv6,
|
||||
UserName: param.UserName,
|
||||
RealName: param.RealName,
|
||||
IdCard: param.IdCard,
|
||||
Mandatory: param.Mandatory,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/weedong.php")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateEditCardResponse() (response *EditCardResponse) {
|
||||
response = &EditCardResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
@ -10,11 +10,11 @@ const (
|
||||
)
|
||||
|
||||
var HOST requests.Host = requests.Host{
|
||||
Default: "pay.gaore.com",
|
||||
Default: "pay.api.gaore.com",
|
||||
Func: func(s string) string {
|
||||
var a = map[string]string{
|
||||
requests.RELEASE: "pay.gaore.com",
|
||||
requests.PRE: "pay.gaore.com",
|
||||
requests.RELEASE: "pay.api.gaore.com",
|
||||
requests.PRE: "pay.api.gaore.com",
|
||||
requests.TEST: "pay.gaore.com",
|
||||
}
|
||||
return a[s]
|
||||
@ -49,8 +49,16 @@ func (c *Client) ComplaintUpload(req *ComplaintUploadRequest) (response *Complai
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) ComplaintNotifyUrl(req *ComplaintNotifyUrlRequest) (response *ComplaintNotifyUrlResponse, err error) {
|
||||
response = CreateComplaintNotifyUrlResponse()
|
||||
func (c *Client) MerchantConfigDebug(req *merchantConfigDebugRequest) (response *merchantConfigDebugResponse, err error) {
|
||||
response = CreateMerchantConfigDebugResponse()
|
||||
err = c.DoAction(req, response)
|
||||
return
|
||||
}
|
||||
|
||||
// GetOrderState
|
||||
// 获取订单状态
|
||||
func (c *Client) GetOrderState(req *GetOrderStateRequest) (response *GetOrderStateResponse, err error) {
|
||||
response = CreateGetOrderStateResponse()
|
||||
err = c.DoAction(req, response)
|
||||
return
|
||||
}
|
||||
|
@ -1,28 +1,41 @@
|
||||
package pay
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestClient_GetUserInfo(t *testing.T) {
|
||||
|
||||
c, err := NewClient()
|
||||
//c, err := NewClient()
|
||||
//if err != nil {
|
||||
// t.Error(err)
|
||||
//}
|
||||
//
|
||||
//req := CreateComplaintNotifyUrlRequest()
|
||||
//
|
||||
//req.MchId = "3503"
|
||||
//req.NotifyUrl = "https://pay.uu89.com/api/complaint/wxNotify/3503"
|
||||
//req.Type = 1
|
||||
//
|
||||
//resp, err := c.ComplaintNotifyUrl(req)
|
||||
//if err != nil {
|
||||
// log.Fatalln(err)
|
||||
//}
|
||||
//fmt.Println(resp.GetHttpContentString())
|
||||
//fmt.Println(resp.GetHttpHeaders())
|
||||
}
|
||||
|
||||
func TestGetOrderState(t *testing.T) {
|
||||
getOrderStateRequest := CreateGetOrderStateRequest("202112060000193551730")
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
req := CreateComplaintNotifyUrlRequest()
|
||||
|
||||
req.MchId = "3503"
|
||||
req.NotifyUrl = "https://pay.uu89.com/api/complaint/wxNotify/3503"
|
||||
req.Type = 1
|
||||
|
||||
resp, err := c.ComplaintNotifyUrl(req)
|
||||
getOrderStateResponse, err := client.GetOrderState(getOrderStateRequest)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
fmt.Println(resp.GetHttpContentString())
|
||||
fmt.Println(resp.GetHttpHeaders())
|
||||
t.Log(getOrderStateResponse.GetHttpContentString())
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ type ComplaintCompleteRequest struct {
|
||||
*requests.RpcRequest
|
||||
MchId string `position:"Body" field:"mch_id" default:"" `
|
||||
ComplaintId string `position:"Body" field:"complaint_id" default:"" `
|
||||
ExtData string `position:"Body" field:"ext_data" default:"" `
|
||||
PayType int `position:"Body" field:"pay_type" default:"" `
|
||||
}
|
||||
|
||||
type ComplaintCompleteResponse struct {
|
||||
|
@ -1,35 +0,0 @@
|
||||
package pay
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type ComplaintNotifyUrlRequest struct {
|
||||
*requests.RpcRequest
|
||||
MchId string `position:"Body" field:"mch_id" default:"" `
|
||||
NotifyUrl string `position:"Body" field:"notify_url" default:"" `
|
||||
Type int `position:"Body" field:"type" default:""`
|
||||
}
|
||||
|
||||
type ComplaintNotifyUrlResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateComplaintNotifyUrlRequest() (req *ComplaintNotifyUrlRequest) {
|
||||
req = &ComplaintNotifyUrlRequest{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/complaint/createWxNotifyUrl")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateComplaintNotifyUrlResponse() (response *ComplaintNotifyUrlResponse) {
|
||||
response = &ComplaintNotifyUrlResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
@ -11,6 +11,7 @@ type ComplaintReplyRequest struct {
|
||||
ComplaintId string `position:"Body" field:"complaint_id" default:"" `
|
||||
Content string `position:"Body" field:"content" default:"" `
|
||||
Images string `position:"Body" field:"images" default:"" `
|
||||
PayType int `position:"Body" field:"pay_type" default:"" `
|
||||
}
|
||||
|
||||
type ComplaintReplyResponse struct {
|
||||
|
@ -10,6 +10,7 @@ type ComplaintUploadRequest struct {
|
||||
MchId string `position:"Body" field:"mch_id" default:"" `
|
||||
ImageUrl string `position:"Body" field:"image_url" default:"" `
|
||||
ComplaintId string `position:"Body" field:"complaint_id" default:" " `
|
||||
PayType int `position:"Body" field:"pay_type" default:"" `
|
||||
}
|
||||
|
||||
type ComplaintUploadResponse struct {
|
||||
|
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
|
||||
}
|
34
services/pay/merchant_config_debug.go
Normal file
34
services/pay/merchant_config_debug.go
Normal file
@ -0,0 +1,34 @@
|
||||
package pay
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type merchantConfigDebugRequest struct {
|
||||
*requests.RpcRequest
|
||||
MchId string `position:"Body" field:"mch_id" default:"" `
|
||||
PayType int `position:"Body" field:"pay_type" default:"" `
|
||||
}
|
||||
|
||||
type merchantConfigDebugResponse struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateMerchantConfigDebugRequest() (req *merchantConfigDebugRequest) {
|
||||
req = &merchantConfigDebugRequest{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/complaint/configDebug")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateMerchantConfigDebugResponse() (response *merchantConfigDebugResponse) {
|
||||
response = &merchantConfigDebugResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
46
services/script/client.go
Normal file
46
services/script/client.go
Normal file
@ -0,0 +1,46 @@
|
||||
package script
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2020-11-16"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "script",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// OpenGame 同步到游戏中心
|
||||
func (c *Client) OpenGame(req *OpenGameReq) (resp *OpenGameResp, err error) {
|
||||
resp = CreateOpenGameResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
36
services/script/client_test.go
Normal file
36
services/script/client_test.go
Normal file
@ -0,0 +1,36 @@
|
||||
package script
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOpenGame(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateOpenGameReq(7275)
|
||||
|
||||
resp, err := client.OpenGame(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
68
services/script/script.go
Normal file
68
services/script/script.go
Normal file
@ -0,0 +1,68 @@
|
||||
package script
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type OpenGameReq struct {
|
||||
*requests.RpcRequest
|
||||
GameID int `position:"Query" field:"game_id"`
|
||||
}
|
||||
|
||||
type OpenGameResp struct {
|
||||
*responses.BaseResponse
|
||||
}
|
||||
|
||||
type NewPayRedisDataReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type NewPayRedisDataResp struct {
|
||||
*responses.BaseResponse
|
||||
}
|
||||
|
||||
// GetHttpContentBytes 因为http://script.gaore.com/open_game.php?game_id=这个接口返回的不是json,反序列化会报错,所以返回一个固定的json
|
||||
func (baseResponse *OpenGameResp) GetHttpContentBytes() []byte {
|
||||
b, _ := json.Marshal(map[string]interface{}{"code": 200, "msg": "success"})
|
||||
return b
|
||||
}
|
||||
|
||||
// CreateOpenGameReq 创建同步到游戏中心请求
|
||||
func CreateOpenGameReq(gameId int) *OpenGameReq {
|
||||
req := &OpenGameReq{
|
||||
&requests.RpcRequest{},
|
||||
gameId,
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "open_game.php")
|
||||
req.Method = requests.GET
|
||||
|
||||
return req
|
||||
}
|
||||
|
||||
// CreateOpenGameResp 创建同步到游戏中心响应
|
||||
func CreateOpenGameResp() *OpenGameResp {
|
||||
return &OpenGameResp{
|
||||
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{},
|
||||
}
|
||||
}
|
115
services/sms/client.go
Normal file
115
services/sms/client.go
Normal file
@ -0,0 +1,115 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2024-05-30"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "sms.gaore.com",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SendEmail(req *SendEmailRequest) (resp *SendEmailResponse, err error) {
|
||||
if len(req.Addresses) == 0 {
|
||||
return nil, errors.New("addresses is empty")
|
||||
}
|
||||
if req.FromName == "" {
|
||||
return nil, errors.New("from is empty")
|
||||
}
|
||||
if req.Subject == "" {
|
||||
return nil, errors.New("subject is empty")
|
||||
}
|
||||
if req.Body == "" {
|
||||
return nil, errors.New("content is empty")
|
||||
}
|
||||
|
||||
ts, token := getToken("04573fc4c8e01999a0909ab9c00bca5a")
|
||||
|
||||
req.JsonParams["sign"] = token
|
||||
req.JsonParams["time"] = ts
|
||||
resp = CreateSendEmailResponse()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SendFeiShuWebHook(req *SendFeiShuWebHookRequest) (resp *SendFeiShuWebHookResponse, err error) {
|
||||
if req.Content == "" {
|
||||
err = errors.New("content is empty")
|
||||
return
|
||||
}
|
||||
|
||||
if req.Do == "" {
|
||||
err = errors.New("webhook is empty")
|
||||
return
|
||||
}
|
||||
|
||||
if req.Token == "" {
|
||||
err = errors.New("token is empty")
|
||||
return
|
||||
}
|
||||
|
||||
resp = CreateSendFeiShuWebHookResponse()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SendSms(req *SendSmsRequest) (resp *SendSmsResponse, err error) {
|
||||
|
||||
if req.Mobile == "" {
|
||||
err = errors.New("mobile is empty")
|
||||
return
|
||||
}
|
||||
|
||||
if req.Type == "" {
|
||||
err = errors.New("type is empty")
|
||||
return
|
||||
}
|
||||
resp = CreateSendSmsResponse()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SendSmsV2(req *SendSmsRequestV2) (resp *SendSmsResponseV2, err error) {
|
||||
|
||||
if req.Phone == "" {
|
||||
err = errors.New("phone is empty")
|
||||
return
|
||||
}
|
||||
|
||||
if req.Type == "" {
|
||||
err = errors.New("type is empty")
|
||||
return
|
||||
}
|
||||
resp = CreateSendSmsResponseV2()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func getToken(key string) (ts int64, token string) {
|
||||
ts = time.Now().Unix()
|
||||
hash := md5.New()
|
||||
hash.Write([]byte(fmt.Sprintf("%v%v", ts, key)))
|
||||
hashBytes := hash.Sum(nil)
|
||||
|
||||
token = hex.EncodeToString(hashBytes)
|
||||
return
|
||||
}
|
170
services/sms/client_test.go
Normal file
170
services/sms/client_test.go
Normal file
@ -0,0 +1,170 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var (
|
||||
client *Client
|
||||
)
|
||||
|
||||
func TestMain(t *testing.M) {
|
||||
var err error
|
||||
client, err = NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
t.Run()
|
||||
}
|
||||
|
||||
func TestClient_SendEmail(t *testing.T) {
|
||||
req := CreateSendEmailRequest(SendEmailParam{
|
||||
Addresses: []string{"xuyang@89you.com"},
|
||||
Subject: "测试邮件",
|
||||
Body: "xxx已修改密码,新密码是:xxx",
|
||||
FromName: "高热监控",
|
||||
})
|
||||
|
||||
email, err := client.SendEmail(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(email)
|
||||
}
|
||||
|
||||
func TestClient_SendFeiShuWebHook(t *testing.T) {
|
||||
//req := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||
// Do: FeiShuWebHookDoTypeSendRichText,
|
||||
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
||||
// Content: "[[{\"tag\":\"text\",\"text\":\"富文本信息: \"},{\"tag\":\"a\",\"text\":\"请查看\",\"href\":\"http://www.example.com/\"},{\"tag\":\"at\",\"user_id\":\"ou_18eac8********17ad4f02e8bbbb\"}]]",
|
||||
// Title: "卡片主标题",
|
||||
// TitleColor: "purple",
|
||||
//})
|
||||
//
|
||||
//resp, err := client.SendFeiShuWebHook(req)
|
||||
//if err != nil {
|
||||
// panic(err)
|
||||
//}
|
||||
//fmt.Println(resp.Msg)
|
||||
|
||||
//req2 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||
// Do: FeiShuWebHookDoTypeSendSimpleText,
|
||||
// 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对应的城市;",
|
||||
//})
|
||||
//
|
||||
//resp2, err := client.SendFeiShuWebHook(req2)
|
||||
//if err != nil {
|
||||
// panic(err)
|
||||
//}
|
||||
//fmt.Println(resp2)
|
||||
|
||||
//[
|
||||
// [
|
||||
// {
|
||||
// "tag": "text",
|
||||
// "text": "苹果ID:XXXX"
|
||||
// }
|
||||
// ],
|
||||
// [
|
||||
// {
|
||||
// "tag": "text",
|
||||
// "text": "游戏ID:XXXX"
|
||||
// }
|
||||
// ]
|
||||
//]
|
||||
|
||||
req3 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||
TitleColor: "purple",
|
||||
Title: "监控报警",
|
||||
Do: FeiShuWebHookDoTypeSendCardText,
|
||||
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\"}}]",
|
||||
})
|
||||
|
||||
resp3, err := client.SendFeiShuWebHook(req3)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp3.Msg)
|
||||
fmt.Println(resp3)
|
||||
}
|
||||
|
||||
func TestClient_SendSmsCode(t *testing.T) {
|
||||
req := CreateSendSmsRequest(SendSmsParam{
|
||||
Mobile: "18320021439",
|
||||
Type: SmsTypeBindPhone,
|
||||
Replaces: []Item{{
|
||||
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)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(sms)
|
||||
}
|
||||
|
||||
func TestClient_SendSmsCodeV2(t *testing.T) {
|
||||
req := CreateSendSmsRequestV2(SendSmsParamV2{
|
||||
Phone: "18320021439",
|
||||
Type: SmsTypeRegister,
|
||||
Replaces: []Item{{
|
||||
Key: ReplaceKeyCode,
|
||||
Value: "6379",
|
||||
}, {
|
||||
Key: ReplaceKeySecond,
|
||||
Value: "120",
|
||||
}},
|
||||
Company: "",
|
||||
Ip: "192.168.1.103",
|
||||
})
|
||||
|
||||
sms, err := client.SendSmsV2(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
marshal, err := json.Marshal(sms)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(string(marshal))
|
||||
}
|
45
services/sms/email.go
Normal file
45
services/sms/email.go
Normal file
@ -0,0 +1,45 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type SendEmailRequest struct {
|
||||
*requests.JsonRequest
|
||||
Addresses []string `position:"Json" field:"addresses"`
|
||||
Subject string `position:"Json" field:"subject"`
|
||||
Body string `position:"Json" field:"body"`
|
||||
FromName string `position:"Json" field:"from_name"`
|
||||
}
|
||||
|
||||
type SendEmailResponse struct {
|
||||
*responses.BaseResponse
|
||||
}
|
||||
|
||||
type SendEmailParam struct {
|
||||
Addresses []string
|
||||
Subject string
|
||||
Body string
|
||||
FromName string
|
||||
}
|
||||
|
||||
func CreateSendEmailRequest(param SendEmailParam) (req *SendEmailRequest) {
|
||||
req = &SendEmailRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
Addresses: param.Addresses,
|
||||
Subject: param.Subject,
|
||||
Body: param.Body,
|
||||
FromName: param.FromName,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/email/send")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateSendEmailResponse() (resp *SendEmailResponse) {
|
||||
resp = &SendEmailResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
57
services/sms/feishu.go
Normal file
57
services/sms/feishu.go
Normal file
@ -0,0 +1,57 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type SendFeiShuWebHookRequest struct {
|
||||
*requests.JsonRequest
|
||||
Do string `position:"Json" field:"do"`
|
||||
Token string `position:"Json" field:"token"`
|
||||
Content string `position:"Json" field:"content"`
|
||||
Title string `position:"Json" field:"title"`
|
||||
TitleColor string `position:"Json" field:"title_color"`
|
||||
}
|
||||
|
||||
type SendFeiShuWebHookResponse struct {
|
||||
*responses.BaseResponse
|
||||
FeishuData string `json:"feishu_data"`
|
||||
}
|
||||
|
||||
type FeiShuWebHookDoType = string
|
||||
|
||||
const (
|
||||
FeiShuWebHookDoTypeSendSimpleText FeiShuWebHookDoType = "sendSimpleText"
|
||||
FeiShuWebHookDoTypeSendRichText FeiShuWebHookDoType = "sendRichText"
|
||||
FeiShuWebHookDoTypeSendCardText FeiShuWebHookDoType = "sendCardText"
|
||||
)
|
||||
|
||||
type SendFeiShuWebHookParam struct {
|
||||
Do FeiShuWebHookDoType
|
||||
Token string
|
||||
Content string
|
||||
Title string
|
||||
TitleColor string
|
||||
}
|
||||
|
||||
func CreateSendFeiShuWebHookRequest(param SendFeiShuWebHookParam) (req *SendFeiShuWebHookRequest) {
|
||||
req = &SendFeiShuWebHookRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
Do: param.Do,
|
||||
Token: param.Token,
|
||||
Content: param.Content,
|
||||
Title: param.Title,
|
||||
TitleColor: param.TitleColor,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/feishu/webhook_send")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateSendFeiShuWebHookResponse() (resp *SendFeiShuWebHookResponse) {
|
||||
resp = &SendFeiShuWebHookResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
107
services/sms/sms.go
Normal file
107
services/sms/sms.go
Normal file
@ -0,0 +1,107 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"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 {
|
||||
*requests.JsonRequest
|
||||
Mobile string `position:"Json" field:"mobile"`
|
||||
Type string `position:"Json" field:"type"`
|
||||
Replaces []Item `position:"Json" field:"replaces"`
|
||||
}
|
||||
|
||||
type SendSmsResponse struct {
|
||||
*responses.BaseResponse
|
||||
}
|
||||
|
||||
type SendSmsRequestV2 struct {
|
||||
*requests.JsonRequest
|
||||
Phone string `position:"Json" field:"phone"`
|
||||
Type string `position:"Json" field:"type"`
|
||||
Replaces []Item `position:"Json" field:"replaces"`
|
||||
Company string `position:"Json" field:"company"`
|
||||
Ip string `position:"Json" field:"ip"`
|
||||
}
|
||||
|
||||
type SendSmsResponseV2 struct {
|
||||
*responses.BaseResponse
|
||||
TraceID string `json:"trace_id"`
|
||||
}
|
||||
|
||||
type SmsType = string
|
||||
|
||||
const (
|
||||
SmsTypeRegister SmsType = "reg" // 注册
|
||||
SmsTypeBindPhone SmsType = "bind_phone" // 绑定手机号
|
||||
TemplateTypeOrderComplete SmsType = "kf_order_complete" // 客服工单完成
|
||||
TemplateTypeKFOrderAdditional SmsType = "kf_order_additional" // 客服工单完成
|
||||
)
|
||||
|
||||
type SendSmsParam struct {
|
||||
Mobile string // 手机号
|
||||
Type SmsType // 验证码类型
|
||||
Replaces []Item
|
||||
}
|
||||
|
||||
type SendSmsParamV2 struct {
|
||||
Phone string // 手机号
|
||||
Type SmsType // 验证码类型
|
||||
Replaces []Item
|
||||
Company string // 子游戏公司主体
|
||||
Ip string // ip
|
||||
}
|
||||
|
||||
func CreateSendSmsRequest(param SendSmsParam) (req *SendSmsRequest) {
|
||||
req = &SendSmsRequest{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
Mobile: param.Mobile,
|
||||
Type: param.Type,
|
||||
Replaces: param.Replaces,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v1/sms/send")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateSendSmsResponse() (resp *SendSmsResponse) {
|
||||
resp = &SendSmsResponse{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func CreateSendSmsRequestV2(param SendSmsParamV2) (req *SendSmsRequestV2) {
|
||||
req = &SendSmsRequestV2{
|
||||
JsonRequest: &requests.JsonRequest{},
|
||||
Phone: param.Phone,
|
||||
Type: param.Type,
|
||||
Replaces: param.Replaces,
|
||||
Company: param.Company,
|
||||
Ip: param.Ip,
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/v2/sms/send")
|
||||
req.Method = requests.POST
|
||||
return
|
||||
}
|
||||
|
||||
func CreateSendSmsResponseV2() (resp *SendSmsResponseV2) {
|
||||
resp = &SendSmsResponseV2{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
return
|
||||
}
|
77
services/stat/agent.go
Normal file
77
services/stat/agent.go
Normal file
@ -0,0 +1,77 @@
|
||||
package stat
|
||||
|
||||
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 GetAgentListReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
/**
|
||||
返回json格式如下:
|
||||
{
|
||||
“code": 0,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"list": []
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
type GetAgentListResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data AgentList `json:"data"`
|
||||
}
|
||||
type AgentList struct {
|
||||
List []Agent `json:"list"`
|
||||
}
|
||||
type Agent struct {
|
||||
AgentId string `json:"agent_id"`
|
||||
AgentName string `json:"agent_name"`
|
||||
Media string `json:"media"`
|
||||
Channel string `json:"channel"`
|
||||
MediaName string `json:"media_name"`
|
||||
ChannelName string `json:"channel_name"`
|
||||
}
|
||||
|
||||
//const key = "gr_new_game"
|
||||
|
||||
// CreateGetAgentListReq 获取推广渠道列表请求
|
||||
func CreateGetAgentListReq(data map[string]string) *GetAgentListReq {
|
||||
req := &GetAgentListReq{
|
||||
&requests.RpcRequest{},
|
||||
}
|
||||
|
||||
ts := time.Now().Unix()
|
||||
hash := md5.New()
|
||||
hash.Write([]byte(fmt.Sprintf("%v%v", ts, key)))
|
||||
hashBytes := hash.Sum(nil)
|
||||
|
||||
token := hex.EncodeToString(hashBytes)
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/agent/getAgentList")
|
||||
req.Method = requests.POST
|
||||
|
||||
req.FormParams = data
|
||||
if req.FormParams == nil {
|
||||
req.FormParams = make(map[string]string)
|
||||
}
|
||||
req.FormParams["sign"] = token
|
||||
req.FormParams["time"] = fmt.Sprintf("%v", ts)
|
||||
return req
|
||||
}
|
||||
|
||||
// CreateGetAgentListResp 获取推广渠道列表响应
|
||||
func CreateGetAgentListResp() *GetAgentListResp {
|
||||
return &GetAgentListResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
76
services/stat/client.go
Normal file
76
services/stat/client.go
Normal file
@ -0,0 +1,76 @@
|
||||
package stat
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2020-11-16"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "stat",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// SyncGameServerList 同步开服数据
|
||||
func (c *Client) SyncGameServerList(req *SyncGameServerListReq) (resp *SyncGameServerListResp, err error) {
|
||||
resp = CreateSyncGameServerListResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SetUserNewGameAuth(req *SetUserNewGameAuthReq) (resp *SetUserNewGameAuthResp, err error) {
|
||||
resp = CreateSetUserNewGameAuthResp()
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetAgentList 获取推广渠道列表
|
||||
func (c *Client) GetAgentList(req *GetAgentListReq) (resp *GetAgentListResp, err error) {
|
||||
resp = CreateGetAgentListResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
// GetUserTotalPay 获取用户累计付费
|
||||
func (c *Client) GetUserTotalPay(req *GetUserTotalPayReq) (resp *GetUserTotalPayResp, err error) {
|
||||
resp = CreateGetUserTotalPayResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
119
services/stat/client_test.go
Normal file
119
services/stat/client_test.go
Normal file
@ -0,0 +1,119 @@
|
||||
package stat
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSyncGameServerList(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateSyncGameServerListReq("insertOrUpdate", []map[string]interface{}{
|
||||
{
|
||||
"id": 123564,
|
||||
"channel_id": 12456,
|
||||
"version_id": 1,
|
||||
"game_id": 1,
|
||||
"server_id": 1,
|
||||
"game_sign": "test",
|
||||
"name": "test",
|
||||
"open_date": "2099-03-01",
|
||||
"open_time": "12:00:00",
|
||||
"remark": "",
|
||||
"status": 1,
|
||||
"if_tj": 1,
|
||||
},
|
||||
})
|
||||
|
||||
resp, err := client.SyncGameServerList(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Count)
|
||||
}
|
||||
|
||||
func TestClient_SetUserNewGameAuth(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateSetUserNewGameAuthReq(map[string]string{
|
||||
"game_sign": "qwldy",
|
||||
"game_id": "7275",
|
||||
})
|
||||
|
||||
resp, err := client.SetUserNewGameAuth(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data.Result)
|
||||
}
|
||||
|
||||
// TestClient_GetAgentList 查询代理列表单元测试
|
||||
func TestClient_GetAgentList(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateGetAgentListReq(map[string]string{
|
||||
"agent_id": "4051,68017",
|
||||
//"agent_id": "99",
|
||||
})
|
||||
|
||||
resp, err := client.GetAgentList(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data)
|
||||
|
||||
// 断言 resp.Code = 1,且 resp.Data 不空为正常
|
||||
if resp.Code != 1 || len(resp.Data.List) == 0 {
|
||||
t.Errorf("GetAgentList test failed")
|
||||
} else {
|
||||
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)
|
||||
}
|
||||
|
||||
// 获取用户累计付费
|
||||
func TestGetUserTotalPay(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateGetUserTotalPayReq(GetUserTotalPayParam{
|
||||
Where: "user_name = 'yoyo685757'",
|
||||
Fields: []string{"user_name", "sum(total_pay_money) as total_pay_money", "last_pay_time"},
|
||||
GroupBy: []string{"user_name"},
|
||||
})
|
||||
|
||||
resp, err := client.GetUserTotalPay(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data)
|
||||
}
|
62
services/stat/game.go
Normal file
62
services/stat/game.go
Normal file
@ -0,0 +1,62 @@
|
||||
package stat
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
type SyncGameServerListReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type SyncGameServerListResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
// CreateSyncGameServerListReq 创建同步开服数据请求
|
||||
// opt: 更新 insertOrUpdate, 删除 del
|
||||
//
|
||||
// data: []map[string]interface{}{
|
||||
// {
|
||||
// "id": data.ID,
|
||||
// "channel_id": data.ChannelID,
|
||||
// "version_id": data.VersionID,
|
||||
// "game_id": data.GameID,
|
||||
// "server_id": data.ServerID,
|
||||
// "game_sign": data.GameSign,
|
||||
// "name": data.Name,
|
||||
// "open_date": data.OpenDate.Format(constants.DateFormat),
|
||||
// "open_time": data.OpenTime,
|
||||
// "remark": data.Remark,
|
||||
// "status": data.Status,
|
||||
// "if_tj": data.IfTj,
|
||||
// },
|
||||
// }
|
||||
func CreateSyncGameServerListReq(opt string, data []map[string]interface{}) *SyncGameServerListReq {
|
||||
req := &SyncGameServerListReq{
|
||||
&requests.RpcRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/game/syncGameServerList")
|
||||
req.Method = requests.POST
|
||||
|
||||
marshal, _ := json.Marshal(data)
|
||||
|
||||
req.FormParams = map[string]string{
|
||||
"opt": opt,
|
||||
"data": string(marshal),
|
||||
}
|
||||
|
||||
return req
|
||||
}
|
||||
|
||||
// CreateSyncGameServerListResp 创建同步开服数据响应
|
||||
func CreateSyncGameServerListResp() *SyncGameServerListResp {
|
||||
return &SyncGameServerListResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
63
services/stat/pay.go
Normal file
63
services/stat/pay.go
Normal file
@ -0,0 +1,63 @@
|
||||
package stat
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type GetUserTotalPayReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type GetUserTotalPayParam struct {
|
||||
Where string `json:"where"`
|
||||
Fields []string `json:"fields"`
|
||||
GroupBy []string `json:"group_by"`
|
||||
}
|
||||
|
||||
type GetUserTotalPayResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data TotalPayList `json:"data"`
|
||||
}
|
||||
type TotalPayList struct {
|
||||
List []TotalPay `json:"list"`
|
||||
}
|
||||
type TotalPay struct {
|
||||
UserName string `json:"user_name"`
|
||||
RegDate string `json:"reg_date"`
|
||||
AgentId int64 `json:"agent_id"`
|
||||
SiteId int64 `json:"site_id"`
|
||||
GameId int64 `json:"game_id"`
|
||||
FirstPayTime string `json:"first_pay_time"`
|
||||
FirstPayMoney float64 `json:"first_pay_money"`
|
||||
TotalPayMoney float64 `json:"total_pay_money"`
|
||||
LastPayTime string `json:"last_pay_time"`
|
||||
PayTimes int64 `json:"pay_times"`
|
||||
IsFirst int64 `json:"is_first"`
|
||||
}
|
||||
|
||||
// CreateGetUserTotalPayReq 获取用户累充
|
||||
func CreateGetUserTotalPayReq(data GetUserTotalPayParam) *GetUserTotalPayReq {
|
||||
req := &GetUserTotalPayReq{
|
||||
&requests.RpcRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/pay/getUserTotalPay")
|
||||
req.Method = requests.POST
|
||||
req.FormParams = make(map[string]string)
|
||||
req.FormParams["where"] = data.Where
|
||||
req.FormParams["fields"] = strings.Join(data.Fields, ",")
|
||||
req.FormParams["group_by"] = strings.Join(data.GroupBy, ",")
|
||||
|
||||
return req
|
||||
}
|
||||
|
||||
// CreateGetUserTotalPayResp 获取用户累充
|
||||
func CreateGetUserTotalPayResp() *GetUserTotalPayResp {
|
||||
return &GetUserTotalPayResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
115
services/stat/user.go
Normal file
115
services/stat/user.go
Normal file
@ -0,0 +1,115 @@
|
||||
package stat
|
||||
|
||||
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 SetUserNewGameAuthReq struct {
|
||||
*requests.RpcRequest
|
||||
}
|
||||
|
||||
type SetUserNewGameAuthResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data Data `json:"data"`
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
Result string `json:"result"`
|
||||
}
|
||||
|
||||
const key = "gr_new_game"
|
||||
|
||||
// CreateSetUserNewGameAuthReq 设置用户新游戏授权
|
||||
func CreateSetUserNewGameAuthReq(data map[string]string) *SetUserNewGameAuthReq {
|
||||
req := &SetUserNewGameAuthReq{
|
||||
&requests.RpcRequest{},
|
||||
}
|
||||
|
||||
ts := time.Now().Unix()
|
||||
hash := md5.New()
|
||||
hash.Write([]byte(fmt.Sprintf("%v%v", ts, key)))
|
||||
hashBytes := hash.Sum(nil)
|
||||
|
||||
token := hex.EncodeToString(hashBytes)
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/user/setUserNewGameAuth")
|
||||
req.Method = requests.POST
|
||||
|
||||
req.FormParams = data
|
||||
if req.FormParams == nil {
|
||||
req.FormParams = make(map[string]string)
|
||||
}
|
||||
req.FormParams["sign"] = token
|
||||
req.FormParams["time"] = fmt.Sprintf("%v", ts)
|
||||
return req
|
||||
}
|
||||
|
||||
// CreateSetUserNewGameAuthResp 创建设置用户新游戏授权响应
|
||||
func CreateSetUserNewGameAuthResp() *SetUserNewGameAuthResp {
|
||||
return &SetUserNewGameAuthResp{
|
||||
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{},
|
||||
}
|
||||
}
|
55
services/userlive/client.go
Normal file
55
services/userlive/client.go
Normal file
@ -0,0 +1,55 @@
|
||||
package userlive
|
||||
|
||||
import (
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION = "2020-11-16"
|
||||
)
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "userlive",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = new(Client)
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// CreateBanReq 封禁
|
||||
func (c *Client) CreateBanReq(req *BanReq) (resp *BanResp, err error) {
|
||||
resp = CreateBanResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// CreateAddBanRuleCacheReq 添加封禁规则缓存
|
||||
func (c *Client) CreateAddBanRuleCacheReq(req *AddBanRuleCacheReq) (resp *AddBanRuleCacheResp, err error) {
|
||||
resp = CreateAddBanRuleCacheResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// CreateRemoveBanRuleCacheReq 删除封禁规则缓存
|
||||
|
||||
func (c *Client) CreateRemoveBanRuleCacheReq(req *RemoveBanRuleCacheReq) (resp *RemoveBanRuleCacheResp, err error) {
|
||||
resp = CreateRemoveBanRuleCacheResp()
|
||||
err = c.DoAction(req, resp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
104
services/userlive/client_test.go
Normal file
104
services/userlive/client_test.go
Normal file
@ -0,0 +1,104 @@
|
||||
package userlive
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 踢人
|
||||
func TestBan(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateBanReq(BanReqParam{
|
||||
ActionTime: time.Now().Unix(),
|
||||
TriggerType: triggerTypeLogin,
|
||||
Ip: "127.0.0.1",
|
||||
GameId: 8654,
|
||||
UserName: "aq36604627",
|
||||
Uid: 632308087,
|
||||
ServerId: 123,
|
||||
RoleId: "123",
|
||||
BundleId: "asdfas",
|
||||
GameName: "fasdf",
|
||||
GameVersion: "fasdf",
|
||||
SdkVersion: "fasdf",
|
||||
Os: "fasd",
|
||||
OsVersion: "faf",
|
||||
InApp: "fasdf",
|
||||
Ua: "fasdfas",
|
||||
NetworkType: "fasdfa",
|
||||
IsVirtual: "-1",
|
||||
Cpu: "cpu",
|
||||
DeviceModel: "dfasdf",
|
||||
Baseband: "fasdfa",
|
||||
Resolution: "fasdfa",
|
||||
Battery: "fasdf",
|
||||
LongId: "fasdf",
|
||||
OriginImei: "fasdf",
|
||||
Imei: "fasdf",
|
||||
OriginOaid: "fasdf",
|
||||
Oaid: "fasdf",
|
||||
AndroidId: "fasdf",
|
||||
Idfa: "fsdf",
|
||||
Idfv: "fasdf",
|
||||
DeviceId: "fasdf",
|
||||
})
|
||||
|
||||
resp, err := client.CreateBanReq(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data)
|
||||
}
|
||||
|
||||
// 添加封禁规则
|
||||
func TestAddBanRuleCache(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req := CreateAddBanRuleCacheReq(RuleInfo{
|
||||
Id: 21,
|
||||
Phone: "13247173568",
|
||||
UserName: "gr24616919",
|
||||
IdCard: "",
|
||||
DeviceId: "device_id1",
|
||||
LongId: "long_id1",
|
||||
IsVirtual: 0,
|
||||
EndTime: "2029-01-01",
|
||||
})
|
||||
|
||||
resp, err := client.CreateAddBanRuleCacheReq(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data)
|
||||
}
|
||||
|
||||
// 删除封禁规则
|
||||
func TestRemoveBanRuleCache(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
infos := []RuleInfo{{
|
||||
Id: 21,
|
||||
Phone: "13247173568",
|
||||
UserName: "gr24616919",
|
||||
IdCard: "",
|
||||
DeviceId: "device_id1",
|
||||
LongId: "long_id1",
|
||||
IsVirtual: 0,
|
||||
EndTime: "2029-01-01",
|
||||
}}
|
||||
req := CreateRemoveBanRuleCacheReq(RemoveBanRuleCacheReqParam{Rules: infos})
|
||||
|
||||
resp, err := client.CreateRemoveBanRuleCacheReq(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(resp.Code, resp.Msg, resp.Data)
|
||||
}
|
159
services/userlive/user_ban.go
Normal file
159
services/userlive/user_ban.go
Normal file
@ -0,0 +1,159 @@
|
||||
package userlive
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||
)
|
||||
|
||||
const (
|
||||
triggerTypeHeartbeat = "heartbeat" // 心跳上报触发
|
||||
triggerTypeLogin = "login" // 用户登录、注册
|
||||
)
|
||||
|
||||
// BanReq
|
||||
// 上报用户设备信息,判断是否要踢用户下线
|
||||
type BanReq struct {
|
||||
*requests.JsonRequest
|
||||
}
|
||||
|
||||
type BanResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
Ban bool `json:"ban"` // 是否要禁止
|
||||
BanRuleId int64 `json:"ban_rule_id"` // 命中的封禁规则id
|
||||
} `json:"data"`
|
||||
}
|
||||
type BanReqParam struct {
|
||||
ActionTime int64 `json:"action_time" form:"action_time"` // 上报时间
|
||||
TriggerType string `json:"trigger_type" form:"trigger_type"` // 触发类型
|
||||
Ip string `json:"ip" form:"ip"` // ip
|
||||
GameId int64 `json:"game_id" form:"game_id"` // 游戏id
|
||||
UserName string `json:"user_name" form:"user_name"` // 用户名
|
||||
Uid int64 `json:"uid" form:"uid"` // 用户id
|
||||
ServerId string `json:"server_id" form:"server_id"` // 区服id
|
||||
RoleId string `json:"role_id" form:"role_id"` // 角色id
|
||||
BundleId string `json:"bundle_id" form:"bundle_id"` // ios 包名
|
||||
GameName string `json:"game_name" from:"game_name"` // 应用名
|
||||
GameVersion string `json:"game_version" from:"game_version"` // 游戏版本
|
||||
SdkVersion string `json:"sdk_version" from:"sdk_version"` // sdk版本
|
||||
Os string `json:"os" from:"os"` // 系统
|
||||
OsVersion string `json:"os_version" from:"os_version"` // 系统版本
|
||||
InApp string `json:"in_app" from:"in_app"` // 壳包系统,壳包传 如:ios、android
|
||||
Ua string `json:"ua" from:"ua"` // ua
|
||||
NetworkType string `json:"network_type" from:"network_type"` // 网络类型
|
||||
IsVirtual string `json:"is_virtual" from:"is_virtual"` // 是否是模拟器,字符串0,1,空字符串表示未知
|
||||
Cpu string `json:"cpu" from:"cpu"` // cpu型号
|
||||
DeviceModel string `json:"device_model" from:"device_model"` // 设备型号
|
||||
Baseband string `json:"baseband" from:"baseband"` // 基带信息
|
||||
Resolution string `json:"resolution" from:"resolution"` // 分辨率
|
||||
Battery string `json:"battery" from:"battery"` // 电量
|
||||
LongId string `json:"long_id" form:"long_id"` // 逻辑设备号
|
||||
OriginImei string `json:"origin_imei" form:"origin_imei"` // imei原值
|
||||
Imei string `json:"imei" form:"imei"` // 老sdk采集的imei
|
||||
OriginOaid string `json:"origin_oaid" form:"origin_oaid"` // oaid原值
|
||||
Oaid string `json:"oaid" form:"oaid"` // 老sdk采集的oaid
|
||||
AndroidId string `json:"android_id" form:"android_id"` // 安卓id
|
||||
Idfa string `json:"idfa" form:"idfa"` // idfa
|
||||
Idfv string `json:"idfv" form:"idfv"` // idfv
|
||||
DeviceId string `json:"device_id" form:"device_id"` // device_id
|
||||
}
|
||||
|
||||
func CreateBanReq(data BanReqParam) *BanReq {
|
||||
req := &BanReq{
|
||||
&requests.JsonRequest{},
|
||||
}
|
||||
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/user_ban/ban")
|
||||
req.Method = requests.POST
|
||||
|
||||
marshal, _ := json.Marshal(data)
|
||||
_ = json.Unmarshal(marshal, &req.JsonParams)
|
||||
return req
|
||||
}
|
||||
|
||||
// CreateBanResp 创建同步开服数据响应
|
||||
func CreateBanResp() *BanResp {
|
||||
return &BanResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
// AddBanRuleCacheReq
|
||||
// 添加封禁规则缓存
|
||||
type AddBanRuleCacheReq struct {
|
||||
*requests.JsonRequest
|
||||
}
|
||||
|
||||
type AddBanRuleCacheResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct{} `json:"data"`
|
||||
}
|
||||
|
||||
type RuleInfo struct {
|
||||
Id int64 `json:"id"`
|
||||
Phone string `json:"phone"`
|
||||
UserName string `json:"user_name"`
|
||||
IdCard string `json:"id_card"`
|
||||
DeviceId string `json:"device_id"`
|
||||
LongId string `json:"long_id"`
|
||||
IsVirtual int64 `json:"is_virtual"`
|
||||
EndTime string `json:"end_time"`
|
||||
}
|
||||
|
||||
func CreateAddBanRuleCacheReq(data RuleInfo) *AddBanRuleCacheReq {
|
||||
req := &AddBanRuleCacheReq{
|
||||
&requests.JsonRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/user_ban/add_cache")
|
||||
req.Method = requests.POST
|
||||
|
||||
marshal, _ := json.Marshal(data)
|
||||
_ = json.Unmarshal(marshal, &req.JsonParams)
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateAddBanRuleCacheResp() *AddBanRuleCacheResp {
|
||||
return &AddBanRuleCacheResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
||||
|
||||
// RemoveBanRuleCacheReq
|
||||
// 删除封禁规则缓存
|
||||
type RemoveBanRuleCacheReq struct {
|
||||
*requests.JsonRequest
|
||||
}
|
||||
|
||||
type RemoveBanRuleCacheReqParam struct {
|
||||
Rules []RuleInfo `json:"rules"`
|
||||
}
|
||||
|
||||
type RemoveBanRuleCacheResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct{} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateRemoveBanRuleCacheReq(param RemoveBanRuleCacheReqParam) *RemoveBanRuleCacheReq {
|
||||
req := &RemoveBanRuleCacheReq{
|
||||
&requests.JsonRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/api/user_ban/remove_cache")
|
||||
req.Method = requests.POST
|
||||
|
||||
marshal, _ := json.Marshal(param)
|
||||
_ = json.Unmarshal(marshal, &req.JsonParams)
|
||||
return req
|
||||
}
|
||||
|
||||
func CreateRemoveBanRuleCacheResp() *RemoveBanRuleCacheResp {
|
||||
return &RemoveBanRuleCacheResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user