提供文件上传及静态服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
4.3 KiB

package jpush
import (
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"service-api/global"
"strings"
)
func createAuthorization(req *http.Request) *http.Request {
var (
str string
)
str = global.MG_CONFIG.JPush.Appkey + ":" + global.MG_CONFIG.JPush.Secret
req.Header.Add("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(str)))
return req
}
//JiGuangPush ...
func JiGuangPush(reqParams map[string]interface{}) (result PushResult, err error) {
var (
client *http.Client
req *http.Request
params []byte
cid string
resBody []byte
options map[string]interface{}
)
options = make(map[string]interface{})
options["time_to_live"] = 0
if global.MG_CONFIG.System.Env == "mater" {
options["apns_production"] = true
} else {
options["apns_production"] = false
}
reqParams["options"] = options
cid, err = jiGuangCid()
if err != nil {
return
}
reqParams["cid"] = cid
params, err = json.Marshal(reqParams)
if err != nil {
return
}
client = &http.Client{}
req, err = http.NewRequest(http.MethodPost, "https://api.jpush.cn/v3/push", strings.NewReader(string(params)))
if err != nil {
return
}
req.Header.Add("Content-Type", "application/json")
createAuthorization(req)
resp, err := client.Do(req)
if err != nil {
return
}
defer resp.Body.Close()
resBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return
}
//fmt.Println(string(resBody))
global.MG_LOG.Info(string(resBody))
err = json.Unmarshal(resBody, &result)
if err != nil {
return
}
return
}
func jiGuangCid() (string, error) {
var (
err error
res string
client *http.Client
req *http.Request
resp *http.Response
resBody []byte
list cidList
)
client = &http.Client{}
req, err = http.NewRequest(http.MethodGet, "https://api.jpush.cn/v3/push/cid?count=10&type=push", nil)
if err != nil {
return res, err
}
req.Header.Add("Content-Type", "application/json")
createAuthorization(req)
resp, err = client.Do(req)
if err != nil {
return res, err
}
defer resp.Body.Close()
resBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return res, err
}
err = json.Unmarshal(resBody, &list)
if err != nil || len(list.CidList) == 0 {
return "", err
}
return list.CidList[0], err
}
func GetTagsList() (string, error) {
var (
err error
res string
client *http.Client
req *http.Request
resp *http.Response
resBody []byte
list tags
)
client = &http.Client{}
req, err = http.NewRequest(http.MethodGet, "https://device.jpush.cn/v3/tags/", nil)
if err != nil {
return res, err
}
req.Header.Add("Content-Type", "application/json")
createAuthorization(req)
resp, err = client.Do(req)
if err != nil {
return res, err
}
defer resp.Body.Close()
resBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return res, err
}
fmt.Println(string(resBody))
err = json.Unmarshal(resBody, &list)
if err != nil || len(list.Tags) == 0 {
return "", err
}
return list.Tags[0], err
}
func UpdateTags(tagValue string, registration map[string][]string) {
var (
err error
client *http.Client
req *http.Request
params []byte
reqParams map[string]interface{}
resBody []byte
)
reqParams = make(map[string]interface{})
reqParams["registration_ids"] = registration
params, err = json.Marshal(reqParams)
if err != nil {
return
}
client = &http.Client{}
req, err = http.NewRequest(http.MethodPost, "https://device.jpush.cn/v3/tags/"+tagValue, strings.NewReader(string(params)))
if err != nil {
return
}
req.Header.Add("Content-Type", "application/json")
createAuthorization(req)
resp, err := client.Do(req)
if err != nil {
return
}
defer resp.Body.Close()
resBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return
}
fmt.Println(string(resBody))
return
}
func GetRegistrationInfo(registration string) {
var (
err error
client *http.Client
req *http.Request
resp *http.Response
resBody []byte
)
client = &http.Client{}
req, err = http.NewRequest(http.MethodGet, "https://device.jpush.cn/v3/tags/", nil)
if err != nil {
return
}
req.Header.Add("Content-Type", "application/json")
createAuthorization(req)
resp, err = client.Do(req)
if err != nil {
return
}
defer resp.Body.Close()
resBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return
}
fmt.Println(string(resBody))
return
}