From 763178c4eabc0b2da6aa94086ba2a622b51a8d98 Mon Sep 17 00:00:00 2001 From: linquan <349589071@qq.com> Date: Mon, 11 Aug 2025 09:18:13 +0800 Subject: [PATCH] caid --- internal/consts/consts.go | 5 ++ .../dao/internal/advertisement_oceanegine.go | 4 ++ internal/model/do/advertisement_oceanegine.go | 2 + .../model/entity/advertisement_oceanegine.go | 2 + .../serviceGame/internal/advertisement.go | 48 ++++++++++++------- internal/serviceGame/internal/caid/caid.go | 14 +++--- 6 files changed, 51 insertions(+), 24 deletions(-) diff --git a/internal/consts/consts.go b/internal/consts/consts.go index 6c1a707..39142bf 100644 --- a/internal/consts/consts.go +++ b/internal/consts/consts.go @@ -109,3 +109,8 @@ const ( const ( PeachAdmin_Db_Battle_pass = "BattlePass" ) + +const ( + EventType_Active = "active" + EventType_Register = "active_register" +) diff --git a/internal/dao/internal/advertisement_oceanegine.go b/internal/dao/internal/advertisement_oceanegine.go index 117c8be..bd16767 100644 --- a/internal/dao/internal/advertisement_oceanegine.go +++ b/internal/dao/internal/advertisement_oceanegine.go @@ -32,6 +32,8 @@ type AdvertisementOceanegineColumns struct { UnitId string // Caid string // Ip string // + Register string // 注册 + Active string // 激活 } // advertisementOceanegineColumns holds the columns for table advertisement_oceanegine. @@ -48,6 +50,8 @@ var advertisementOceanegineColumns = AdvertisementOceanegineColumns{ UnitId: "unitId", Caid: "caid", Ip: "ip", + Register: "register", + Active: "active", } // NewAdvertisementOceanegineDao creates and returns a new DAO object for table data access. diff --git a/internal/model/do/advertisement_oceanegine.go b/internal/model/do/advertisement_oceanegine.go index ef27f29..7ab23d1 100644 --- a/internal/model/do/advertisement_oceanegine.go +++ b/internal/model/do/advertisement_oceanegine.go @@ -24,4 +24,6 @@ type AdvertisementOceanegine struct { UnitId interface{} // Caid interface{} // Ip interface{} // + Register interface{} // 注册 + Active interface{} // 激活 } diff --git a/internal/model/entity/advertisement_oceanegine.go b/internal/model/entity/advertisement_oceanegine.go index 8d3eaba..610798d 100644 --- a/internal/model/entity/advertisement_oceanegine.go +++ b/internal/model/entity/advertisement_oceanegine.go @@ -22,4 +22,6 @@ type AdvertisementOceanegine struct { UnitId int64 `json:"unitId" description:""` Caid string `json:"caid" description:""` Ip string `json:"ip" description:""` + Register int `json:"register" description:"注册"` + Active int `json:"active" description:"激活"` } diff --git a/internal/serviceGame/internal/advertisement.go b/internal/serviceGame/internal/advertisement.go index 6345ce1..2ed1522 100644 --- a/internal/serviceGame/internal/advertisement.go +++ b/internal/serviceGame/internal/advertisement.go @@ -118,9 +118,9 @@ func AttributionHugeAmount(ctx context.Context, req *game.ATHAReq) (res *game.AT var adData []entity.AdvertisementOceanegine model := dao.AdvertisementOceanegine.Ctx(ctx).Order("last_touch_time desc") if req.Platform == "android" { - //if req.AndroidId != "" { - _ = model.Where("adv_android_id=?", req.AndroidId).Page(1, 1).Scan(&adData) - //} + if req.AndroidId != "" && req.AndroidId != "00000000-0000-0000-0000-000000000000" { + _ = model.Where("adv_android_id=?", req.AndroidId).Page(1, 1).Scan(&adData) + } if len(adData) == 0 { log.Printf("AttributionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) err = errors.New("account is nil") @@ -128,9 +128,9 @@ func AttributionHugeAmount(ctx context.Context, req *game.ATHAReq) (res *game.AT } data["android_id"] = req.AndroidId } else if req.Platform == "ios" { - //if req.Idfa != "" { - _ = model.Where("idfa=?", req.Idfa).Page(1, 1).Scan(&adData) - //} + if req.Idfa != "" && req.Idfa != "00000000-0000-0000-0000-000000000000" { + _ = model.Where("idfa=?", req.Idfa).Page(1, 1).Scan(&adData) + } if len(adData) == 0 { if req.Caid != "" { var list []map[string]string @@ -229,9 +229,9 @@ func ConversionHugeAmount(ctx context.Context, req *game.CSHAReq) (res *game.CSH } model := dao.AdvertisementOceanegine.Ctx(ctx).Order("last_touch_time desc") if req.Platform == "android" { - //if req.Id != "" && req.Id != "00000000-0000-0000-0000-000000000000" { - _ = model.Where("adv_android_id=?", req.Id).Page(1, 1).Scan(&adData) - //} + if req.Id != "" && req.Id != "00000000-0000-0000-0000-000000000000" { + _ = model.Where("adv_android_id=?", req.Id).Page(1, 1).Scan(&adData) + } if len(adData) == 0 { log.Printf("ConversionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) err = errors.New("account is nil") @@ -239,9 +239,9 @@ func ConversionHugeAmount(ctx context.Context, req *game.CSHAReq) (res *game.CSH } device["android_id"] = req.Id } else if req.Platform == "ios" { - //if req.Idfa != "" && req.Idfa != "00000000-0000-0000-0000-000000000000" { - _ = model.Where("idfa=?", req.Idfa).Page(1, 1).Scan(&adData) - //} + if req.Idfa != "" && req.Idfa != "00000000-0000-0000-0000-000000000000" { + _ = model.Where("idfa=?", req.Idfa).Page(1, 1).Scan(&adData) + } if len(adData) == 0 { if req.Caid != "" { var list []map[string]string @@ -269,6 +269,14 @@ func ConversionHugeAmount(ctx context.Context, req *game.CSHAReq) (res *game.CSH err = errors.New("callbackParam is nil") return } + if req.EventType == consts.EventType_Active && adData[0].Active == 1 { + err = errors.New("already activated !") + return + } + if req.EventType == consts.EventType_Register && adData[0].Register == 1 { + err = errors.New("already register!") + return + } ad := map[string]interface{}{ "callback": adData[0].CallbackParam, @@ -304,9 +312,16 @@ func ConversionHugeAmount(ctx context.Context, req *game.CSHAReq) (res *game.CSH resJson, err := gjson.DecodeToJson(tmp) if resJson != nil && resJson.Get("code").Int() != 0 { err = errors.New(resJson.Get("message").String()) - } /*else if resJson.Get("code").Int() == 0 { - dao.AdvertisementOceanegine.Ctx(ctx).Where("id=?", adData[0].Id).Update(do.AdvertisementOceanegine{}) - }*/ + } else if resJson.Get("code").Int() == 0 { + saveData := do.AdvertisementOceanegine{} + if req.EventType == consts.EventType_Active { + saveData.Active = 1 + } + if req.EventType == consts.EventType_Register { + saveData.Register = 1 + } + dao.AdvertisementOceanegine.Ctx(ctx).WherePri(adData[0].Id).Update(saveData) + } return } @@ -331,9 +346,8 @@ func HugeAmount(ctx context.Context, req *game.AdvertiseHAReq) { log.Printf("Decrypt err: %s", err.Error()) return } - req.Caid = string(decryptedByte) + req.Caid = decryptedByte } - //log.Printf("HugeAmount caid: %s", gjson.MustEncodeString(req)) } req2 := game.CSHAReq{ diff --git a/internal/serviceGame/internal/caid/caid.go b/internal/serviceGame/internal/caid/caid.go index a2a2d25..c134ac5 100644 --- a/internal/serviceGame/internal/caid/caid.go +++ b/internal/serviceGame/internal/caid/caid.go @@ -67,10 +67,10 @@ func EncryptDeviceInfo() string { return encryptedDeviceInfo } -func Decrypt(data string) ([]byte, error) { +func Decrypt(data string) (string, error) { raw, err := base64.StdEncoding.DecodeString(data) if err != nil { - return nil, fmt.Errorf("base64 decode %w: %s", err, data) + return "", fmt.Errorf("base64 decode %w: %s", err, data) } reader := bytes.NewReader(raw) @@ -79,7 +79,7 @@ func Decrypt(data string) ([]byte, error) { pubKeyBytes, err := ioutil.ReadFile("manifest/config/dev_10702/public_for_api.pem") if err != nil { fmt.Println(err) - return nil, err + return "", err } block, _ := pem.Decode(pubKeyBytes) if block != nil { @@ -87,16 +87,16 @@ func Decrypt(data string) ([]byte, error) { } pubKey, err := x509.ParsePKIXPublicKey(pubKeyBytes) if err != nil { - return nil, fmt.Errorf("解析公钥失败: %w", err) + return "", fmt.Errorf("解析公钥失败: %w", err) } rsaPubKey, ok := pubKey.(*rsa.PublicKey) if !ok { - return nil, errors.New("无效的RSA公钥类型1") + return "", errors.New("无效的RSA公钥类型1") } for { n, err := io.ReadFull(reader, chunk) if err != nil && errors.Is(err, io.ErrUnexpectedEOF) { - return nil, fmt.Errorf("read decrypted data: %w", err) + return "", fmt.Errorf("read decrypted data: %w", err) } if n == 0 { break @@ -110,7 +110,7 @@ func Decrypt(data string) ([]byte, error) { output = after } fmt.Printf(" output: %s\n", string(output)) - return output, nil + return string(output), nil } func decryptChunk(chunk []byte, writer *bytes.Buffer, pubKey *rsa.PublicKey) {