221 lines
6.2 KiB
Go
221 lines
6.2 KiB
Go
package unipushapi
|
|
|
|
//
|
|
//import (
|
|
// "crypto/sha256"
|
|
// "encoding/hex"
|
|
// "encoding/json"
|
|
// "fmt"
|
|
// "net/http"
|
|
// "strings"
|
|
// "sync"
|
|
// "time"
|
|
//
|
|
// "git.rosy.net.cn/baseapi/platformapi"
|
|
// "git.rosy.net.cn/baseapi/utils"
|
|
//)
|
|
//
|
|
//const (
|
|
// prodURL = "https://restapi.getui.com/v2"
|
|
//
|
|
// authAction = "auth"
|
|
// SuccessOffLine = "successed_offline"
|
|
// SuccessONLine = "successed_online"
|
|
//)
|
|
//
|
|
//type TokenInfo struct {
|
|
// ExpireTime string `json:"expire_time"`
|
|
// Token string `json:"token"`
|
|
//}
|
|
//
|
|
//type API struct {
|
|
// token string
|
|
// appID string
|
|
// appKey string
|
|
// appSecret string
|
|
// masterSecret string
|
|
//
|
|
// client *http.Client
|
|
// config *platformapi.APIConfig
|
|
// locker sync.RWMutex
|
|
//}
|
|
//
|
|
//func New(appID, appKey, appSecret, masterSecret string, config ...*platformapi.APIConfig) *API {
|
|
// curConfig := platformapi.DefAPIConfig
|
|
// if len(config) > 0 {
|
|
// curConfig = *config[0]
|
|
// }
|
|
// return &API{
|
|
// appID: appID,
|
|
// appKey: appKey,
|
|
// appSecret: appSecret,
|
|
// masterSecret: masterSecret,
|
|
//
|
|
// client: &http.Client{Timeout: curConfig.ClientTimeout},
|
|
// config: &curConfig,
|
|
// }
|
|
//}
|
|
//
|
|
//func (a *API) signParam(appKey string, time int64, masterSecret string) (sig string) {
|
|
// //方法一:
|
|
// //创建一个基于SHA256算法的hash.Hash接口的对象
|
|
// hash := sha256.New()
|
|
// //输入数据
|
|
// hash.Write([]byte(appKey + utils.Int64ToStr(time) + masterSecret))
|
|
// //计算哈希值
|
|
// bytes := hash.Sum(nil)
|
|
// //将字符串编码为16进制格式,返回字符串
|
|
// hashCode := hex.EncodeToString(bytes)
|
|
// //返回哈希值
|
|
// return hashCode
|
|
//}
|
|
//
|
|
//func (a *API) AccessAPI(action string, bizParams map[string]interface{}) (retVal map[string]interface{}, err error) {
|
|
// params := make(map[string]interface{})
|
|
// time := time.Now().UnixNano() / 1e6
|
|
// params["timestamp"] = utils.Int64ToStr(time)
|
|
// params["appkey"] = a.appKey
|
|
// params["sign"] = a.signParam(a.appKey, time, a.masterSecret)
|
|
// result, _ := json.MarshalIndent(params, "", " ")
|
|
// fullURL := utils.GenerateGetURL(prodURL+"/"+a.appID, action, nil)
|
|
// err = platformapi.AccessPlatformAPIWithRetry(a.client,
|
|
// func() *http.Request {
|
|
// request, _ := http.NewRequest(http.MethodPost, fullURL, strings.NewReader(string(result)))
|
|
// if action != authAction {
|
|
// request.Header.Set("token", a.CBGetToken())
|
|
// }
|
|
// request.Header.Set("Content-Type", "application/json;charset=utf-8")
|
|
// return request
|
|
// },
|
|
// a.config,
|
|
// func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
|
|
// if jsonResult1 == nil {
|
|
// return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
|
|
// }
|
|
// if err == nil {
|
|
// if jsonResult1["msg"].(string) != "success" {
|
|
// errLevel = platformapi.ErrLevelGeneralFail
|
|
// err = utils.NewErrorCode(jsonResult1["msg"].(string), utils.Int64ToStr(utils.MustInterface2Int64(jsonResult1["code"])))
|
|
// }
|
|
// retVal = jsonResult1["data"].(map[string]interface{})
|
|
// }
|
|
// return errLevel, err
|
|
// })
|
|
// return retVal, err
|
|
//}
|
|
//
|
|
//func (a *API) AccessAPI2(action string, bizParams map[string]interface{}) (retVal map[string]interface{}, err error) {
|
|
// result, _ := json.MarshalIndent(bizParams, "", " ")
|
|
// fullURL := utils.GenerateGetURL(prodURL+"/"+a.appID, action, nil)
|
|
// err = platformapi.AccessPlatformAPIWithRetry(a.client,
|
|
// func() *http.Request {
|
|
// request, _ := http.NewRequest(http.MethodPost, fullURL, strings.NewReader(string(result)))
|
|
// request.Header.Set("token", a.CBGetToken())
|
|
// request.Header.Set("Content-Type", "application/json;charset=utf-8")
|
|
// return request
|
|
// },
|
|
// a.config,
|
|
// func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
|
|
// if jsonResult1 == nil {
|
|
// return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
|
|
// }
|
|
// if err == nil {
|
|
// if jsonResult1["msg"].(string) != "success" {
|
|
// errLevel = platformapi.ErrLevelGeneralFail
|
|
// err = utils.NewErrorCode(jsonResult1["msg"].(string), utils.Int64ToStr(utils.MustInterface2Int64(jsonResult1["code"])))
|
|
// }
|
|
// retVal = jsonResult1
|
|
// }
|
|
// return errLevel, err
|
|
// })
|
|
// return retVal, err
|
|
//}
|
|
//
|
|
//func (a *API) CBSetToken(newToken string) bool {
|
|
// curToken := a.CBGetToken()
|
|
// if curToken != newToken {
|
|
// a.locker.Lock()
|
|
// defer a.locker.Unlock()
|
|
// a.token = newToken
|
|
// return true
|
|
// }
|
|
// return false
|
|
//}
|
|
//
|
|
//func (a *API) CBGetToken() string {
|
|
// a.locker.RLock()
|
|
// defer a.locker.RUnlock()
|
|
// return a.token
|
|
//}
|
|
//
|
|
//func (a *API) CBRetrieveToken() (tokenInfo *TokenInfo, err error) {
|
|
// result, err := a.AccessAPI("auth", nil)
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
// tokenInfo = &TokenInfo{
|
|
// Token: utils.Interface2String(result["token"]),
|
|
// ExpireTime: utils.Interface2String(result["expire_time"]),
|
|
// }
|
|
// a.CBSetToken(tokenInfo.Token)
|
|
// return tokenInfo, nil
|
|
//}
|
|
//
|
|
//type PushMsg struct {
|
|
// Notificatio Notification `json:"notification"`
|
|
//}
|
|
//
|
|
//type Notification struct {
|
|
// Title string `json:"title"`
|
|
// Body string `json:"body"`
|
|
// ClickType string `json:"click_type"`
|
|
// URL string `json:"url"`
|
|
//}
|
|
//
|
|
//type Audience struct {
|
|
// CID []string `json:"cid"`
|
|
//}
|
|
//
|
|
//type Settings struct {
|
|
// TTL int `json:"ttl"`
|
|
//}
|
|
//
|
|
//type Transmission struct {
|
|
// Transmission string `json:"transmission"`
|
|
//}
|
|
//
|
|
//func (a *API) PushToSingle(cid string, transmission bool, notification *Notification) (status string, err error) {
|
|
// params := map[string]interface{}{
|
|
// "request_id": utils.GetUUID(),
|
|
// "audience": &Audience{
|
|
// []string{cid},
|
|
// },
|
|
// }
|
|
// if !transmission {
|
|
// params["push_message"] = &PushMsg{
|
|
// Notificatio: Notification{
|
|
// Title: notification.Title,
|
|
// Body: notification.Body,
|
|
// ClickType: "startapp", //打开应用首页
|
|
// },
|
|
// }
|
|
// } else {
|
|
// params["push_message"] = &Transmission{
|
|
// Transmission: notification.Body,
|
|
// }
|
|
// }
|
|
// result2, err := a.AccessAPI2("push/single/cid", params)
|
|
// if err != nil {
|
|
// return "", err
|
|
// } else {
|
|
// for _, v := range result2["data"].(map[string]interface{}) {
|
|
// for _, vv := range v.(map[string]interface{}) {
|
|
// if vv.(string) != "" {
|
|
// status = vv.(string)
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// return status, nil
|
|
//}
|