diff --git a/app/api/adsapi/click.go b/app/api/adsapi/click.go index 8ab1f60..f673027 100644 --- a/app/api/adsapi/click.go +++ b/app/api/adsapi/click.go @@ -1,6 +1,8 @@ package adsapi import ( + "strconv" + "videoweb/app/api/proto" "videoweb/app/service/configser" "videoweb/pub/common" @@ -12,18 +14,18 @@ import ( // Click 广告点击上报 // @Tags 广告 // @Summary 广告点击上报 -// @Description 用户点击广告时异步上报到广告中心 +// @Description 用户点击广告时异步上报到广告中心。请求可带 appId 覆盖默认,缺省时按本站 appId 上报。 // @Accept json // @Produce json -// @Param param body proto.AdsClickReq true "参数" +// @Param param body proto.AdsClickInfo true "参数" // @Success 200 {string} json // @Router /api/app/ads/click [POST] func Click(c *gin.Context) { - var req proto.AdsClickReq + var req proto.AdsClickInfo if err := c.ShouldBindJSON(&req); err != nil { common.ServerJSON(c, srvdef.ErrParamError, err.Error()) return } - configser.AsyncAdvertiseClick(req.AdsId) + configser.AsyncAdvertiseClick(strconv.FormatInt(req.AdsId, 10), int32(req.AppId)) common.ServerJSON(c, srvdef.Success, nil) } diff --git a/app/service/configser/advertise_click.go b/app/service/configser/advertise_click.go index 98fc345..ab070ac 100644 --- a/app/service/configser/advertise_click.go +++ b/app/service/configser/advertise_click.go @@ -22,14 +22,23 @@ type advertiseClickResp struct { Code int64 `json:"code"` } -// AdvertiseClickCenter 同步上报单条广告点击到广告中心 -func AdvertiseClickCenter(advertiseId int64) error { +// 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: advertiseAppId}) + 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 { @@ -43,14 +52,15 @@ func AdvertiseClickCenter(advertiseId int64) error { return nil } -// AsyncAdvertiseClick 异步上报广告点击,非数字 id 忽略 -func AsyncAdvertiseClick(id string) { +// 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) + _ = AdvertiseClickCenter(advertiseId, appId) }) }