package main import ( "encoding/json" "fmt" "log" ) func getKfSendURL() (url string) { atk, _ := GetAccessToken() url = fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s", atk) return } type sendTxtMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` Text struct { Content string `json:"content"` } `json:"text"` } func kfSendTxt(user, txt string) { u := getKfSendURL() s := sendTxtMsg{} s.MsgType = "text" s.Text.Content = txt s.ToUser = user j, _ := json.Marshal(s) postJSON(j, u) } type sendPicMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` Image struct { MediaID string `json:"media_id"` } `json:"image"` } func kfSendPic(user, pic string) { mID := uploadImage(pic) kfSendPicByMediaID(user, mID) } func kfSendPicByMediaID(user, mediaID string) { u := getKfSendURL() s := sendPicMsg{} s.ToUser = user s.MsgType = "image" s.Image.MediaID = mediaID j, _ := json.Marshal(s) postJSON(j, u) } type sendVoiceMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` Voice struct { MediaID string `json:"media_id"` } `json:"voice"` } func kfSendVoice(user, path string) { mID := uploadVoice(path) kfSendVoiceByMediaID(user, mID) } func kfSendVoiceByMediaID(user, mediaID string) { u := getKfSendURL() s := sendVoiceMsg{} s.ToUser = user s.MsgType = "voice" s.Voice.MediaID = mediaID j, _ := json.Marshal(s) postJSON(j, u) } type sendVideoMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` Video struct { MediaID string `json:"media_id"` ThumbMediaID string `json:"thumb_media_id"` Title string `json:"title"` Description string `json:"description"` } `json:"video"` } func kfSendVideo(user, path, title, description, thumb string) { mID := uploadVideo(path) tID := uploadThumb(thumb) kfSendVideoByMediaID(user, mID, title, description, tID) } func kfSendVideoByMediaID(user, mediaID, title, description, tID string) { u := getKfSendURL() s := sendVideoMsg{} s.ToUser = user s.MsgType = "video" s.Video.MediaID = mediaID s.Video.Description = description s.Video.Title = title s.Video.ThumbMediaID = tID j, _ := json.Marshal(s) postJSON(j, u) } type sendMusicMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` Music struct { MediaID string `json:"media_id"` ThumbMediaID string `json:"thumb_media_id"` Title string `json:"title"` Description string `json:"description"` URL string `json:"musicurl"` HqURL string `json:"hqmusicurl"` } `json:"music"` } func kfSendMusic(user, title, description, thumbID, url, hqurl string) { u := getKfSendURL() s := sendMusicMsg{} s.ToUser = user s.MsgType = "music" s.Music.Title = title s.Music.Description = description s.Music.ThumbMediaID = thumbID s.Music.URL = url s.Music.HqURL = hqurl j, _ := json.Marshal(s) log.Println(string(j)) postJSON(j, u) } type sendNewsArticle struct { Title string `json:"title"` Description string `json:"description"` URL string `json:"url"` PicURL string `json:"picurl"` } type sendNewsMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` News struct { Articles []sendNewsArticle `json:"articles"` } `json:"news"` } func kfSendNews(toUser, title, description string, articles []sendNewsArticle) { count := 0 s := sendNewsMsg{} s.ToUser = toUser s.MsgType = "news" //build article a := []sendNewsArticle{} for _, v := range articles { a = append(a, v) count++ if count >= 10 { log.Printf("too many article, only take 10") break } } s.News.Articles = a //marshal j, _ := json.Marshal(s) log.Println(string(j)) //send u := getKfSendURL() postJSON(j, u) } type sendMPNewsMsg struct { ToUser string `json:"touser"` MsgType string `json:"msgtype"` MpNews struct { MediaID string `json:"media_id"` } `json:"mpnews"` } func kfSendMPNews(toUser, mediaID string) { s := sendMPNewsMsg{} s.ToUser = toUser s.MsgType = "mpnews" s.MpNews.MediaID = mediaID mashalAndSend(s) } func mashalAndSend(v interface{}) (resp string, err error) { //marshal j, _ := json.Marshal(v) log.Println(string(j)) //send u := getKfSendURL() return postJSON(j, u) }