From 739cc1dd113fd247df231eda8f34b9a13cd07b97 Mon Sep 17 00:00:00 2001 From: lwl0608 Date: Mon, 29 Jul 2024 19:29:34 +0800 Subject: [PATCH] fix outer raven --- api/proto/vas/proto/pay.go | 4 +++- app/mix/controller/vas.go | 2 +- app/mix/service/logic/vas.go | 39 ++++++++++++++++++++++++++++++++++++ app/mix/service/service.go | 10 +++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/api/proto/vas/proto/pay.go b/api/proto/vas/proto/pay.go index cf175807..cbcf732e 100644 --- a/api/proto/vas/proto/pay.go +++ b/api/proto/vas/proto/pay.go @@ -62,13 +62,15 @@ type CreateOrderReq struct { WechatAuthCode string `json:"wechat_auth_code"` // 微信auth_code RedirectUrl string `json:"redirect_url"` // redirect_url Mid1 int64 `json:"mid"` + ReturnUrl string `json:"return_url"` + RavenQid int64 `json:"raven_qid"` // 瑞文测试id + RavenCallback string `json:"raven_callback"` // 瑞文测试回调数据 CalcPrice int64 // 计算价格 Uid int64 // 关联mid Oid1 string Oid2 string Oid3 string - ReturnUrl string } type CreateOrderData struct { diff --git a/app/mix/controller/vas.go b/app/mix/controller/vas.go index a05d8a2b..8357af6b 100644 --- a/app/mix/controller/vas.go +++ b/app/mix/controller/vas.go @@ -126,7 +126,7 @@ func CreateOrderOuter(ctx *gin.Context) { } req.Mid = 100000001 - data, ec, err := service.DefaultService.CreateOrder(ctx, req) + data, ec, err := service.DefaultService.CreateOrderOuter(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("CreateOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if ec == errcode.ErrCodeVasSrvFail && err != nil { diff --git a/app/mix/service/logic/vas.go b/app/mix/service/logic/vas.go index e0409dd9..b6fdd2c5 100644 --- a/app/mix/service/logic/vas.go +++ b/app/mix/service/logic/vas.go @@ -1,14 +1,18 @@ package logic import ( + "bytes" "crypto/rand" "crypto/rsa" "crypto/x509" "database/sql" "encoding/base64" + "encoding/json" "encoding/pem" "errors" "fmt" + "io/ioutil" + "net/http" "service/api/base" "service/api/errs" "service/api/message/response" @@ -207,6 +211,9 @@ func (v *Vas) CreateOrder(ctx *gin.Context, req *vasproto.CreateOrderReq) (data // 邀请人 case dbstruct.ProductIdMembership: req.Uid, _ = v.account.GetInviterMid(ctx, req.Mid) + case dbstruct.ProductIdOuterRaven: + req.Oid1 = fmt.Sprintf("%d", req.RavenQid) + req.Oid2 = req.RavenCallback } // 获取商品 @@ -1654,6 +1661,9 @@ func (v *Vas) PayCallback(ctx *gin.Context, p *vasproto.PayCallbackParamIn) erro logger.Error("UnlockZoneSuperfanship fail, order: %v, err: %v", util.ToJson(order), err) return err } + case product.Id == dbstruct.ProductIdOuterRaven: + notifyRavenDY(order.GetOid2()) + return nil } // 是否达到铁粉解锁条件 @@ -1665,6 +1675,35 @@ func (v *Vas) PayCallback(ctx *gin.Context, p *vasproto.PayCallbackParamIn) erro return nil } +func notifyRavenDY(callback string) { + url := "https://analytics.oceanengine.com/api/v2/conversion" + req := map[string]interface{}{ + "event_type": "successful_pay", + "context": map[string]interface{}{ + "ad": map[string]interface{}{ + "callback": callback, + }, + }, + "timestamp": time.Now().UnixMilli(), + } + reqBs, _ := json.Marshal(req) + resp, err := http.Post(url, "application/json", bytes.NewReader(reqBs)) + if err != nil { + logger.Error("%v fail, req: %v, err: %v", url, string(reqBs), err) + return + } + defer resp.Body.Close() + + // 读取响应内容 + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + logger.Error("%v read fail, req: %v, body: %v, err: %v", url, string(reqBs), string(body), err) + return + } + logger.Info("notifyRavenDY ok, req: %v, resp: %v", string(reqBs), string(body)) + return +} + func (v *Vas) GetCoinOrderById(ctx *gin.Context, id string) (*dbstruct.CoinOrder, error) { return v.store.GetCoinOrderById(ctx, nil, id) } diff --git a/app/mix/service/service.go b/app/mix/service/service.go index 97361b59..eb72c155 100644 --- a/app/mix/service/service.go +++ b/app/mix/service/service.go @@ -1138,6 +1138,16 @@ func (s *Service) CreateOrder(ctx *gin.Context, req *vasproto.CreateOrderReq) (d return } +func (s *Service) CreateOrderOuter(ctx *gin.Context, req *vasproto.CreateOrderReq) (data *vasproto.CreateOrderData, ec errcode.ErrCode, err error) { + data, err = _DefaultVas.CreateOrder(ctx, req) + ec, err = errs.DealVasErr(err) + if err != nil { + logger.Error("CreateOrder fail, err: %v", err) + return + } + return +} + func (s *Service) OpCreateOrder(ctx *gin.Context, req *vasproto.OpCreateOrderReq) (ec errcode.ErrCode) { err := _DefaultVas.OpCreateOrder(ctx, req) ec, err = errs.DealVasErr(err)