mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 19:32:17 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			404 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			404 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package req
 | 
						|
 | 
						|
import (
 | 
						|
	tpns "Open_IM/internal/push/sdk/tpns-server-sdk-go/go"
 | 
						|
	"bytes"
 | 
						|
	"encoding/json"
 | 
						|
	"io"
 | 
						|
	"mime/multipart"
 | 
						|
	"net/http"
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
)
 | 
						|
 | 
						|
var PushURL = "https://api.tpns.tencent.com/v3/push/app"
 | 
						|
 | 
						|
//var PushURL = "https://test.api.tpns.tencent.com/v3/push/app"
 | 
						|
 | 
						|
func URL(url string) {
 | 
						|
	PushURL = url
 | 
						|
}
 | 
						|
 | 
						|
type ReqOpt func(*tpns.Request)
 | 
						|
 | 
						|
func NewPush(req *tpns.Request, opts ...ReqOpt) (*http.Request, string, error) {
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewUploadFileRequest(host string, file string) (*http.Request, error) {
 | 
						|
	fp, err := os.Open(file)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	defer fp.Close()
 | 
						|
	body := &bytes.Buffer{}
 | 
						|
	writer := multipart.NewWriter(body)
 | 
						|
	part, err := writer.CreateFormFile("file", filepath.Base(fp.Name()))
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	io.Copy(part, fp)
 | 
						|
	writer.Close()
 | 
						|
	url := host + "/v3/push/package/upload"
 | 
						|
	req, err := http.NewRequest("POST", url, body)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	req.Header.Add("Content-Type", writer.FormDataContentType())
 | 
						|
 | 
						|
	return req, nil
 | 
						|
}
 | 
						|
 | 
						|
func NewSingleAccountPush(
 | 
						|
	message tpns.Message,
 | 
						|
	account string,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdAccountList,
 | 
						|
		AccountList:  []string{account},
 | 
						|
		Message:      message,
 | 
						|
	}
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewListAccountPush(
 | 
						|
	accounts []string, message tpns.Message,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdAccountList,
 | 
						|
		AccountList:  accounts,
 | 
						|
		Message:      message,
 | 
						|
		Environment:  tpns.EnvDev,
 | 
						|
	}
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewTokenPush(
 | 
						|
	tokens []string, message tpns.Message,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdTokenList,
 | 
						|
		TokenList:    tokens,
 | 
						|
		Message:      message,
 | 
						|
		Environment:  tpns.EnvProd,
 | 
						|
	}
 | 
						|
	//fmt.Printf("reqBody :%v", common.ToJson(req))
 | 
						|
	//fmt.Println()
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewTagsPush(
 | 
						|
	tagList []tpns.TagRule, message tpns.Message,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdTag,
 | 
						|
		Tag:          tagList,
 | 
						|
		Message:      message,
 | 
						|
	}
 | 
						|
	//fmt.Printf("reqBody :%v", common.ToJson(req))
 | 
						|
	//fmt.Println()
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewAllPush(
 | 
						|
	message tpns.Message,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdAll,
 | 
						|
		Message:      message,
 | 
						|
	}
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewAccountPackagePush(
 | 
						|
	message tpns.Message,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdPackageAccount,
 | 
						|
		Message:      message,
 | 
						|
	}
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewTokenPackagePush(
 | 
						|
	message tpns.Message,
 | 
						|
	opts ...ReqOpt,
 | 
						|
) (*http.Request, string, error) {
 | 
						|
	req := &tpns.Request{
 | 
						|
		MessageType:  tpns.MsgTypeNotify,
 | 
						|
		AudienceType: tpns.AdPackageToken,
 | 
						|
		Message:      message,
 | 
						|
	}
 | 
						|
	return NewPushReq(req, opts...)
 | 
						|
}
 | 
						|
 | 
						|
func NewPushReq(req *tpns.Request, opts ...ReqOpt) (request *http.Request, reqBody string, err error) {
 | 
						|
	for _, opt := range opts {
 | 
						|
		opt(req)
 | 
						|
	}
 | 
						|
	bodyBytes, err := json.Marshal(req)
 | 
						|
	if err != nil {
 | 
						|
		return nil, "", err
 | 
						|
	}
 | 
						|
	reqBody = string(bodyBytes)
 | 
						|
	//fmt.Printf("NewPushReq req:%v", reqBody)
 | 
						|
	request, err = http.NewRequest("POST", PushURL, bytes.NewReader(bodyBytes))
 | 
						|
	if err != nil {
 | 
						|
		return nil, "", err
 | 
						|
	}
 | 
						|
	request.Header.Add("Content-Type", "application/json")
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
func EnvProd() ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Environment = tpns.EnvProd
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func EnvDev() ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Environment = tpns.EnvDev
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Title(t string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Title = t
 | 
						|
		if r.Message.IOS != nil {
 | 
						|
			if r.Message.IOS.Aps != nil {
 | 
						|
				r.Message.IOS.Aps.Alert["title"] = t
 | 
						|
			} else {
 | 
						|
				r.Message.IOS.Aps = &tpns.Aps{
 | 
						|
					Alert: map[string]string{"title": t},
 | 
						|
				}
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			r.Message.IOS = &tpns.IOSParams{
 | 
						|
				Aps: &tpns.Aps{
 | 
						|
					Alert: map[string]string{"title": t},
 | 
						|
				},
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Content(c string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Content = c
 | 
						|
		if r.Message.IOS != nil {
 | 
						|
			if r.Message.IOS.Aps != nil {
 | 
						|
				r.Message.IOS.Aps.Alert["body"] = c
 | 
						|
			} else {
 | 
						|
				r.Message.IOS.Aps = &tpns.Aps{
 | 
						|
					Alert: map[string]string{"body": c},
 | 
						|
				}
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			r.Message.IOS = &tpns.IOSParams{
 | 
						|
				Aps: &tpns.Aps{
 | 
						|
					Alert: map[string]string{"body": c},
 | 
						|
				},
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Ring(ring *int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.Ring = ring
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func RingRaw(rr string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.RingRaw = rr
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Vibrate(v *int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.Vibrate = v
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Lights(l *int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.Lights = l
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Clearable(c *int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.Clearable = c
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func IconType(it *int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.IconType = it
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func IconRes(ir string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.IconRes = ir
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AndroidCustomContent(ct string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.Android.CustomContent = ct
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Aps(aps *tpns.Aps) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message.IOS.Aps = aps
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AudienceType(at tpns.AudienceType) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.AudienceType = at
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Message(m tpns.Message) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Message = m
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TokenList(tl []string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.TokenList = tl
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TokenListAdd(t string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		if r.TokenList != nil {
 | 
						|
			r.TokenList = append(r.TokenList, t)
 | 
						|
		} else {
 | 
						|
			r.TokenList = []string{t}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AccountList(al []string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.AccountList = al
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
//ChannelDistributeRules
 | 
						|
func AddChannelRules(ChannelRules []*tpns.ChannelDistributeRule) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.ChannelRules = ChannelRules
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
//ChannelDistributeRules
 | 
						|
func AddLoopParam(loopParam *tpns.PushLoopParam) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.LoopParam = loopParam
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AccountListAdd(a string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		if r.AccountList != nil {
 | 
						|
			r.AccountList = append(r.AccountList, a)
 | 
						|
		} else {
 | 
						|
			r.AccountList = []string{a}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func MessageType(t tpns.MessageType) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.MessageType = t
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddMultiPkg(multipPkg bool) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.MultiPkg = multipPkg
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddForceCollapse(forceCollapse bool) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.ForceCollapse = forceCollapse
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddTPNSOnlinePushType(onlinePushType int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.TPNSOnlinePushType = onlinePushType
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddCollapseId(collapseId int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.CollapseId = collapseId
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddPushSpeed(pushSpeed int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.PushSpeed = pushSpeed
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddAccountPushType(accountPushType int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.AccountPushType = accountPushType
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddPlanId(planId string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.PlanId = planId
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddSendTime(sendTime string) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.SendTime = sendTime
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddExpireTime(expireTime int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.ExpireTime = expireTime
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddUploadId(UploadId int) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.UploadId = UploadId
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func AddEnvironment(Environment tpns.CommonRspEnv) ReqOpt {
 | 
						|
	return func(r *tpns.Request) {
 | 
						|
		r.Environment = Environment
 | 
						|
	}
 | 
						|
}
 |