Browse Source

广告回调

adv_callback
huangjiajun 1 month ago
parent
commit
c45026dbb1
10 changed files with 329 additions and 21 deletions
  1. +33
    -0
      app/es/hdl/es.go
  2. +23
    -0
      app/es/md/es.go
  3. +15
    -0
      app/hdl/hdl_advertising.go
  4. +65
    -16
      app/hdl/hdl_callback_advertising.go
  5. +142
    -0
      app/hdl/hdl_user.go
  6. +3
    -0
      app/md/md_advertising.go
  7. +14
    -1
      app/md/md_login.go
  8. +11
    -3
      app/router/router.go
  9. +22
    -0
      app/svc/svc_advertising.go
  10. +1
    -1
      go.mod

+ 33
- 0
app/es/hdl/es.go View File

@@ -0,0 +1,33 @@
package hdl

import (
"applet/app/utils"
"code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es"
"context"
"github.com/olivere/elastic/v7"
)

func EsSelect(ctx context.Context, index string, query elastic.Query, trackTotalHits bool, arg map[string]string) (*elastic.SearchResult, error) {
if arg["size"] == "" {
arg["size"] = arg["limit"]
}
result, err := es.EsClient.Search().
Index(index).
TrackTotalHits(trackTotalHits).
Query(query). // 设置查询条件
Size(utils.StrToInt(arg["size"])). // 设置分页参数 - 每页大小,设置为0,代表不返回搜索结果,仅返回聚合分析结果
From((utils.StrToInt(arg["p"]) - 1) * utils.StrToInt(arg["size"])).
Pretty(true). // 返回可读的json格式
Do(ctx)
return result, err
}
func EsSelectOne(ctx context.Context, index string, query elastic.Query, trackTotalHits bool) (*elastic.SearchResult, error) {
result, err := es.EsClient.Search().
Index(index).
TrackTotalHits(trackTotalHits).
Query(query). // 设置查询条件
Size(1). // 设置分页参数 - 每页大小,设置为0,代表不返回搜索结果,仅返回聚合分析结果
Pretty(true). // 返回可读的json格式
Do(ctx)
return result, err
}

+ 23
- 0
app/es/md/es.go View File

@@ -0,0 +1,23 @@
package md

const EggUserShortLink = "egg_user_short_link"
const EggUserShortLinkMap = `
{
"settings" : {
"number_of_shards" : 2,
"number_of_replicas" : 1
},
"mappings":{
"properties":{
"uid":{
"type": "integer"
},
"link":{
"type": "keyword"
},
"short_link":{
"type": "keyword"
}
}
}
}`

+ 15
- 0
app/hdl/hdl_advertising.go View File

@@ -48,3 +48,18 @@ func AdvertisingDetail(c *gin.Context) {
func AdvertisingCheck(c *gin.Context) {
svc.AdvertisingCheck(c)
}

// AdvertisingState
// @Summary 广告状态 看完之后拿到广告唯一值
// @Tags 广告位
// @Description 广告状态 看完之后拿到广告唯一值
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Param req body md.AdvertisingReq true "注册参数"
// @Success 200 {object} md.AdvertisingState "具体数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/advertising/state [post]
func AdvertisingState(c *gin.Context) {
svc.AdvertisingState(c)
}

+ 65
- 16
app/hdl/hdl_callback_advertising.go View File

@@ -23,24 +23,13 @@ func CallbackChuanshanjia(c *gin.Context) {
sign := c.Query("sign")
extra := c.Query("extra")
id := gjson.Get(extra, "id").String()
types := gjson.Get(extra, "type").String()
phonePlatform := strings.ToLower(gjson.Get(extra, "platform").String())
platform := "chuanshanjia"
NewAdvertisingSpaceDb := implement.NewAdvertisingSpaceDb(db.Db)
space, _ := NewAdvertisingSpaceDb.GetAdvertisingSpace(id)
if space == nil {
isEnd, spaceKey := comm(c, id, primeRit, platform, phonePlatform)
if isEnd == 1 {
c.String(200, "{\"is_verify\":true,\"reason\":20000}")
return
}
spaceData := gjson.Get(space.Info, platform+"."+phonePlatform+"_ad_id").String()
spaceList := make([]map[string]string, 0)
json.Unmarshal([]byte(spaceData), &spaceList)
spaceKey := ""
for _, v := range spaceList {
if v["id"] == primeRit { //找到对应广告位的key
spaceKey = v["key"]
}
}
keyStr := spaceKey + ":" + transId
// 1. 使用SHA256算法计算摘要
hash := sha256.Sum256([]byte(keyStr))
@@ -51,10 +40,54 @@ func CallbackChuanshanjia(c *gin.Context) {
c.String(200, "{\"is_verify\":true,\"reason\":50002}")
return
}
isEnds := commDoing(c, platform, transId, userId, extra, primeRit)
if isEnds == 1 {
c.String(200, "{\"is_verify\":true,\"reason\":20000}")
return
}
c.String(200, "{\"is_verify\":true,\"reason\":20000}")
return
}
func CallbackYoulianghui(c *gin.Context) {
userId := c.Query("userid")
transId := c.Query("transid")
primeRit := c.Query("pid")
sign := c.Query("sig")
extra := c.Query("extrainfo")
id := gjson.Get(extra, "id").String()
phonePlatform := strings.ToLower(gjson.Get(extra, "platform").String())
platform := "youlianghui"
isEnd, spaceKey := comm(c, id, primeRit, platform, phonePlatform)
if isEnd == 1 {
c.String(200, "success")
return
}
keyStr := spaceKey + ":" + transId
// 1. 使用SHA256算法计算摘要
hash := sha256.Sum256([]byte(keyStr))
// 2. 将摘要转换为十六进制字符串
signStr := hex.EncodeToString(hash[:])
fmt.Println(signStr)
if strings.Contains(signStr, sign) == false {
c.String(200, "success")
return
}
isEnds := commDoing(c, platform, transId, userId, extra, primeRit)
if isEnds == 1 {
c.String(200, "success")
return
}
c.String(200, "success")
return
}

// 公共处理
func commDoing(c *gin.Context, platform, transId, userId, extra, primeRit string) int {
types := gjson.Get(extra, "type").String()
exist, _ := db.Db.Where("platform=? and oid=?", platform, transId).Exist(&model.AdvertisingCallback{})
if exist {
c.String(200, "{\"is_verify\":true,\"reason\":20000}")
return
return 1
}
var tmp = model.AdvertisingCallback{
Platform: platform,
@@ -83,6 +116,22 @@ func CallbackChuanshanjia(c *gin.Context) {
ch.PublishV2(md.EggAdvertisingQueueExchange, arg, md.EggAdvertisingSign)
}
}
c.String(200, "{\"is_verify\":true,\"reason\":20000}")
return
return 0
}
func comm(c *gin.Context, id, primeRit, platform, phonePlatform string) (int, string) {
NewAdvertisingSpaceDb := implement.NewAdvertisingSpaceDb(db.Db)
space, _ := NewAdvertisingSpaceDb.GetAdvertisingSpace(id)
if space == nil {
return 1, ""
}
spaceData := gjson.Get(space.Info, platform+"."+phonePlatform+"_ad_id").String()
spaceList := make([]map[string]string, 0)
json.Unmarshal([]byte(spaceData), &spaceList)
spaceKey := ""
for _, v := range spaceList {
if v["id"] == primeRit { //找到对应广告位的key
spaceKey = v["key"]
}
}
return 0, spaceKey
}

+ 142
- 0
app/hdl/hdl_user.go View File

@@ -3,13 +3,23 @@ package hdl
import (
"applet/app/db"
"applet/app/e"
"applet/app/es/hdl"
md2 "applet/app/es/md"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
"applet/app/utils/qrcode"
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
"code.fnuoos.com/EggPlanet/egg_models.git/src/model"
"code.fnuoos.com/EggPlanet/egg_system_rules.git/aliyun"
"code.fnuoos.com/EggPlanet/egg_system_rules.git/kuaizhan"
"code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es"
"context"
"github.com/gin-gonic/gin"
"github.com/olivere/elastic/v7"
"github.com/syyongx/php2go"
"github.com/tidwall/gjson"
"strings"
)

// UserInfo
@@ -172,3 +182,135 @@ func UserBindParent(c *gin.Context) {
e.OutSuc(c, "success", nil)
return
}

// UpdatePassword
// @Summary 修改密码-不要原密码 换成验证码
// @Tags 账号与安全
// @Description 修改密码
// @Accept json
// @Produce json
// @Param req body md.UpdatePasswordReq true "注册参数"
// @Success 200 string "登录成功返回"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/memberCenter/updatePassword [post]
func UpdatePassword(c *gin.Context) {
var req md.UpdatePasswordReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = svc.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
user := svc.GetUser(c)
data := svc.AliyunSmsBase(c, "")
//校验短信
err = aliyun.AliyunCheckSms(data["aliyun_sms_id"], data["aliyun_sms_secret"], user.Phone, req.Code)
if err != nil {
e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试"))
return
}
user.Password = utils.Md5(req.Password)
db.Db.Where("id=?", user.Id).Cols("password").Update(user)
e.OutSuc(c, "success", nil)
return
}

// UpdatePasscode
// @Summary 修改支付宝密码
// @Tags 账号与安全
// @Description 修改支付宝密码
// @Accept json
// @Produce json
// @Param req body md.UpdatePasscodeReq true "注册参数"
// @Success 200 string "登录成功返回"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/memberCenter/updatePasscode [post]
func UpdatePasscode(c *gin.Context) {
var req md.UpdatePasscodeReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = svc.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
user := svc.GetUser(c)
data := svc.AliyunSmsBase(c, "")
//校验短信
err = aliyun.AliyunCheckSms(data["aliyun_sms_id"], data["aliyun_sms_secret"], user.Phone, req.Code)
if err != nil {
e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试"))
return
}
user.Passcode = utils.Md5(req.PassCode)
db.Db.Where("id=?", user.Id).Cols("passcode").Update(user)
e.OutSuc(c, "success", nil)
return
}

// InviteUrl
// @Summary 邀请链接
// @Tags 邀请海报
// @Description 邀请链接
// @Accept json
// @Produce json
// @Success 200 {object} md.InviteUrl "登录成功返回"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/memberCenter/inviteUrl [get]
func InviteUrl(c *gin.Context) {
user := svc.GetUser(c)

link := svc.GetSysCfgStr("kuaizhan_url")
res := md.InviteUrl{
Link: "",
InviteCode: user.SystemInviteCode,
}
if user.CustomInviteCode != "" {
res.InviteCode = user.CustomInviteCode
}
link += "?inviteCode=" + res.InviteCode
EggUserShortLink := md2.EggUserShortLink
boolQueryToItem := elastic.NewBoolQuery() // 创建bool查询
aggsMatch := elastic.NewMatchQuery("link", link) //设置查询条件
boolQueryToItem.Must(aggsMatch)
result, _ := hdl.EsSelectOne(context.Background(), EggUserShortLink, boolQueryToItem, false)
isHas := 0
if result != nil && len(result.Hits.Hits) > 0 {
for _, hit := range result.Hits.Hits {
if hit == nil {
continue
}
jsonByte, _ := hit.Source.MarshalJSON()
if gjson.Get(string(jsonByte), "short_link").String() != "" {
isHas = 1
link = gjson.Get(string(jsonByte), "short_link").String()
}
}
}
if isHas == 0 {
send, _ := kuaizhan.KuaizhanSend(svc.GetSysCfgStr("kuaizhan_app_key"), svc.GetSysCfgStr("kuaizhan_app_secret"), link)
if gjson.Get(send, "url").String() != "" {
var uniqueId = php2go.Md5(link)
oldLink := link
link = gjson.Get(send, "url").String()
tmp := map[string]interface{}{
"uid": user.Id,
"link": oldLink,
"short_link": link,
}
doc, _ := es.FirstDoc(EggUserShortLink, uniqueId)
if doc == nil {
es.CreateDoc(EggUserShortLink, uniqueId, tmp)
} else {
es.UpdateDoc(EggUserShortLink, uniqueId, tmp)
}
}
}
res.Link = link
QRcode := qrcode.GetPNGBase64(link)
QRcode = strings.ReplaceAll(QRcode, "\u0000", "")
res.Qrcode = QRcode
e.OutSuc(c, res, nil)
return
}

+ 3
- 0
app/md/md_advertising.go View File

@@ -27,6 +27,9 @@ type AdvertisingSpace struct {
type AdvertisingCheck struct {
IsCanVisit string `json:"is_can_visit"`
}
type AdvertisingState struct {
IsSuccess string `json:"is_success"`
}
type AdvertisingFunction struct {
Name string `json:"name" example:"名称"`
Type string `json:"type" example:"位置"`


+ 14
- 1
app/md/md_login.go View File

@@ -2,7 +2,7 @@ package md

type SmsSendReq struct {
Mobile string `json:"mobile" binding:"required"`
Type string `json:"type" example:"h5Register:h5注册页、wechatBindPhone:微信绑定手机、login:登陆、findPwd:找回密码、changePwd:修改密码"`
Type string `json:"type" example:"h5Register:h5注册页、wechatBindPhone:微信绑定手机、login:登陆、findPwd:找回密码、changePwd:修改密码、changePasscode:修改支付密码"`
LotNumber string `json:"lot_number" example:"阿里云图形验证码对应参数"`
GenTime string `json:"gen_time" example:"阿里云图形验证码对应参数"`
CaptchaOutput string `json:"captcha_output" example:"阿里云图形验证码对应参数"`
@@ -26,6 +26,14 @@ type FindPasswordReq struct {
Code string `json:"code" example:"验证码"`
Password string `json:"password" example:"密码 如 123"`
}
type UpdatePasswordReq struct {
Code string `json:"code" example:"验证码"`
Password string `json:"password" example:"密码 如 123"`
}
type UpdatePasscodeReq struct {
Code string `json:"code" example:"验证码"`
PassCode string `json:"passcode" example:"密码 如 123"`
}
type WechatLoginReq struct {
OpenID string `json:"open_id" example:"微信openId"`
UnionId string `json:"union_id" example:"微信UnionId"`
@@ -46,3 +54,8 @@ type LoginReq struct {
type LoginResponse struct {
Token string `json:"token"`
}
type InviteUrl struct {
Link string `json:"link"`
InviteCode string `json:"invite_code"`
Qrcode string `json:"qrcode"`
}

+ 11
- 3
app/router/router.go View File

@@ -57,6 +57,7 @@ func route(r *gin.RouterGroup) {
rCallback := r.Group("/callback")
{
rCallback.GET("/advertising/chuanshanjia", hdl.CallbackChuanshanjia) //穿山甲广告回调
rCallback.GET("/advertising/youlianghui", hdl.CallbackYoulianghui) //优量汇广告回调
}

r.Use(mw.CheckSign)
@@ -80,7 +81,11 @@ func route(r *gin.RouterGroup) {
r.GET("/getModuleSetting", hdl.GetModuleSetting) // 获取页面样式
r.Use(mw.Auth) // 以下接口需要JWT验证
rComm(r.Group("/comm"))
r.POST("/advertising/check", hdl.AdvertisingCheck) //广告位判断能不能看

{
r.POST("/advertising/check", hdl.AdvertisingCheck) //广告位判断能不能看
r.POST("/advertising/state", hdl.AdvertisingState) //广告位状态
}

rHomePage := r.Group("/homePage")
{
@@ -102,8 +107,11 @@ func route(r *gin.RouterGroup) {
}
rMemberCenter := r.Group("/memberCenter")
{
rMemberCenter.GET("/getBasic", hdl.MemberCenterGetBasic) // 会员中心-基础数据
rMemberCenter.POST("/bindParent", hdl.UserBindParent) //绑定上级
rMemberCenter.GET("/getBasic", hdl.MemberCenterGetBasic) // 会员中心-基础数据
rMemberCenter.POST("/bindParent", hdl.UserBindParent) //绑定上级
rMemberCenter.POST("/updatePassword", hdl.UpdatePassword) //修改密码
rMemberCenter.POST("/updatePasscode", hdl.UpdatePasscode) //修改支付密码
rMemberCenter.GET("/inviteUrl", hdl.InviteUrl) //邀请链接
}
rPointsCenter := r.Group("/pointsCenter") // 积分中心
{


+ 22
- 0
app/svc/svc_advertising.go View File

@@ -6,6 +6,7 @@ import (
"applet/app/md"
"applet/app/utils"
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
"code.fnuoos.com/EggPlanet/egg_models.git/src/model"
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
@@ -115,6 +116,27 @@ func AdvertisingCheck(c *gin.Context) {
e.OutSuc(c, res, nil)
return
}
func AdvertisingState(c *gin.Context) {
var req md.AdvertisingReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
isSuccess := "0"
var data model.AdvertisingCallback
db.Db.Where("oid=? ", req.Id).Get(&data)
if data.Id > 0 {
isSuccess = "1"
}
res := md.AdvertisingState{
IsSuccess: isSuccess,
}
e.OutSuc(c, res, nil)
return
}
func AdvertisingDetail(c *gin.Context) {
eg := db.Db
var req md.AdvertisingReq


+ 1
- 1
go.mod View File

@@ -33,7 +33,7 @@ require (

require (
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241128030209-743f36ef9dad
code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241128063602-ed11b9dad994
code.fnuoos.com/EggPlanet/egg_system_rules.git v0.0.4-0.20241128075251-3c7f4a91e52c
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible


Loading…
Cancel
Save