Browse Source

caid

master
linquan 4 months ago
parent
commit
763178c4ea
  1. 5
      internal/consts/consts.go
  2. 4
      internal/dao/internal/advertisement_oceanegine.go
  3. 2
      internal/model/do/advertisement_oceanegine.go
  4. 2
      internal/model/entity/advertisement_oceanegine.go
  5. 48
      internal/serviceGame/internal/advertisement.go
  6. 14
      internal/serviceGame/internal/caid/caid.go

5
internal/consts/consts.go

@ -109,3 +109,8 @@ const (
const (
PeachAdmin_Db_Battle_pass = "BattlePass"
)
const (
EventType_Active = "active"
EventType_Register = "active_register"
)

4
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.

2
internal/model/do/advertisement_oceanegine.go

@ -24,4 +24,6 @@ type AdvertisementOceanegine struct {
UnitId interface{} //
Caid interface{} //
Ip interface{} //
Register interface{} // 注册
Active interface{} // 激活
}

2
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:"激活"`
}

48
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{

14
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) {

Loading…
Cancel
Save