gosdk/unify/ad_sdk.go

254 lines
5.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package unify
import (
"encoding/json"
"fmt"
"git.u8t.cn/open/gosdk/util"
"github.com/spf13/cast"
"net/url"
"strconv"
"strings"
"time"
)
type Sdk struct {
address string
token string
}
func NewAdApi(address string, token string) *Sdk {
if address == "" {
address = "http://127.0.0.1:9281"
}
return &Sdk{
address: address,
token: token,
}
}
func (s *Sdk) httpGet(url string) error {
body, err := util.HttpGet(url, map[string]string{
"x-token": s.token,
})
if err != nil {
return err
}
type rsp_t struct {
Code int `json:"code"`
Message string `json:"message"`
}
var rsp rsp_t
if err := json.Unmarshal(body, &rsp); err != nil {
return err
}
if rsp.Code != 0 {
return fmt.Errorf("%d:%s", rsp.Code, rsp.Message)
}
return nil
}
func (s *Sdk) httpMatchGet(url string) (*Result, error) {
body, err := util.HttpGet(url, map[string]string{
"x-token": s.token,
})
if err != nil {
return nil, err
}
type rsp_t struct {
Code int `json:"code"`
Message string `json:"message"`
Data *Result `json:"data"`
}
var rsp rsp_t
if err := json.Unmarshal(body, &rsp); err != nil {
return nil, err
}
if rsp.Code != 0 {
return nil, fmt.Errorf("%d:%s", rsp.Code, rsp.Message)
}
return rsp.Data, nil
}
func (s *Sdk) httpDataGet(url string) (map[string]interface{}, error) {
body, err := util.HttpGet(url, map[string]string{
"x-token": s.token,
})
if err != nil {
return nil, err
}
type rsp_t struct {
Code int `json:"code"`
Message string `json:"message"`
Data map[string]interface{} `json:"data"`
}
var rsp rsp_t
if err := json.Unmarshal(body, &rsp); err != nil {
return nil, err
}
if rsp.Code != 0 {
return nil, fmt.Errorf("%d:%s", rsp.Code, rsp.Message)
}
return rsp.Data, nil
}
func (s *Sdk) Match(c *Request) (*Result, error) {
if err := c.Check(); err != nil {
return nil, err
}
params := url.Values{}
params.Add("os", strings.ToLower(c.Os))
params.Add("ip", c.Ip)
params.Add("ipv6", c.Ipv6)
params.Add("ua", c.Ua)
params.Add("model", c.Model)
params.Add("brand", c.Brand)
params.Add("cid", c.Cid)
params.Add("idfa", c.Idfa)
params.Add("paid", c.Paid)
params.Add("oaid", c.Oaid)
params.Add("imei", c.Imei)
params.Add("channel", c.Channel)
params.Add("version", c.Version)
params.Add("os_version", c.OsVersion)
params.Add("active", strconv.FormatBool(c.Active))
if c.Extra != nil {
extra, _ := json.Marshal(c.Extra)
params.Add("extra", string(extra))
}
u := fmt.Sprintf("%s/api/ad/client/match?%s", s.address, params.Encode())
return s.httpMatchGet(u)
}
func (s *Sdk) Active(adId int64, extra map[string]string) error {
params := url.Values{}
params.Add("adId", strconv.FormatInt(adId, 10))
if extra != nil {
ex, _ := json.Marshal(extra)
params.Add("extra", string(ex))
}
url := fmt.Sprintf("%s/api/ad/client/active?%s",
s.address, params.Encode())
return s.httpGet(url)
}
/*
extra存放扩展数据注册相关信息都填上
unionid、phone、openid、nickname
*/
func (s *Sdk) Register(adId int64, extra map[string]string) error {
params := url.Values{}
params.Add("adId", strconv.FormatInt(adId, 10))
if extra != nil {
ex, _ := json.Marshal(extra)
params.Add("extra", string(ex))
}
url := fmt.Sprintf("%s/api/ad/client/register?%s",
s.address, params.Encode())
return s.httpGet(url)
}
/*
extra存放扩展数据支付相关信息都填上
支付金额payFee (单位分)
支付方式payTypeweixin、alipay、apple
支付位置payLocation (内容自定义)
支付商品goodsId、goodsName
*/
func (s *Sdk) Pay(adId int64, extra map[string]string) error {
params := url.Values{}
params.Add("adId", strconv.FormatInt(adId, 10))
if extra != nil {
ex, _ := json.Marshal(extra)
params.Add("extra", string(ex))
}
url := fmt.Sprintf("%s/api/ad/client/pay?%s",
s.address, params.Encode())
return s.httpGet(url)
}
func (s *Sdk) Relation(adId int64) (*AdRelation, error) {
params := url.Values{}
params.Add("adId", strconv.FormatInt(adId, 10))
url := fmt.Sprintf("%s/api/ad/client/relation?%s",
s.address, params.Encode())
var relation AdRelation
data, err := s.httpDataGet(url)
if err != nil {
return nil, err
}
res, _ := json.Marshal(data)
json.Unmarshal(res, &relation)
return &relation, nil
}
func (s *Sdk) GetAccountReport(startDay, endDay string, accountType string) ([]*AccountReport, error) {
if startDay == "" && endDay == "" {
startDay = time.Now().Format("2006-01-02")
endDay = startDay
}
reqUrl := fmt.Sprintf("%s/api/ad/account/report?startDay=%s&endDay=%s&accountType=%s",
s.address, startDay, endDay, accountType)
body, err := util.HttpGet(reqUrl, map[string]string{
"x-token": s.token,
})
if err != nil {
return nil, err
}
type rsp_t struct {
BaseResponse
Data []map[string]interface{} `json:"data"`
}
var rsp rsp_t
if err := json.Unmarshal(body, &rsp); err != nil {
return nil, err
}
if rsp.Code != 0 {
return nil, fmt.Errorf("%d:%s", rsp.Code, rsp.Message)
}
results := make([]*AccountReport, 0)
for _, data := range rsp.Data {
r := new(AccountReport)
r.Id = cast.ToString(data["accounId"])
r.Name = cast.ToString(data["accounName"])
r.Type = cast.ToString(data["accounType"])
r.Day = cast.ToString(data["day"])
r.Cost = cast.ToFloat64(data["cost"])
r.Show = cast.ToInt64(data["show"])
r.Click = cast.ToInt64(data["click"])
r.Download = cast.ToInt64(data["download"])
r.Active = cast.ToInt64(data["active"])
r.Register = cast.ToInt64(data["register"])
r.Pay = cast.ToInt64(data["pay"])
r.PayAmount = cast.ToFloat64(data["payAmount"])
r.Balance = cast.ToFloat64(data["balance"])
results = append(results, r)
}
return results, nil
}