Compare commits
	
		
			181 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ac55968c24 | |||
| cc6622af98 | |||
| ca0c051b4a | |||
| 8f1337ec27 | |||
| c53870b08a | |||
| 56ab109c90 | |||
| d06b43fea8 | |||
| a63ab8a8dc | |||
| 0fbd6d25b9 | |||
| dc2b1e92d3 | |||
|  | b3cb834ff2 | ||
| 9bb792c453 | |||
| c2606d0a41 | |||
|  | b762daa17d | ||
|  | 742c017988 | ||
|  | 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 | |||
| f272d5f199 | |||
| 4a37a5aa14 | |||
| 897a719154 | |||
|  | b09f25cf3b | ||
|  | 63a32ad047 | ||
|  | 758892ac93 | ||
|  | 1850103557 | ||
|  | 41af2049a9 | ||
|  | b6961d28b6 | ||
|  | 09938bbf20 | ||
|  | 6fb06e3d4f | ||
|  | 34b757ca09 | ||
|  | e710c3050a | ||
|  | de3c82cbff | ||
| afb120c6f4 | |||
|  | 6ad1f1ac2e | ||
|  | 5f942571eb | ||
|  | 0d95da1408 | ||
|  | 901b935e56 | ||
|  | b3f94062fb | ||
|  | cb0730aebd | ||
|  | 45616c93cd | ||
|  | 64eeb45b3e | ||
|  | 4da114e97b | ||
|  | 22e735f112 | ||
|  | d69e9389c3 | ||
|  | 825dac2a54 | ||
|  | b719f44553 | ||
|  | 70bf6b572a | ||
|  | f0ae70298d | ||
|  | f5882c632a | ||
|  | ff2a0f917a | ||
|  | b8b1585d5e | 
| @ -172,3 +172,8 @@ func CreateDemoTestResponse() *DemoTestResponse { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
|  | 终端调试打开方式, 需要在系统环境变量上加入(三选一): | ||||||
|  | ``` | ||||||
|  | DEBUG=sdk,signer,request | ||||||
|  | ``` | ||||||
							
								
								
									
										13
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | module golib.gaore.com/GaoreGo/gaore-common-sdk-go | ||||||
|  | 
 | ||||||
|  | go 1.19 | ||||||
|  | 
 | ||||||
|  | require ( | ||||||
|  | 	github.com/json-iterator/go v1.1.12 | ||||||
|  | 	github.com/spf13/cast v1.8.0 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | require ( | ||||||
|  | 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||||
|  | 	github.com/modern-go/reflect2 v1.0.2 // indirect | ||||||
|  | ) | ||||||
							
								
								
									
										26
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | 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/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||||
|  | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | ||||||
|  | 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/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
|  | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||||
|  | 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/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= | ||||||
|  | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/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/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= | ||||||
|  | github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= | ||||||
|  | github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= | ||||||
|  | github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= | ||||||
|  | github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= | ||||||
|  | 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 { | 	if err != nil { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	if _, isContainsSign := request.GetQueryParams()["sign"]; isContainsSign { | 	if signer != nil { | ||||||
| 		delete(request.GetQueryParams(), "sign") | 		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 | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func completeRpcSignParams(request requests.AcsRequest, signer Signer) (err error) { | 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 | 		queryParams := request.GetQueryParams() | ||||||
| 	if accessKeyFrom, err = signer.GetAccessKeyFrom(); err != nil { | 		queryParams["access_time"] = fmt.Sprintf("%d", time.Now().Unix()) | ||||||
| 		return | 		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()["Content-type"] = requests.Form | ||||||
| 	request.GetHeaders()["Gr-Sdk-From"] = accessKeyFrom | 
 | ||||||
| 	formString := utils.GetUrlFormedMap(request.GetFormParams()) | 	formString := utils.GetUrlFormedMap(request.GetFormParams()) | ||||||
| 	request.SetContent(bytes.NewBufferString(formString).Bytes()) | 	request.SetContent(bytes.NewBufferString(formString).Bytes()) | ||||||
| 	return | 	return | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"crypto/tls" | 	"crypto/tls" | ||||||
| 	"fmt" | 	"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" | ||||||
| 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/credentials" | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/credentials" | ||||||
| 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
| @ -18,6 +19,7 @@ import ( | |||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"runtime" | 	"runtime" | ||||||
| 	"strings" | 	"strings" | ||||||
|  | 	"sync" | ||||||
| 	"time" | 	"time" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -44,6 +46,27 @@ type Client struct { | |||||||
| 	httpProxy      string | 	httpProxy      string | ||||||
| 	httpsProxy     string | 	httpsProxy     string | ||||||
| 	noProxy        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 { | func (client *Client) GetNoProxy() string { | ||||||
| @ -83,13 +106,21 @@ func (client *Client) InitClientConfig() (config *Config) { | |||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (client *Client) Init() (err error) { | ||||||
|  | 	return client.InitWithAccessKey("", "", "") | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (client *Client) InitWithAccessKey(accessKeyId, accessKeySecret, accessKeyFrom string) (err error) { | func (client *Client) InitWithAccessKey(accessKeyId, accessKeySecret, accessKeyFrom string) (err error) { | ||||||
| 	config := client.InitWithConfig() | 	config := client.InitWithConfig() | ||||||
| 	credential := &credentials.BaseCredential{ | 	var credential auth.Credential | ||||||
| 		AccessKeyId:     accessKeyId, | 	if accessKeyId != "" { | ||||||
| 		AccessKeySecret: accessKeySecret, | 		credential = &credentials.BaseCredential{ | ||||||
| 		AccessKeyFrom:   accessKeyFrom, | 			AccessKeyId:     accessKeyId, | ||||||
|  | 			AccessKeySecret: accessKeySecret, | ||||||
|  | 			AccessKeyFrom:   accessKeyFrom, | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	return client.InitWithOptions(config, credential) | 	return client.InitWithOptions(config, credential) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -127,8 +158,9 @@ func (client *Client) InitWithOptions(config *Config, credential auth.Credential | |||||||
| 	if config.Timeout > 0 { | 	if config.Timeout > 0 { | ||||||
| 		client.httpClient.Timeout = config.Timeout | 		client.httpClient.Timeout = config.Timeout | ||||||
| 	} | 	} | ||||||
| 
 | 	if credential != nil { | ||||||
| 	client.signer, err = auth.NewSignerWithCredential(credential, client.ProcessCommonRequestWithSigner) | 		client.signer, err = auth.NewSignerWithCredential(credential, client.ProcessCommonRequestWithSigner) | ||||||
|  | 	} | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -207,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) { | 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) | 	httpRequest, err := client.buildRequestWithSigner(request, signer) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| @ -355,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) { | func hookDo(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) { | ||||||
| 	return fn | 	return fn | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	once := sync.Once{} | ||||||
|  | 	once.Do(func() { | ||||||
|  | 		extra.RegisterFuzzyDecoders() | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										71
									
								
								sdk/requests/json_request.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								sdk/requests/json_request.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | |||||||
|  | package requests | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fmt" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" | ||||||
|  | 	"io" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type JsonRequest struct { | ||||||
|  | 	*baseRequest | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) init() { | ||||||
|  | 	request.baseRequest = defaultBaseRequest() | ||||||
|  | 	request.baseRequest.AddHeaderParam("Content-Type", Json) | ||||||
|  | 	request.Method = POST | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) BuildUrl() string { | ||||||
|  | 
 | ||||||
|  | 	var hostname string | ||||||
|  | 	if request.Domain.Func == nil { | ||||||
|  | 		hostname = request.Domain.Default | ||||||
|  | 	} else if hostname = request.Domain.Func(request.GetEnv()); hostname == "" { | ||||||
|  | 		hostname = request.Domain.Default | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	url := fmt.Sprintf("%s://%s", strings.ToLower(request.Scheme), hostname) | ||||||
|  | 	if len(request.Port) > 0 { | ||||||
|  | 		url = fmt.Sprintf("%s:%s", url, request.Port) | ||||||
|  | 	} | ||||||
|  | 	return url + request.BuildQueries() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) GetStyle() string { | ||||||
|  | 	return STREAM | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) BuildQueries() string { | ||||||
|  | 	path := strings.TrimLeft(strings.TrimSpace(request.GetActionName()), "/") | ||||||
|  | 	mod := "&" | ||||||
|  | 	if !strings.Contains(path, "?") { | ||||||
|  | 		mod = "?" | ||||||
|  | 	} | ||||||
|  | 	request.queries = "/" + path + mod + utils.GetUrlFormedMap(request.QueryParams) | ||||||
|  | 	return request.queries | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) GetActionName() string { | ||||||
|  | 	return request.actionName | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) InitWithApiInfo(domain Host, version, urlPath string) { | ||||||
|  | 	request.init() | ||||||
|  | 	request.SetDomain(domain) | ||||||
|  | 	request.version = version | ||||||
|  | 	request.actionName = urlPath | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (request *JsonRequest) GetBodyReader() io.Reader { | ||||||
|  | 	if request.JsonParams != nil && len(request.JsonParams) > 0 { | ||||||
|  | 		body, err := json.Marshal(request.JsonParams) | ||||||
|  | 		if err == nil { | ||||||
|  | 			return bytes.NewReader(body) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return strings.NewReader("") | ||||||
|  | } | ||||||
| @ -12,8 +12,9 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| 	RPC = "RPC" | 	RPC    = "RPC" | ||||||
| 	ROA = "ROA" | 	ROA    = "ROA" | ||||||
|  | 	STREAM = "STREAM" | ||||||
| 
 | 
 | ||||||
| 	HTTP  = "HTTP" | 	HTTP  = "HTTP" | ||||||
| 	HTTPS = "HTTPS" | 	HTTPS = "HTTPS" | ||||||
| @ -31,15 +32,17 @@ const ( | |||||||
| 	HEAD    = "HEAD" | 	HEAD    = "HEAD" | ||||||
| 	OPTIONS = "OPTIONS" | 	OPTIONS = "OPTIONS" | ||||||
| 
 | 
 | ||||||
| 	Json = "application/json" | 	Json     = "application/json" | ||||||
| 	Xml  = "application/xml" | 	Xml      = "application/xml" | ||||||
| 	Raw  = "application/octet-stream" | 	Raw      = "application/octet-stream" | ||||||
| 	Form = "application/x-www-form-urlencoded" | 	Form     = "application/x-www-form-urlencoded" | ||||||
|  | 	FormData = "multipart/form-data" | ||||||
| 
 | 
 | ||||||
| 	Header = "Header" | 	Header   = "Header" | ||||||
| 	Query  = "Query" | 	Query    = "Query" | ||||||
| 	Body   = "Body" | 	Body     = "Body" | ||||||
| 	Path   = "Path" | 	BodyJson = "Json" | ||||||
|  | 	Path     = "Path" | ||||||
| 
 | 
 | ||||||
| 	TEST    = "TEST" | 	TEST    = "TEST" | ||||||
| 	PRE     = "PRE" | 	PRE     = "PRE" | ||||||
| @ -53,6 +56,11 @@ type Host struct { | |||||||
| 	Func    func(string) string | 	Func    func(string) string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type RefererHeader struct { | ||||||
|  | 	Referer string | ||||||
|  | 	TraceId string | ||||||
|  | } | ||||||
|  | 
 | ||||||
| var debug utils.Debug | var debug utils.Debug | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| @ -91,9 +99,11 @@ type AcsRequest interface { | |||||||
| 	GetStringToSign() string | 	GetStringToSign() string | ||||||
| 	GetBodyReader() io.Reader | 	GetBodyReader() io.Reader | ||||||
| 
 | 
 | ||||||
| 	addHeaderParam(key, value string) | 	AddHeaderParam(key, value string) | ||||||
|  | 	AddHeaders(headers map[string]string) | ||||||
| 	addQueryParam(key, value string) | 	addQueryParam(key, value string) | ||||||
| 	addFormParam(key, value string) | 	addFormParam(key, value string) | ||||||
|  | 	addJsonParam(string, any) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type baseRequest struct { | type baseRequest struct { | ||||||
| @ -117,6 +127,7 @@ type baseRequest struct { | |||||||
| 	QueryParams map[string]string | 	QueryParams map[string]string | ||||||
| 	Headers     map[string]string | 	Headers     map[string]string | ||||||
| 	FormParams  map[string]string | 	FormParams  map[string]string | ||||||
|  | 	JsonParams  map[string]any | ||||||
| 	Content     []byte | 	Content     []byte | ||||||
| 
 | 
 | ||||||
| 	queries      string | 	queries      string | ||||||
| @ -217,10 +228,16 @@ func (request *baseRequest) SetStringToSign(stringToSign string) { | |||||||
| 	request.stringToSign = stringToSign | 	request.stringToSign = stringToSign | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (request *baseRequest) addHeaderParam(key, val string) { | func (request *baseRequest) AddHeaderParam(key, val string) { | ||||||
| 	request.Headers[key] = val | 	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) { | func (request *baseRequest) addQueryParam(key, val string) { | ||||||
| 	request.QueryParams[key] = val | 	request.QueryParams[key] = val | ||||||
| } | } | ||||||
| @ -229,6 +246,10 @@ func (request *baseRequest) addFormParam(key, val string) { | |||||||
| 	request.FormParams[key] = val | 	request.FormParams[key] = val | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (request *baseRequest) addJsonParam(key string, val any) { | ||||||
|  | 	request.JsonParams[key] = val | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func defaultBaseRequest() (request *baseRequest) { | func defaultBaseRequest() (request *baseRequest) { | ||||||
| 	request = &baseRequest{ | 	request = &baseRequest{ | ||||||
| 		Scheme:       HTTP, | 		Scheme:       HTTP, | ||||||
| @ -241,6 +262,7 @@ func defaultBaseRequest() (request *baseRequest) { | |||||||
| 			"Accept-Encoding":    Json, | 			"Accept-Encoding":    Json, | ||||||
| 		}, | 		}, | ||||||
| 		FormParams: make(map[string]string), | 		FormParams: make(map[string]string), | ||||||
|  | 		JsonParams: make(map[string]any), | ||||||
| 	} | 	} | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| @ -289,22 +311,24 @@ func flatRepeatedList(reflectValue reflect.Value, request AcsRequest, position s | |||||||
| 				value = fieldDefault | 				value = fieldDefault | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			err = addParam(request, fieldPosition, name, value) | 			err = addParam(request, fieldPosition, name, value, reflectValue.Field(i).Interface()) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return | 	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 { | 	if len(value) > 0 { | ||||||
| 		switch position { | 		switch position { | ||||||
| 		case Header: | 		case Header: | ||||||
| 			request.addHeaderParam(key, value) | 			request.AddHeaderParam(key, value) | ||||||
| 		case Query: | 		case Query: | ||||||
| 			request.addQueryParam(key, value) | 			request.addQueryParam(key, value) | ||||||
| 		case Body: | 		case Body: | ||||||
| 			request.addFormParam(key, value) | 			request.addFormParam(key, value) | ||||||
|  | 		case BodyJson: | ||||||
|  | 			request.addJsonParam(key, vAny) | ||||||
| 		default: | 		default: | ||||||
| 			errmsg := fmt.Sprintf("unsupport positions add param `%s`", position) | 			errmsg := fmt.Sprintf("unsupport positions add param `%s`", position) | ||||||
| 			err = errors.New(errmsg) | 			err = errors.New(errmsg) | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ type RpcRequest struct { | |||||||
| 
 | 
 | ||||||
| func (request *RpcRequest) init() { | func (request *RpcRequest) init() { | ||||||
| 	request.baseRequest = defaultBaseRequest() | 	request.baseRequest = defaultBaseRequest() | ||||||
|  | 	request.baseRequest.AddHeaderParam("Content-Type", Form) | ||||||
| 	request.Method = POST | 	request.Method = POST | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										55
									
								
								sdk/requests/stream_request.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								sdk/requests/stream_request.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | package requests | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"fmt" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" | ||||||
|  | 	"io" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type StreamRequest struct { | ||||||
|  | 	*baseRequest | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *StreamRequest) init() { | ||||||
|  | 	s.baseRequest = defaultBaseRequest() | ||||||
|  | 	s.baseRequest.AddHeaderParam("Content-Type", FormData) | ||||||
|  | 	s.Method = POST | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *StreamRequest) GetStyle() string { | ||||||
|  | 	return STREAM | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *StreamRequest) InitWithApiInfo(domain Host, version, urlPath string) { | ||||||
|  | 	s.init() | ||||||
|  | 	s.SetDomain(domain) | ||||||
|  | 	s.version = version | ||||||
|  | 	s.actionName = urlPath | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *StreamRequest) BuildUrl() string { | ||||||
|  | 	var hostname string | ||||||
|  | 	if s.Domain.Func == nil { | ||||||
|  | 		hostname = s.Domain.Default | ||||||
|  | 	} else if hostname = s.Domain.Func(s.GetEnv()); hostname == "" { | ||||||
|  | 		hostname = s.Domain.Default | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	url := fmt.Sprintf("%s://%s", strings.ToLower(s.Scheme), hostname) | ||||||
|  | 	if len(s.Port) > 0 { | ||||||
|  | 		url = fmt.Sprintf("%s:%s", url, s.Port) | ||||||
|  | 	} | ||||||
|  | 	return url + s.BuildQueries() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *StreamRequest) BuildQueries() string { | ||||||
|  | 	path := strings.TrimLeft(strings.TrimSpace(s.GetActionName()), "/") | ||||||
|  | 	s.queries = "/" + path + "?" + utils.GetUrlFormedMap(s.QueryParams) | ||||||
|  | 	return s.queries | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *StreamRequest) GetBodyReader() io.Reader { | ||||||
|  | 	return bytes.NewReader(s.Content) | ||||||
|  | } | ||||||
| @ -1,9 +1,9 @@ | |||||||
| package responses | package responses | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" |  | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"github.com/json-iterator/go" | ||||||
| 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| @ -65,6 +65,7 @@ func (baseResponse *BaseResponse) parseFromHttpResponse(httpResponse *http.Respo | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | 	fmt.Println(string(body)) | ||||||
| 	baseResponse.httpStatus = httpResponse.StatusCode | 	baseResponse.httpStatus = httpResponse.StatusCode | ||||||
| 	baseResponse.httpHeaders = httpResponse.Header | 	baseResponse.httpHeaders = httpResponse.Header | ||||||
| 	baseResponse.httpContentBytes = body | 	baseResponse.httpContentBytes = body | ||||||
| @ -89,7 +90,7 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string) | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if _, isCommonResponse := response.(CommonResponse); isCommonResponse { | 	if _, isCommonResponse := response.(*CommonResponse); isCommonResponse { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -97,7 +98,10 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string) | |||||||
| 		if contentType, ok := response.GetHttpHeaders()["Content-Type"]; ok { | 		if contentType, ok := response.GetHttpHeaders()["Content-Type"]; ok { | ||||||
| 			for _, v := range contentType { | 			for _, v := range contentType { | ||||||
| 				if strings.Contains(v, requests.Json) { | 				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 | 					break | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @ -108,10 +112,11 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if format != "xml" { | 	if format != "xml" { | ||||||
| 		err = json.Unmarshal(response.GetHttpContentBytes(), response) | 		err = jsoniter.Unmarshal(response.GetHttpContentBytes(), response) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return errors.New("json Unmarshal:" + err.Error()) | 			return errors.New("json Unmarshal:" + err.Error()) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	return | 	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" | 	"crypto/rand" | ||||||
| 	"encoding/hex" | 	"encoding/hex" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils/random" | ||||||
| 	"hash" | 	"hash" | ||||||
| 	rand2 "math/rand" |  | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"sort" | 	"sort" | ||||||
| @ -36,11 +36,7 @@ func NewUUID() UUID { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func RandStringBytes(n int) string { | func RandStringBytes(n int) string { | ||||||
| 	b := make([]byte, n) | 	return random.StrRandom(int64(n)) | ||||||
| 	for i := range b { |  | ||||||
| 		b[i] = letterBytes[rand2.Intn(len(letterBytes))] |  | ||||||
| 	} |  | ||||||
| 	return string(b) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func newFromHash(h hash.Hash, ns UUID, name string) UUID { | 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) | 	InitStructWithDefaultTag(testcase) | ||||||
| 	fmt.Printf("%+v", testcase) | 	fmt.Printf("%+v", testcase) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestMd5(t *testing.T) { | ||||||
|  | 	t.Log(Md5("123456")) | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										37
									
								
								services/apk/add_apk.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								services/apk/add_apk.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | package apk | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type AddApkRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	List string `position:"Body" field:"list" default:"[]" ` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type AddApkResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code   int    `json:"code"` | ||||||
|  | 	Status bool   `json:"status"` | ||||||
|  | 	Msg    string `json:"msg"` | ||||||
|  | 	Data   struct { | ||||||
|  | 		Count int `json:"count"` | ||||||
|  | 	} `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateAddApkRequest() (req *AddApkRequest) { | ||||||
|  | 	req = &AddApkRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/apk/add") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateAddApkResponse() (response *AddApkResponse) { | ||||||
|  | 	response = &AddApkResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								services/apk/add_top.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								services/apk/add_top.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package apk | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type AddTopRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	Id  int    `position:"Body" field:"id" default:"0" ` | ||||||
|  | 	Ids string `position:"Body" field:"ids" default:"" ` | ||||||
|  | 	Top int    `position:"Body" field:"top" default:"0"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type AddTopResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code   int    `json:"code"` | ||||||
|  | 	Status bool   `json:"status"` | ||||||
|  | 	Msg    string `json:"msg"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateAddTopRequest() (req *AddTopRequest) { | ||||||
|  | 	req = &AddTopRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/apk/AddTop") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateAddTopResponse() (response *AddTopResponse) { | ||||||
|  | 	response = &AddTopResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										66
									
								
								services/apk/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								services/apk/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | package apk | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	VERSION = "2021-07-30" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var HOST requests.Host = requests.Host{ | ||||||
|  | 	Default: "c.api.gaore.com", | ||||||
|  | 	Func: func(s string) string { | ||||||
|  | 		var a = map[string]string{ | ||||||
|  | 			requests.RELEASE: "c.api.gaore.com", | ||||||
|  | 			requests.PRE:     "c.api.gaore.com", | ||||||
|  | 			requests.TEST:    "c.api.gaore.com", | ||||||
|  | 		} | ||||||
|  | 		return a[s] | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Client struct { | ||||||
|  | 	sdk.Client | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClient() (client *Client) { | ||||||
|  | 	client = &Client{} | ||||||
|  | 	client.InitWithAccessKey("", "", "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //打包任务添加优先级
 | ||||||
|  | func (c *Client) AddApkTop(req *AddTopRequest) (response *AddTopResponse, err error) { | ||||||
|  | 	response = CreateAddTopResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //添加打包任务
 | ||||||
|  | func (c *Client) AddApk(req *AddApkRequest) (response *AddApkResponse, err error) { | ||||||
|  | 	response = CreateAddApkResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //清除cdn
 | ||||||
|  | func (c *Client) RefreshApkR(req *RefreshApkRequest) (response *RefreshApkResponse, err error) { | ||||||
|  | 	response = CreateRefreshApkResponse() | ||||||
|  | 	if len(req.CdnUrlArray) > 0 { | ||||||
|  | 		cdnurls, _ := json.Marshal(req.CdnUrlArray) | ||||||
|  | 		req.cdnUrls = string(cdnurls) | ||||||
|  | 	} | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //获取打包日志
 | ||||||
|  | func (c *Client) SearchApk(req *SearchApkRequest) (response *SearchApkResponse, err error) { | ||||||
|  | 	response = CreateSearchApkResponse() | ||||||
|  | 
 | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								services/apk/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								services/apk/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | package apk | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"testing" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestClient_GetUserInfo(t *testing.T) { | ||||||
|  | 	c := NewClient() | ||||||
|  | 	req := CreateSearchApkRequest() | ||||||
|  | 	req.GameIds = "3503" | ||||||
|  | 	req.Ver = "1.0.0" | ||||||
|  | 	req.SetReadTimeout(60 * time.Second) | ||||||
|  | 	resp, err := c.SearchApk(req) | ||||||
|  | 
 | ||||||
|  | 	fmt.Println(req) | ||||||
|  | 	fmt.Println(resp.GetHttpContentString()) | ||||||
|  | 	fmt.Println(err) | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								services/apk/refresh_apk.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								services/apk/refresh_apk.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package apk | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type RefreshApkRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	cdnUrls     string `position:"Body" field:"cdn_urls" default:"[]" ` | ||||||
|  | 	CdnUrlArray []string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type RefreshApkResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code   int               `json:"code"` | ||||||
|  | 	Status bool              `json:"status"` | ||||||
|  | 	Msg    string            `json:"msg"` | ||||||
|  | 	Data   map[string]string `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateRefreshApkRequest() (req *RefreshApkRequest) { | ||||||
|  | 	req = &RefreshApkRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/apk/refresh") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateRefreshApkResponse() (response *RefreshApkResponse) { | ||||||
|  | 	response = &RefreshApkResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										74
									
								
								services/apk/search_apk.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								services/apk/search_apk.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | |||||||
|  | package apk | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type SearchApkRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	StartTime string `position:"Body" field:"startTime" default:"" ` | ||||||
|  | 	EndTime   string `position:"Body" field:"endTime" default:"" ` | ||||||
|  | 	State     string `position:"Body" field:"state" default:"" ` | ||||||
|  | 	SiteIds   string `position:"Body" field:"siteIds" default:"" ` | ||||||
|  | 	Ver       string `position:"Body" field:"ver" default:"" ` | ||||||
|  | 	SiteId    int    `position:"Body" field:"siteId" default:"" ` | ||||||
|  | 	AgentId   int    `position:"Body" field:"agentId" default:"" ` | ||||||
|  | 	Top       int    `position:"Body" field:"top" default:"" ` | ||||||
|  | 	GameIds   string `position:"Body" field:"gameIds" default:"" ` | ||||||
|  | 	Autor     string `position:"Body" field:"autor" default:"" ` | ||||||
|  | 	Page      int    `position:"Body" field:"page" default:"1" ` | ||||||
|  | 	Pagesize  int    `position:"Body" field:"pagesize" default:"20" ` | ||||||
|  | 	Order     string `position:"Body" field:"order" default:"" ` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type ApkLog struct { | ||||||
|  | 	ID          int       `json:"Id"` | ||||||
|  | 	GameID      int       `json:"GameId"` | ||||||
|  | 	GameName    string    `json:"GameName"` | ||||||
|  | 	Ver         string    `json:"Ver"` | ||||||
|  | 	Top         int       `json:"Top"` | ||||||
|  | 	AgentID     int       `json:"AgentId"` | ||||||
|  | 	SiteID      int       `json:"SiteId"` | ||||||
|  | 	Addtime     time.Time `json:"Addtime"` | ||||||
|  | 	Edittime    time.Time `json:"Edittime"` | ||||||
|  | 	State       int       `json:"State"` | ||||||
|  | 	Times       int       `json:"Times"` | ||||||
|  | 	ReleaseTime int       `json:"ReleaseTime"` | ||||||
|  | 	Env         int       `json:"Env"` | ||||||
|  | 	AliOss      int       `json:"AliOss"` | ||||||
|  | 	NeedCdn     bool      `json:"NeedCdn"` | ||||||
|  | 	Autor       string    `json:"Autor"` | ||||||
|  | 	Ext         string    `json:"Ext"` | ||||||
|  | 	IsAugment   bool      `json:"IsAugment"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type SearchApkResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code   int    `json:"code"` | ||||||
|  | 	Status bool   `json:"status"` | ||||||
|  | 	Msg    string `json:"msg"` | ||||||
|  | 	Data   struct { | ||||||
|  | 		Page     int      `json:"Page"` | ||||||
|  | 		PageSize int      `json:"PageSize"` | ||||||
|  | 		Total    int      `json:"Total"` | ||||||
|  | 		List     []ApkLog `json:"List"` | ||||||
|  | 	} `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateSearchApkRequest() (req *SearchApkRequest) { | ||||||
|  | 	req = &SearchApkRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/apk/list") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateSearchApkResponse() (response *SearchApkResponse) { | ||||||
|  | 	response = &SearchApkResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										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{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								services/callback/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								services/callback/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | package callback | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	VERSION = "2021-11-30" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var HOST requests.Host = requests.Host{ | ||||||
|  | 	Default: "callback.api.gaore.com", | ||||||
|  | 	Func: func(s string) string { | ||||||
|  | 		var a = map[string]string{ | ||||||
|  | 			requests.RELEASE: "callback.api.gaore.com", | ||||||
|  | 			requests.PRE:     "callback.api.gaore.com", | ||||||
|  | 			requests.TEST:    "callback.api.gaore.com", | ||||||
|  | 		} | ||||||
|  | 		return a[s] | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Client struct { | ||||||
|  | 	sdk.Client | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClient() (client *Client) { | ||||||
|  | 	client = &Client{} | ||||||
|  | 	client.InitWithAccessKey("", "", "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //上报关键行为
 | ||||||
|  | func (c *Client) SendAction(req *SendActionRequest) (response *SendActionResponse, err error) { | ||||||
|  | 	response = CreateSendActionResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 上报激活
 | ||||||
|  | func (c *Client) SendActive() { | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 上报付费
 | ||||||
|  | 
 | ||||||
|  | // 上报注册
 | ||||||
							
								
								
									
										49
									
								
								services/callback/send_action.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								services/callback/send_action.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | |||||||
|  | package callback | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const OS_ANDROID = 2 | ||||||
|  | 
 | ||||||
|  | const OS_IOS = 1 | ||||||
|  | 
 | ||||||
|  | type SendActionRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	GameId      int64  `position:"Query" field:"game_id" default:"" ` | ||||||
|  | 	AgentId     int64  `position:"Query" field:"agent_id" default:"" ` | ||||||
|  | 	SiteId      int64  `position:"Query" field:"site_id" default:"" ` | ||||||
|  | 	Imei        string `position:"Query" field:"imei" default:"" ` | ||||||
|  | 	Oaid        string `position:"Query" field:"oaid" default:"" ` | ||||||
|  | 	Ip          string `position:"Query" field:"ip" default:"" ` | ||||||
|  | 	Ua          string `position:"Query" field:"ua" default:"" ` | ||||||
|  | 	Os          int    `position:"Query" field:"os" default:"" ` | ||||||
|  | 	ParamsArray []string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type SendActionResponseData struct { | ||||||
|  | 	Account string `json:"account"` | ||||||
|  | 	Total   int    `json:"total"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type SendActionResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Data SendActionResponseData `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateSendActionRequest() (req *SendActionRequest) { | ||||||
|  | 	req = &SendActionRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/callback/ads_callback/sendAction") | ||||||
|  | 	req.Method = requests.GET | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateSendActionResponse() (response *SendActionResponse) { | ||||||
|  | 	response = &SendActionResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
							
								
								
									
										132
									
								
								services/game/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								services/game/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,132 @@ | |||||||
|  | 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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetLoginBg 获取登录背景图
 | ||||||
|  | func (c *Client) GetLoginBg(req *GetLoginBgReq) (resp *GetLoginBgResp, err error) { | ||||||
|  | 	resp = CreateGetLoginBgResp() | ||||||
|  | 	err = c.DoAction(req, resp) | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										243
									
								
								services/game/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								services/game/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,243 @@ | |||||||
|  | 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) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 测试获取h5登录背景图
 | ||||||
|  | func TestGetLoginBg(t *testing.T) { | ||||||
|  | 	client, err := NewClient() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 	} | ||||||
|  | 	getLoginBgResp, err := client.GetLoginBg(CreateGetLoginBgReq(6086)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t.Log(getLoginBgResp) | ||||||
|  | } | ||||||
							
								
								
									
										524
									
								
								services/game/game.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										524
									
								
								services/game/game.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,524 @@ | |||||||
|  | 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{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetLoginBgReq
 | ||||||
|  | // h5登录背景图
 | ||||||
|  | type GetLoginBgReq struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	GameId int64 `position:"Body" field:"game_id" default:"-" ` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetLoginBgRespData struct { | ||||||
|  | 	LoginBg string `json:"login_bg"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetLoginBgResp struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int                `json:"code"` | ||||||
|  | 	Msg  string             `json:"msg"` | ||||||
|  | 	Data GetLoginBgRespData `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetLoginBgReq(gameId int64) *GetLoginBgReq { | ||||||
|  | 	req := &GetLoginBgReq{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 		GameId:     gameId, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/game/getLoginBg") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return req | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetLoginBgResp() *GetLoginBgResp { | ||||||
|  | 	return &GetLoginBgResp{ | ||||||
|  | 		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 | ||||||
|  | } | ||||||
| @ -35,12 +35,6 @@ func (c *Client) SendSms(req *SendSmsRequest) (response *SendSmsResponse, err er | |||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Client) Test(req *DemoTestRequest) (response *DemoTestResponse, err error) { |  | ||||||
| 	response = CreateDemoTestResponse() |  | ||||||
| 	err = c.DoAction(req, response) |  | ||||||
| 	return |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client, err error) { | func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client, err error) { | ||||||
| 	client = &Client{} | 	client = &Client{} | ||||||
| 	err = client.InitWithAccessKey(accesskey, secrect, source) | 	err = client.InitWithAccessKey(accesskey, secrect, source) | ||||||
|  | |||||||
| @ -1,37 +0,0 @@ | |||||||
| package jedi |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" |  | ||||||
| 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| type DemoTestRequest struct { |  | ||||||
| 	*requests.RpcRequest |  | ||||||
| 	Param1    string `position:"Query" field:"param_1" default:"" ` |  | ||||||
| 	Param2    int    `position:"Query" field:"param_2" default:"10086" ` |  | ||||||
| 	Param3    bool   `position:"Query" field:"param_3" default:"false" ` |  | ||||||
| 	ParamBody string `position:"Body" field:"param_body" default:"foobar" ` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func CreateDemoTestRequest() (req *DemoTestRequest) { |  | ||||||
| 	req = &DemoTestRequest{RpcRequest: &requests.RpcRequest{}} |  | ||||||
| 	req.InitWithApiInfo(HOST, VERSION, "/api/sms/Index") |  | ||||||
| 	req.Method = requests.POST |  | ||||||
| 	return |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type DemoTestResponse struct { |  | ||||||
| 	*responses.BaseResponse |  | ||||||
| 	Data DemoTestResponseData `json:"data"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type DemoTestResponseData struct { |  | ||||||
| 	Account string `json:"account"` |  | ||||||
| 	Total   int    `json:"total"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func CreateDemoTestResponse() *DemoTestResponse { |  | ||||||
| 	return &DemoTestResponse{ |  | ||||||
| 		BaseResponse: &responses.BaseResponse{}, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
							
								
								
									
										50
									
								
								services/mail/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								services/mail/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | package mail | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"crypto/md5" | ||||||
|  | 	"fmt" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	VERSION = "2021-09-27" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var HOST requests.Host = requests.Host{ | ||||||
|  | 	Default: "mail.gaore.com", | ||||||
|  | 	Func: func(s string) string { | ||||||
|  | 		var a = map[string]string{ | ||||||
|  | 			requests.RELEASE: "mail.gaore.com", | ||||||
|  | 			requests.PRE:     "mail.gaore.com", | ||||||
|  | 			requests.TEST:    "mail.gaore.com", | ||||||
|  | 		} | ||||||
|  | 		return a[s] | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Client struct { | ||||||
|  | 	sdk.Client | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClient() (client *Client) { | ||||||
|  | 	client = &Client{} | ||||||
|  | 	client.InitWithAccessKey("", "", "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) SendEmail(req *PostEmailRequest) (response *PostEmailResponse, err error) { | ||||||
|  | 
 | ||||||
|  | 	now := time.Now().Second() | ||||||
|  | 	key := "04573fc4c8e01999a0909ab9c00bca5a" | ||||||
|  | 	signstr := fmt.Sprintf("%d%s", now, key) | ||||||
|  | 	data := []byte(signstr) | ||||||
|  | 	has := md5.Sum(data) | ||||||
|  | 	sign := fmt.Sprintf("%x", has) | ||||||
|  | 	req.Time = now | ||||||
|  | 	req.Sign = sign | ||||||
|  | 	response = CreatePostEmailResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								services/mail/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								services/mail/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | package mail | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"testing" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestClient_GetUserInfo(t *testing.T) { | ||||||
|  | 	c := NewClient() | ||||||
|  | 	req := CreatePostEmailRequest() | ||||||
|  | 	req.Addresses = "3002467428@qq.com" | ||||||
|  | 	req.Body = "1111" | ||||||
|  | 	req.FromName = "213123121" | ||||||
|  | 	req.SetReadTimeout(60 * time.Second) | ||||||
|  | 	resp, err := c.SendEmail(req) | ||||||
|  | 
 | ||||||
|  | 	fmt.Println(req) | ||||||
|  | 	fmt.Println(resp.GetHttpContentString()) | ||||||
|  | 	fmt.Println(err) | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								services/mail/end_email.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								services/mail/end_email.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package mail | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type PostEmailRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	Addresses string `position:"Body" field:"addresses" default:"" ` | ||||||
|  | 	Subject   string `position:"Body" field:"subject" default:"" ` | ||||||
|  | 	Body      string `position:"Body" field:"body" default:""` | ||||||
|  | 	FromName  string `position:"Body" field:"fromName" default:""` | ||||||
|  | 	Time      int    `position:"Body" field:"time" default:""` | ||||||
|  | 	Sign      string `position:"Body" field:"sign" default:""` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type PostEmailResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreatePostEmailRequest() (req *PostEmailRequest) { | ||||||
|  | 	req = &PostEmailRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/email/post_email.php") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreatePostEmailResponse() (response *PostEmailResponse) { | ||||||
|  | 	response = &PostEmailResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								services/mkt/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								services/mkt/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | package mkt | ||||||
|  | 
 | ||||||
|  | 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: "mkt", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Client struct { | ||||||
|  | 	sdk.Client | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // PkgNotice 打包通知
 | ||||||
|  | func (c *Client) PkgNotice(req *PkgNoticeRequest) (response *PkgNoticeResponse, err error) { | ||||||
|  | 	response = CreatePkgNoticeResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client, err error) { | ||||||
|  | 	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) | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								services/mkt/pkg_notice.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								services/mkt/pkg_notice.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package mkt | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | //PkgNoticeRequest 打包通知请求信息
 | ||||||
|  | type PkgNoticeRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	SiteID int64 `position:"Body" field:"site_id"` // 广告位ID
 | ||||||
|  | 	Status int   `position:"Body" field:"status"`  // 打包状态(0:失败 1:成功)
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //PkgNoticeResponse 打包通知响应信息
 | ||||||
|  | type PkgNoticeResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //CreatePkgNoticeRequest 创建通知接口
 | ||||||
|  | func CreatePkgNoticeRequest() (req *PkgNoticeRequest) { | ||||||
|  | 	req = &PkgNoticeRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/game/pkgnotice") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //CreatePkgNoticeResponse 创建通知响应
 | ||||||
|  | func CreatePkgNoticeResponse() (response *PkgNoticeResponse) { | ||||||
|  | 	response = &PkgNoticeResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								services/oss/ApkVersion_get.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								services/oss/ApkVersion_get.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | 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:"Json" field:"filepath"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetApkVersionResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | 	Data struct { | ||||||
|  | 		VersionCode      string `json:"versionCode"` | ||||||
|  | 		VersionName      string `json:"versionName"` | ||||||
|  | 		MinSdkVersion    string `json:"minSdkVersion"` | ||||||
|  | 		TargetSdkVersion string `json:"targetSdkVersion"` | ||||||
|  | 	} `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetApkVersionRequest() (req *GetApkVersionRequest) { | ||||||
|  | 	req = &GetApkVersionRequest{ | ||||||
|  | 		JsonRequest: &requests.JsonRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/apk/version") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	req.SetReadTimeout(30 * time.Second) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetApkVersionResponse() *GetApkVersionResponse { | ||||||
|  | 	return &GetApkVersionResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										65
									
								
								services/oss/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								services/oss/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | |||||||
|  | package oss | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"errors" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" | ||||||
|  | 	"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" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	VERSION = "2024-05-30" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var HOST = requests.Host{ | ||||||
|  | 	Default: "oss.gaore.com", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Client struct { | ||||||
|  | 	sdk.Client | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClient() (client *Client, err error) { | ||||||
|  | 	client = new(Client) | ||||||
|  | 	err = client.Init() | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClientWithSts() { | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) PutOss(req *PutOssRequest) (resp *PutOssResponse, err error) { | ||||||
|  | 	if req.Bucket == "" { | ||||||
|  | 		err = errors.New("bucket name is empty") | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if req.FileStream == nil { | ||||||
|  | 		err = errors.New("stream is empty") | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	req.SetContent(req.FileStream) | ||||||
|  | 	resp = CreatePutOssResponse() | ||||||
|  | 	err = c.DoAction(req, resp) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) DelOss(req *DelOssRequest) (resp *DelOssResponse, err error) { | ||||||
|  | 	resp = CreateDelOssResponse() | ||||||
|  | 	err = c.DoAction(req, resp) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) InitMultipartUpload(req *InitMultipartUploadRequest) (resp *InitMultipartUploadResponse, err error) { | ||||||
|  | 	resp = CreateInitMultipartUploadResponse() | ||||||
|  | 	err = c.DoAction(req, resp) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) GetApkVersion(req *GetApkVersionRequest) (resp *GetApkVersionResponse, err error) { | ||||||
|  | 	resp = CreateGetApkVersionResponse() | ||||||
|  | 	sign, err := auth.NewSignerWithCredential(credentials.NewStsTokenCredential("", "ccc", ""), nil) | ||||||
|  | 	err = c.DoActionWithSigner(req, resp, sign) | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										88
									
								
								services/oss/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								services/oss/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | |||||||
|  | package oss | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"os" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestUpload_Put(t *testing.T) { | ||||||
|  | 	req := CreatePutOssRequest() | ||||||
|  | 	req.Bucket = "image" | ||||||
|  | 	//req.Bucket = "web"
 | ||||||
|  | 	file, err := os.ReadFile("test.jpg") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	req.FileStream = file | ||||||
|  | 	client, err := NewClient() | ||||||
|  | 	resp, err := client.PutOss(req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t.Log(resp.Data.Url) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestUpload_Del(t *testing.T) { | ||||||
|  | 	req := CreateDelOssRequest() | ||||||
|  | 	req.Bucket = "image" | ||||||
|  | 	req.MediaUrl = "https://image.89yoo.com/uploads/549/549e887460a72333c361661683023018.jpeg" | ||||||
|  | 	client, err := NewClient() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	resp, err := client.DelOss(req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t.Log(resp.Code) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestCreateInitMultipartUpload(t *testing.T) { | ||||||
|  | 	req := CreateInitMultipartUploadRequest() | ||||||
|  | 
 | ||||||
|  | 	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) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	resp, err := client.InitMultipartUpload(req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	r, err := json.Marshal(resp) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t.Log(string(r)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestClient_GetApkVersion(t *testing.T) { | ||||||
|  | 	req := CreateGetApkVersionRequest() | ||||||
|  | 	req.Filepath = "uploads/files/package/1f57ac9693f0593fc9073f366b1c1936.zip" | ||||||
|  | 	client, err := NewClient() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	resp, err := client.GetApkVersion(req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t.Log(resp.Data.VersionCode, resp.Data.VersionName) | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								services/oss/multipart_init.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								services/oss/multipart_init.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | |||||||
|  | package oss | ||||||
|  | 
 | ||||||
|  | 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 ( | ||||||
|  | 	multipartUploadKeys = "b4471b940d98" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type InitMultipartUploadRequest struct { | ||||||
|  | 	*requests.JsonRequest | ||||||
|  | 	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 { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | 	Data struct { | ||||||
|  | 		FileUploaded bool   `json:"file_uploaded"` | ||||||
|  | 		UploadId     string `json:"upload_id,omitempty"` | ||||||
|  | 		Links        []Link `json:"links,omitempty"` | ||||||
|  | 		Hash         string `json:"hash,omitempty"` | ||||||
|  | 		Url          string `json:"url,omitempty"` | ||||||
|  | 		Filepath     string `json:"filepath,omitempty"` | ||||||
|  | 		FileName     string `json:"filename,omitempty"` | ||||||
|  | 	} `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Link struct { | ||||||
|  | 	Href   string `json:"href"` | ||||||
|  | 	Rel    string `json:"rel"` | ||||||
|  | 	Method string `json:"method"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateInitMultipartUploadRequest() (req *InitMultipartUploadRequest) { | ||||||
|  | 	ts := fmt.Sprintf("%d", time.Now().Unix()) | ||||||
|  | 	m := md5.Sum([]byte(ts + multipartUploadKeys)) | ||||||
|  | 	sign := hex.EncodeToString(m[:]) | ||||||
|  | 	req = &InitMultipartUploadRequest{ | ||||||
|  | 		JsonRequest: &requests.JsonRequest{}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/upload/multipart/init?_ts="+ts+"&_sign="+sign) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateInitMultipartUploadResponse() (resp *InitMultipartUploadResponse) { | ||||||
|  | 	resp = &InitMultipartUploadResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return resp | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								services/oss/test.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								services/oss/test.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 630 KiB | 
							
								
								
									
										31
									
								
								services/oss/upload_del.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								services/oss/upload_del.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | package oss | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type DelOssRequest struct { | ||||||
|  | 	*requests.JsonRequest | ||||||
|  | 	Bucket   string `position:"Json" field:"bucket" default:"image"` | ||||||
|  | 	MediaUrl string `position:"Json" field:"url" default:"-"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type DelOssResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateDelOssRequest() (req *DelOssRequest) { | ||||||
|  | 	req = &DelOssRequest{ | ||||||
|  | 		JsonRequest: &requests.JsonRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/upload/del") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateDelOssResponse() (resp *DelOssResponse) { | ||||||
|  | 	return &DelOssResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								services/oss/upload_put.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								services/oss/upload_put.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | package oss | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type PutOssRequest struct { | ||||||
|  | 	*requests.StreamRequest | ||||||
|  | 	Bucket     string `position:"Query" field:"bucket" default:"image"` | ||||||
|  | 	FileStream []byte | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type PutOssResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | 	Data struct { | ||||||
|  | 		Url      string `json:"url"` | ||||||
|  | 		SavePath string `json:"save_path"` | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreatePutOssRequest() (req *PutOssRequest) { | ||||||
|  | 	req = &PutOssRequest{ | ||||||
|  | 		StreamRequest: &requests.StreamRequest{}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "api/upload/put") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreatePutOssResponse() (resp *PutOssResponse) { | ||||||
|  | 	return &PutOssResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										81
									
								
								services/passport/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								services/passport/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | |||||||
|  | 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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // UpdateUserState
 | ||||||
|  | // 修改用户状态
 | ||||||
|  | func (c *Client) UpdateUserState(req *UpdateUserStateRequest) (response *UpdateUserStateResponse, err error) { | ||||||
|  | 	response = CreateUpdateUserStateResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										111
									
								
								services/passport/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								services/passport/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | |||||||
|  | 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) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 测试修改用户状态
 | ||||||
|  | func TestUpdateUserState(t *testing.T) { | ||||||
|  | 	client, err := NewClient() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 	} | ||||||
|  | 	req := CreateUpdateUserStateRequest("masterpan", 0, 2) | ||||||
|  | 	resp, err := client.UpdateUserState(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 | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								services/passport/update.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								services/passport/update.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | package passport | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/spf13/cast" | ||||||
|  | 	_ "github.com/spf13/cast" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type UpdateUserStateRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type UpdateUserStateResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | 	Data struct { | ||||||
|  | 		State int `json:"state"` | ||||||
|  | 	} `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // CreateUpdateUserStateRequest 获取用户登录过的游戏大类
 | ||||||
|  | func CreateUpdateUserStateRequest(userName string, uid, state int) (req *UpdateUserStateRequest) { | ||||||
|  | 	ts, sign := GetSign() | ||||||
|  | 
 | ||||||
|  | 	req = &UpdateUserStateRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/remote_login.php") | ||||||
|  | 	req.FormParams = map[string]string{ | ||||||
|  | 		"act":       "update", | ||||||
|  | 		"do":        "update_user_state", | ||||||
|  | 		"user_name": userName, | ||||||
|  | 		"uid":       cast.ToString(uid), | ||||||
|  | 		"state":     cast.ToString(state), | ||||||
|  | 		"time":      fmt.Sprintf("%v", ts), | ||||||
|  | 		"sign":      sign, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateUpdateUserStateResponse() (response *UpdateUserStateResponse) { | ||||||
|  | 	response = &UpdateUserStateResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
							
								
								
									
										72
									
								
								services/pay/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								services/pay/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | package pay | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	VERSION = "2025-10-24" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var HOST requests.Host = requests.Host{ | ||||||
|  | 	Default: "pay.api.gaore.com", | ||||||
|  | 	Func: func(s string) string { | ||||||
|  | 		var a = map[string]string{ | ||||||
|  | 			requests.RELEASE: "pay.api.gaore.com", | ||||||
|  | 			requests.PRE:     "pay.api.gaore.com", | ||||||
|  | 			requests.TEST:    "pay.gaore.com", | ||||||
|  | 		} | ||||||
|  | 		return a[s] | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Client struct { | ||||||
|  | 	sdk.Client | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewClient() (client *Client, err error) { | ||||||
|  | 	client = new(Client) | ||||||
|  | 	err = client.Init() | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) ComplaintReply(req *ComplaintReplyRequest) (response *ComplaintReplyResponse, err error) { | ||||||
|  | 	response = CreateComplaintReplyResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) ComplaintComplete(req *ComplaintCompleteRequest) (response *ComplaintCompleteResponse, err error) { | ||||||
|  | 	response = CreateComplaintCompleteResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *Client) ComplaintUpload(req *ComplaintUploadRequest) (response *ComplaintUploadResponse, err error) { | ||||||
|  | 	response = CreateComplaintUploadResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetVipInfo
 | ||||||
|  | // 获取会员信息
 | ||||||
|  | func (c *Client) GetVipInfo(req *GetVipInfoRequest) (response *GetVipInfoResponse, err error) { | ||||||
|  | 	response = CreateGetVipInfoResponse() | ||||||
|  | 	err = c.DoAction(req, response) | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										41
									
								
								services/pay/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								services/pay/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | package pay | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestClient_GetUserInfo(t *testing.T) { | ||||||
|  | 
 | ||||||
|  | 	//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 | ||||||
|  | 	} | ||||||
|  | 	getOrderStateResponse, err := client.GetOrderState(getOrderStateRequest) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error(err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t.Log(getOrderStateResponse.GetHttpContentString()) | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								services/pay/complaint_complete.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								services/pay/complaint_complete.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package pay | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | 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 { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateComplaintCompleteRequest() (req *ComplaintCompleteRequest) { | ||||||
|  | 	req = &ComplaintCompleteRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/complaint/complete") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateComplaintCompleteResponse() (response *ComplaintCompleteResponse) { | ||||||
|  | 	response = &ComplaintCompleteResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								services/pay/complaint_reply.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								services/pay/complaint_reply.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | package pay | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type ComplaintReplyRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	MchId       string `position:"Body" field:"mch_id" default:"" ` | ||||||
|  | 	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 { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateComplaintReplyRequest() (req *ComplaintReplyRequest) { | ||||||
|  | 	req = &ComplaintReplyRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/complaint/reply") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateComplaintReplyResponse() (response *ComplaintReplyResponse) { | ||||||
|  | 	response = &ComplaintReplyResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								services/pay/complaint_upload.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								services/pay/complaint_upload.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | package pay | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type ComplaintUploadRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	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 { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int               `json:"code"` | ||||||
|  | 	Msg  string            `json:"msg"` | ||||||
|  | 	Data map[string]string `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateComplaintUploadRequest() (req *ComplaintUploadRequest) { | ||||||
|  | 	req = &ComplaintUploadRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/complaint/imageUpload") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateComplaintUploadResponse() (response *ComplaintUploadResponse) { | ||||||
|  | 	response = &ComplaintUploadResponse{ | ||||||
|  | 		BaseResponse: &responses.BaseResponse{}, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								services/pay/get_vip_info.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								services/pay/get_vip_info.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | package pay | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" | ||||||
|  | 	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type GetVipInfoRequest struct { | ||||||
|  | 	*requests.RpcRequest | ||||||
|  | 	UserName string `position:"Body" field:"user_name" default:"" ` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetVipInfoResponse struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int    `json:"code"` | ||||||
|  | 	Msg  string `json:"msg"` | ||||||
|  | 	Data struct { | ||||||
|  | 		UserName   string  `json:"user_name"` // 用户名
 | ||||||
|  | 		Score      float64 `json:"score"` | ||||||
|  | 		Level      int     `json:"level"` | ||||||
|  | 		AttainDate string  `json:"attain_date"` | ||||||
|  | 		ExpiryDate string  `json:"expiry_date"` | ||||||
|  | 		IsWindows  int     `json:"is_windows"` | ||||||
|  | 	} `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetVipInfoRequest(userName string) (req *GetVipInfoRequest) { | ||||||
|  | 	req = &GetVipInfoRequest{ | ||||||
|  | 		RpcRequest: &requests.RpcRequest{}, | ||||||
|  | 		UserName:   userName, | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/api/user/getVipInfo") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetVipInfoResponse() (response *GetVipInfoResponse) { | ||||||
|  | 	response = &GetVipInfoResponse{ | ||||||
|  | 		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 | ||||||
|  | } | ||||||
							
								
								
									
										111
									
								
								services/sms/sms.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								services/sms/sms.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | |||||||
|  | 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}"      // 链接
 | ||||||
|  | 	ReplaceKeyUserName ReplaceKey = "${userName}" // 用户名
 | ||||||
|  | 	ReplaceKeyDateTime ReplaceKey = "${dateTime}" // 年月日时分秒
 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | 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" // 客服工单完成
 | ||||||
|  | 	TemplateTypeCancelTip         SmsType = "cancel_tip"          // 提交账号注销申请
 | ||||||
|  | 	TemplateTypeReverseCancel     SmsType = "reverse_cancel"      // 终止账号注销申请
 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | 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{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										86
									
								
								services/stat/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								services/stat/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | 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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetGameServerCountData 获取区服统计数据
 | ||||||
|  | func (c *Client) GetGameServerCountData(req *GetGameServerCountDataReq) (resp *GetGameServerCountDataResp, err error) { | ||||||
|  | 	resp = CreateGetGameServerCountDataResp() | ||||||
|  | 	err = c.DoAction(req, resp) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
							
								
								
									
										137
									
								
								services/stat/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								services/stat/client_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,137 @@ | |||||||
|  | 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) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestGetGameServerCountData(t *testing.T) { | ||||||
|  | 	client, err := NewClient() | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	req := CreateGetGameServerCountDataReq(&GetGameServerCountDataReq{ | ||||||
|  | 		GameIds:   []int64{3706}, | ||||||
|  | 		ServerId:  203902, | ||||||
|  | 		RoleDates: []string{"2023-10-09", "2024-02-06"}, | ||||||
|  | 	}) | ||||||
|  | 	resp, err := client.GetGameServerCountData(req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	fmt.Printf("%+v", resp.Data) | ||||||
|  | } | ||||||
							
								
								
									
										98
									
								
								services/stat/game.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								services/stat/game.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | |||||||
|  | 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"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetGameServerCountDataReq struct { | ||||||
|  | 	*requests.JsonRequest | ||||||
|  | 	GameIds   []int64  `position:"Json" field:"game_ids" json:"game_ids"` | ||||||
|  | 	ServerId  int64    `position:"Json" field:"server_id" json:"server_id"` | ||||||
|  | 	RoleDates []string `position:"Json" field:"role_dates" json:"role_dates"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetGameServerCountDataResp struct { | ||||||
|  | 	*responses.BaseResponse | ||||||
|  | 	Code int                    `json:"code"` | ||||||
|  | 	Msg  string                 `json:"msg"` | ||||||
|  | 	Data GetGameServerCountData `json:"data"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type GetGameServerCountData struct { | ||||||
|  | 	ServerID        int64   `json:"server_id"` | ||||||
|  | 	RoleNum         int64   `json:"role_num"` | ||||||
|  | 	TotalPayAmount  float64 `json:"total_pay_amount"` | ||||||
|  | 	TotalPayRoleNum int64   `json:"total_pay_role_num"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 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{}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetGameServerCountDataReq(req *GetGameServerCountDataReq) *GetGameServerCountDataReq { | ||||||
|  | 	if req.JsonRequest == nil { | ||||||
|  | 		req.JsonRequest = &requests.JsonRequest{} | ||||||
|  | 	} | ||||||
|  | 	req.InitWithApiInfo(HOST, VERSION, "/game/getGameServerCountData") | ||||||
|  | 	req.Method = requests.POST | ||||||
|  | 	return req | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func CreateGetGameServerCountDataResp() *GetGameServerCountDataResp { | ||||||
|  | 	return &GetGameServerCountDataResp{ | ||||||
|  | 		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 | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user