From f3ab307f1810ca0be9c4d9f00442cf5655e9ddb7 Mon Sep 17 00:00:00 2001 From: yuxh Date: Mon, 14 Jul 2025 20:30:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(utils):=20=E6=B7=BB=E5=8A=A0=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=94=9F=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E8=BF=BD=E8=B8=AAID?= =?UTF-8?q?=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增随机字符串生成函数,支持不同模式(字母、数字、字母数字、字母十六进制) -重构 RandStringBytes 函数,使用新的随机字符串生成逻辑 - 添加 MakeTraceId 函数,用于生成追踪ID - 更新 Client 的 GetRefererHeader 方法,自动添加追踪ID --- sdk/client.go | 13 +++++-- sdk/utils/random/str_random.go | 69 ++++++++++++++++++++++++++++++++++ sdk/utils/utils.go | 12 +++--- services/msdk/client.go | 8 +--- services/msdk/client_test.go | 8 ++++ services/msdk/user.go | 6 +-- 6 files changed, 96 insertions(+), 20 deletions(-) create mode 100644 sdk/utils/random/str_random.go diff --git a/sdk/client.go b/sdk/client.go index 753ca3e..ef21167 100644 --- a/sdk/client.go +++ b/sdk/client.go @@ -55,12 +55,17 @@ func (c *Client) SetRefererHeader(header *requests.RefererHeader) { } func (c *Client) GetRefererHeader() map[string]string { + var header *requests.RefererHeader if c.header == nil { - return nil + header = &requests.RefererHeader{ + TraceId: utils.MakeTraceId(), + } + } else { + header = c.header } return map[string]string{ - "Referer": c.header.Referer, - "Traceparent": c.header.TraceId, + "Referer": header.Referer, + "Traceparent": header.TraceId, } } @@ -234,7 +239,7 @@ func (client *Client) DoAction(request requests.AcsRequest, response responses.A } func (client *Client) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse, signer auth.Signer) (err error) { - + request.AddHeaders(client.GetRefererHeader()) httpRequest, err := client.buildRequestWithSigner(request, signer) if err != nil { return err diff --git a/sdk/utils/random/str_random.go b/sdk/utils/random/str_random.go new file mode 100644 index 0000000..e5c3be6 --- /dev/null +++ b/sdk/utils/random/str_random.go @@ -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<= 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)) +} diff --git a/sdk/utils/utils.go b/sdk/utils/utils.go index fff6a19..112da65 100644 --- a/sdk/utils/utils.go +++ b/sdk/utils/utils.go @@ -5,8 +5,8 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils/random" "hash" - rand2 "math/rand" "net/url" "reflect" "sort" @@ -36,11 +36,7 @@ func NewUUID() UUID { } func RandStringBytes(n int) string { - b := make([]byte, n) - for i := range b { - b[i] = letterBytes[rand2.Intn(len(letterBytes))] - } - return string(b) + return random.StrRandom(int64(n)) } func newFromHash(h hash.Hash, ns UUID, name string) UUID { @@ -114,3 +110,7 @@ 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)) +} diff --git a/services/msdk/client.go b/services/msdk/client.go index 3509a8a..08cfbfd 100644 --- a/services/msdk/client.go +++ b/services/msdk/client.go @@ -16,10 +16,8 @@ type Client struct { sdk.Client } -func NewClient(header ...*requests.RefererHeader) (client *Client, err error) { - header = append(header, nil) +func NewClient() (client *Client, err error) { client = &Client{} - client.SetRefererHeader(header[0]) err = client.Init() return } @@ -32,7 +30,6 @@ func (c *Client) GetIdfa(req *GetIdfaReq) (resp *GetIdfaResp, err error) { if req.Imei == "" && req.Idfa != "" { req.Imei = req.Idfa } - req.AddHeaders(c.GetRefererHeader()) err = c.DoAction(req, resp) return } @@ -42,7 +39,6 @@ func (c *Client) GetUserAttr(req *GetUserAttrReq) (resp *GetUserAttrResp, err er resp = &GetUserAttrResp{ BaseResponse: &responses.BaseResponse{}, } - req.AddHeaders(c.GetRefererHeader()) err = c.DoAction(req, resp) return } @@ -52,7 +48,6 @@ func (c *Client) GetImei(req *GetImeiReq) (resp *GetImeiResp, err error) { resp = &GetImeiResp{ BaseResponse: &responses.BaseResponse{}, } - req.AddHeaders(c.GetRefererHeader()) err = c.DoAction(req, resp) return } @@ -61,7 +56,6 @@ func (c *Client) SetImei(req *SetImeiReq) (resp *SetImeiResp, err error) { resp = &SetImeiResp{ BaseResponse: &responses.BaseResponse{}, } - req.AddHeaders(c.GetRefererHeader()) err = c.DoAction(req, resp) return } diff --git a/services/msdk/client_test.go b/services/msdk/client_test.go index 37e6cfc..2fb6d21 100644 --- a/services/msdk/client_test.go +++ b/services/msdk/client_test.go @@ -1,6 +1,8 @@ package msdk import ( + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" "testing" ) @@ -20,11 +22,17 @@ func TestClient_GetUserAttr(t *testing.T) { } 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 diff --git a/services/msdk/user.go b/services/msdk/user.go index 60df8fe..47f92fb 100644 --- a/services/msdk/user.go +++ b/services/msdk/user.go @@ -63,7 +63,7 @@ func CreateGetIdfaReq() *GetIdfaReq { req := &GetIdfaReq{ RpcRequest: &requests.RpcRequest{}, } - req.InitWithApiInfo(HOST, VERSION, "/getIdfa.php") + req.InitWithApiInfo(HOST, VERSION, "/getidfa.php") req.Method = requests.GET return req } @@ -173,7 +173,7 @@ func CreateGetImeiReq() *GetImeiReq { req := &GetImeiReq{ RpcRequest: &requests.RpcRequest{}, } - req.InitWithApiInfo(HOST, VERSION, "/getImei.php") + req.InitWithApiInfo(HOST, VERSION, "/getimei.php") req.Method = requests.GET return req } @@ -212,7 +212,7 @@ func CreateSetImeiReq() *SetImeiReq { req := &SetImeiReq{ RpcRequest: &requests.RpcRequest{}, } - req.InitWithApiInfo(HOST, VERSION, "/setImei.php") + req.InitWithApiInfo(HOST, VERSION, "/setimei.php") req.Method = requests.GET return req }