123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- package http
- import (
- "encoding/json"
- "io/ioutil"
- "net/url"
- "strconv"
- "strings"
- "go-common/app/service/main/push/dao/huawei"
- "go-common/app/service/main/push/dao/jpush"
- "go-common/app/service/main/push/dao/mi"
- "go-common/app/service/main/push/dao/oppo"
- pushmdl "go-common/app/service/main/push/model"
- "go-common/library/ecode"
- "go-common/library/log"
- bm "go-common/library/net/http/blademaster"
- )
- var mobis = map[string]int{
- "android": pushmdl.MobiAndroid,
- "android_i": pushmdl.MobiAndroid,
- "iphone": pushmdl.MobiIPhone,
- "ipad": pushmdl.MobiIPad,
- "android_comic": pushmdl.MobiAndroidComic,
- }
- func huaweiCallback(c *bm.Context) {
- var (
- err error
- res = make(map[string]interface{})
- )
- defer func() {
- c.JSONMap(res, err)
- }()
- bs, err := ioutil.ReadAll(c.Request.Body)
- if err != nil {
- res["errno"] = ecode.RequestErr
- res["errmsg"] = "param error"
- log.Error("huawei callback param(%s) error", bs)
- return
- }
- cb := new(huawei.Callback)
- if err = json.Unmarshal(bs, &cb); err != nil {
- res["errno"] = ecode.RequestErr
- res["errmsg"] = "param error"
- log.Error("huawei callback param(%s) error(%v)", bs, err)
- return
- }
- if err = pushSrv.CallbackHuawei(c, cb); err != nil {
- res["errno"] = err
- res["errmsg"] = err.Error()
- log.Error("huawei callback param(%s) error(%v)", bs, err)
- return
- }
- res["errno"] = ecode.OK
- res["errmsg"] = "success"
- }
- func miCallback(c *bm.Context) {
- param := c.Request.Form
- d := param.Get("data")
- if d == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("xiaomi callback param empty")
- return
- }
- m := map[string]*mi.Callback{}
- if err := json.Unmarshal([]byte(d), &m); err != nil {
- c.JSON(nil, ecode.RequestErr)
- log.Error("xiaomi callback param(%s) error(%v)", d, err)
- return
- }
- c.JSON(nil, pushSrv.CallbackXiaomi(c, m))
- }
- func miRegidCallback(c *bm.Context) {
- params := c.Request.Form
- appID := params.Get("app_id")
- if appID == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("app_id is empty")
- return
- }
- appVer := params.Get("app_version")
- if appVer == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("app_version is empty")
- return
- }
- appPkg := params.Get("app_pkg")
- if appPkg == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("app_pkg is empty")
- return
- }
- regid := params.Get("regid")
- if regid == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("regid is empty")
- return
- }
- auth := strings.TrimPrefix(c.Request.Header.Get("Authorization"), "key=")
- if auth == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("auth is empty")
- return
- }
- cb := &mi.RegidCallback{
- AppID: appID,
- AppVer: appVer,
- AppPkg: appPkg,
- AppSecret: auth,
- Regid: regid,
- }
- c.JSON(nil, pushSrv.CallbackXiaomiRegid(c, cb))
- }
- func oppoCallback(c *bm.Context) {
- bs, err := ioutil.ReadAll(c.Request.Body)
- if err != nil {
- c.JSON(nil, ecode.RequestErr)
- log.Error("huawei callback param(%s) error", bs)
- return
- }
- var cb []*oppo.Callback
- if err = json.Unmarshal(bs, &cb); err != nil {
- c.JSON(nil, ecode.RequestErr)
- log.Error("oppo callback param(%s) error(%v)", bs, err)
- return
- }
- param := c.Request.Form
- task := param.Get("task")
- if task == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("oppo callback task empty")
- return
- }
- c.JSON(nil, pushSrv.CallbackOppo(c, task, cb))
- }
- func jpushCallback(ctx *bm.Context) {
- bs, err := ioutil.ReadAll(ctx.Request.Body)
- if err != nil {
- log.Error("jpush batch callback param(%s) error(%v)", bs, err)
- ctx.JSON(nil, ecode.RequestErr)
- return
- }
- var cbs []*jpush.CallbackReply
- if err = json.Unmarshal(bs, &cbs); err != nil {
- log.Error("jpush batch callback param(%s) error(%v)", bs, err)
- ctx.JSON(nil, ecode.RequestErr)
- return
- }
- ctx.JSON(nil, pushSrv.CallbackJpush(ctx, cbs))
- }
- func iOSCallback(c *bm.Context) {
- params := c.Request.Form
- task := params.Get("task")
- if task == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("task is empty")
- return
- }
- p := params.Get("mobi_app")
- if p == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("mobi_app is empty")
- return
- }
- token := params.Get("tid")
- if token == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("tid is empty")
- return
- }
- c.JSON(nil, pushSrv.CallbackIOS(c, task, token, mobis[p]))
- }
- func androidCallback(c *bm.Context) {
- // Warn: 刚开始接极光时,极光没有回执功能,只能客户端来做送达回执,数据不准确
- // 如今极光提供了送达回执的功能,数据不能重复记录,所以这里直接return
- // 目前这个方法只有极光送达回执在调用(调用方是客户端),直接停用
- c.JSON(nil, nil)
- }
- func clickCallback(c *bm.Context) {
- var (
- err error
- pid int
- platform int
- params = c.Request.Form
- )
- task := params.Get("task")
- if task == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("task is empty")
- return
- }
- app, _ := strconv.ParseInt(params.Get("app"), 10, 64)
- if app <= 0 {
- c.JSON(nil, ecode.RequestErr)
- log.Error("app error(%s)", params.Get("app"))
- return
- }
- mid, _ := strconv.ParseInt(params.Get("mid"), 10, 64)
- p := params.Get("mobi_app")
- if p == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("mobi_app is empty")
- return
- }
- pid, ok := mobis[p]
- if !ok {
- c.JSON(nil, ecode.RequestErr)
- log.Error("mobi_app error(%s)", params.Get("mobi_app"))
- return
- }
- sdk, _ := strconv.Atoi(params.Get("push_sdk"))
- if sdk == 0 {
- c.JSON(nil, ecode.RequestErr)
- log.Error("push_sdk error(%s)", params.Get("push_sdk"))
- return
- }
- switch sdk {
- case pushmdl.PushSDKApns:
- if pid == pushmdl.MobiIPhone {
- platform = pushmdl.PlatformIPhone
- } else if pid == pushmdl.MobiIPad {
- platform = pushmdl.PlatformIPad
- }
- case pushmdl.PushSDKXiaomi:
- platform = pushmdl.PlatformXiaomi
- case pushmdl.PushSDKHuawei:
- platform = pushmdl.PlatformHuawei
- case pushmdl.PushSDKOppo:
- platform = pushmdl.PlatformOppo
- case pushmdl.PushSDKJpush:
- platform = pushmdl.PlatformJpush
- default:
- c.JSON(nil, ecode.RequestErr)
- log.Error("invalid push_sdk value(%d)", sdk)
- return
- }
- token, err := url.QueryUnescape(params.Get("token"))
- if err != nil || token == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("token(%s) error(%v)", params.Get("token"), err)
- return
- }
- buvid := c.Request.Header.Get("Buvid")
- if buvid == "" {
- if buvid, err = url.QueryUnescape(params.Get("buvid")); buvid == "" {
- c.JSON(nil, ecode.RequestErr)
- log.Error("buvid(%s) error(%v)", params.Get("buvid"), err)
- return
- }
- }
- cb := &pushmdl.Callback{
- Task: task,
- APP: app,
- Platform: platform,
- Mid: mid,
- Pid: pid,
- Token: token,
- Buvid: buvid,
- Click: 1,
- }
- c.JSON(nil, pushSrv.CallbackClick(c, cb))
- }
|