...
|
...
|
@@ -12,10 +12,12 @@ import ( |
|
|
"time"
|
|
|
)
|
|
|
|
|
|
var (
|
|
|
host = "https://restapi.getui.com"
|
|
|
pushSingle = "push_single"
|
|
|
authSign = "auth_sign "
|
|
|
const (
|
|
|
host = "https://restapi.getui.com"
|
|
|
pushSingle = "push_single"
|
|
|
saveListBody = "save_list_body"
|
|
|
pushList = "push_list"
|
|
|
authSign = "auth_sign "
|
|
|
)
|
|
|
|
|
|
var (
|
...
|
...
|
@@ -25,6 +27,7 @@ var ( |
|
|
expireSpan = time.Second * 3600 * 6
|
|
|
)
|
|
|
|
|
|
//GetuiNotification 个推消息推送
|
|
|
type GetuiNotification struct {
|
|
|
Options *push.Options
|
|
|
Request *httplib.BeegoHTTPRequest
|
...
|
...
|
@@ -37,36 +40,133 @@ func (notify *GetuiNotification) Init(options ...push.Option) error { |
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
func (notify *GetuiNotification) Send(option map[string]interface{}) error {
|
|
|
token, err := notify.GetAuthToken()
|
|
|
func (notify *GetuiNotification) Send(option map[string]interface{}) (err error) {
|
|
|
switch notify.Options.PushType {
|
|
|
case push.PushToSingle:
|
|
|
err = notify.pushToSingle(option)
|
|
|
case push.PushToList:
|
|
|
err = notify.pushToList(option)
|
|
|
default:
|
|
|
err = notify.pushToSingle(option)
|
|
|
}
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
//pushToSingle 单推
|
|
|
func (notify *GetuiNotification) pushToSingle(option map[string]interface{}) (err error) {
|
|
|
var token string
|
|
|
if token, err = notify.GetAuthToken(); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
var (
|
|
|
result *Result
|
|
|
url = notify.Url(notify.Options.AppId, pushSingle)
|
|
|
m = notify.Message(pushSingle)
|
|
|
)
|
|
|
notify.Request = httplib.Post(url)
|
|
|
notify.Request.Header("authtoken", token)
|
|
|
notify.Request.JSONBody(m)
|
|
|
if err = notify.Request.ToJSON(&result); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
notify.print(url, m, result, result)
|
|
|
if err = handleResult(url, result); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
//pushToList 群推
|
|
|
//步骤1.获取token
|
|
|
//步骤2.save_list_body保存消息共同体
|
|
|
//步骤3.push_list
|
|
|
func (notify *GetuiNotification) pushToList(option map[string]interface{}) (err error) {
|
|
|
var (
|
|
|
token string
|
|
|
taskId string
|
|
|
)
|
|
|
if token, err = notify.GetAuthToken(); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
if taskId, err = notify.saveListBody(token, option); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
var (
|
|
|
result *Result
|
|
|
url = notify.Url(notify.Options.AppId, pushList)
|
|
|
m = struct {
|
|
|
Cid []string `json:"cid"`
|
|
|
TaskId string `json:"taskid"`
|
|
|
NeedDetail bool `json:"need_detail"`
|
|
|
}{
|
|
|
Cid: notify.Options.ClientIds,
|
|
|
TaskId: taskId,
|
|
|
NeedDetail: true,
|
|
|
}
|
|
|
)
|
|
|
notify.Request = httplib.Post(url)
|
|
|
notify.Request.Header("authtoken", token)
|
|
|
notify.Request.JSONBody(notify.Message())
|
|
|
notify.Request.JSONBody(m)
|
|
|
if err = notify.Request.ToJSON(&result); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
notify.print(url, notify.Message(), result, result)
|
|
|
notify.print(url, m, result, result)
|
|
|
if err = handleResult(url, result); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
func (notify *GetuiNotification) Message() interface{} {
|
|
|
//TODO:默认通知模板
|
|
|
m := NewNotificationTemplate(notify.Options)
|
|
|
|
|
|
//saveListBody 保存消息共同体
|
|
|
func (notify *GetuiNotification) saveListBody(token string, option map[string]interface{}) (taskId string, err error) {
|
|
|
var (
|
|
|
result *Result
|
|
|
url = notify.Url(notify.Options.AppId, saveListBody)
|
|
|
m = notify.Message(saveListBody)
|
|
|
)
|
|
|
notify.Request = httplib.Post(url)
|
|
|
notify.Request.Header("authtoken", token)
|
|
|
notify.Request.JSONBody(m)
|
|
|
if err = notify.Request.ToJSON(&result); err != nil {
|
|
|
return
|
|
|
}
|
|
|
notify.print(url, m, result, result)
|
|
|
if err = handleResult(url, result); err != nil {
|
|
|
return
|
|
|
}
|
|
|
taskId = result.TaskId
|
|
|
return
|
|
|
}
|
|
|
|
|
|
//Message 组装消息体
|
|
|
func (notify *GetuiNotification) Message(method string) interface{} {
|
|
|
var m interface{}
|
|
|
switch notify.Options.MsgType {
|
|
|
case push.SystemNotification:
|
|
|
t := NewNotificationTemplate(notify.Options)
|
|
|
if method == saveListBody {
|
|
|
t.ClientId = ""
|
|
|
t.RequestId = ""
|
|
|
}
|
|
|
m = t
|
|
|
break
|
|
|
default:
|
|
|
m = NewNotificationTemplate(notify.Options)
|
|
|
break
|
|
|
}
|
|
|
return m
|
|
|
}
|
|
|
|
|
|
//Url 组装请求地址
|
|
|
func (notify *GetuiNotification) Url(param string, method string) string {
|
|
|
return fmt.Sprintf("%v/v1/%v/%v", host, param, method)
|
|
|
}
|
|
|
|
|
|
//GetAuthToken 获取token
|
|
|
func (notify *GetuiNotification) GetAuthToken() (token string, err error) {
|
|
|
if authtoken != "" && expire.Unix() > time.Now().Unix() {
|
|
|
token = authtoken
|
...
|
...
|
@@ -100,6 +200,16 @@ func (notify *GetuiNotification) GetAuthToken() (token string, err error) { |
|
|
expire = time.Now().Add(expireSpan)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
//打印日志 debug_module=true print debug log
|
|
|
func (notify *GetuiNotification) print(url string, v interface{}, rsp interface{}, result *Result) {
|
|
|
if !notify.Options.DebugModule {
|
|
|
return
|
|
|
}
|
|
|
log.Error(fmt.Sprintf("【个推】 url:%v \n request:%v \n response:%v 结果:%v", url, utils.JsonAssertString(v), utils.JsonAssertString(rsp), result.Result))
|
|
|
}
|
|
|
|
|
|
//处理结果
|
|
|
func handleResult(url string, result *Result) (err error) {
|
|
|
if strings.ToLower(result.Result) == "ok" {
|
|
|
return
|
...
|
...
|
@@ -112,9 +222,3 @@ func sign(appkey, timestamp, mastersecret string) string { |
|
|
sha.Write([]byte(appkey + timestamp + mastersecret))
|
|
|
return fmt.Sprintf("%x", sha.Sum(nil))
|
|
|
} |
|
|
func (notify *GetuiNotification) print(url string, v interface{}, rsp interface{}, result *Result) {
|
|
|
if !notify.Options.DebugModule {
|
|
|
return
|
|
|
}
|
|
|
log.Error(fmt.Sprintf("【个推】 url:%v \n request:%v \n response:%v 结果:%v", url, utils.JsonAssertString(v), utils.JsonAssertString(rsp), result.Result))
|
|
|
} |
...
|
...
|
|