272 lines
6.5 KiB
Go
272 lines
6.5 KiB
Go
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))
|
||
}
|