package configser import ( "encoding/json" "fmt" "net/http" "strconv" "strings" "videoweb/app/appg" "videoweb/pub/common/godef" "videoweb/pub/common/httputil" "videoweb/pub/common/log" ) type advertiseClickReq struct { Id int64 `json:"id"` AppId int32 `json:"appId"` } type advertiseClickResp struct { Code int64 `json:"code"` } // resolveAdvertiseAppId 请求带了 AppId 用请求的,否则回落到默认 advertiseAppId func resolveAdvertiseAppId(reqAppId int32) int32 { if reqAppId > 0 { return reqAppId } return advertiseAppId } // AdvertiseClickCenter 同步上报单条广告点击到广告中心。 // appId<=0 时回落到默认 advertiseAppId。 func AdvertiseClickCenter(advertiseId int64, appId int32) error { versionUrl := strings.TrimRight(strings.TrimSpace(appg.Conf.VersionUrl), "/") if versionUrl == "" { return fmt.Errorf("versionUrl 未配置") } url := versionUrl + "/api/stat/advitise/v2/click" body, _ := json.Marshal(advertiseClickReq{Id: advertiseId, AppId: resolveAdvertiseAppId(appId)}) var resp advertiseClickResp code, err := httputil.Client().POSTJsonWithJResp(&resp, url, map[string]string{"Content-Type": "application/json"}, body) if err != nil { log.Error("AdvertiseClickCenter POST fail", log.Any("url", url), log.Any("id", advertiseId), log.E(err)) return err } if code != http.StatusOK { log.Error("AdvertiseClickCenter response status", log.Any("code", code), log.Any("id", advertiseId)) return fmt.Errorf("response status %d", code) } return nil } // AsyncAdvertiseClick 异步上报广告点击,非数字 id 忽略。 // appId<=0 时回落到默认 advertiseAppId。 func AsyncAdvertiseClick(id string, appId int32) { advertiseId, err := strconv.ParseInt(strings.TrimSpace(id), 10, 64) if err != nil { log.Warn("AsyncAdvertiseClick invalid id", log.Any("id", id)) return } godef.Go(func() { _ = AdvertiseClickCenter(advertiseId, appId) }) }