mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-10-31 16:32:12 +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
 | |
| 	}
 | |
| }
 |