feat: channel WeChat corp account is done
This commit is contained in:
@@ -30,6 +30,7 @@ func (message *Message) Send(user *model.User) error {
|
||||
case TypeWeChatTestAccount:
|
||||
return SendWeChatTestMessage(message, user)
|
||||
case TypeWeChatCorpAccount:
|
||||
return SendWeChatCorpMessage(message, user)
|
||||
case TypeLark:
|
||||
case TypeDingTalk:
|
||||
case TypeTelegram:
|
||||
|
||||
@@ -48,8 +48,9 @@ func TokenStoreInit() {
|
||||
}
|
||||
}
|
||||
s.Mutex.RLock()
|
||||
for _, item := range items {
|
||||
s.Map[item.Key()] = &item
|
||||
for i := range items {
|
||||
// s.Map[item.Key()] = &item // This is wrong, you are getting the address of a local variable!
|
||||
s.Map[items[i].Key()] = &items[i]
|
||||
}
|
||||
s.Mutex.RUnlock()
|
||||
for {
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package channel
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"message-pusher/common"
|
||||
"message-pusher/model"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
@@ -60,3 +63,54 @@ func (i *WeChatCorpAccountTokenStoreItem) Refresh() {
|
||||
i.AccessToken = res.AccessToken
|
||||
common.SysLog("access token refreshed")
|
||||
}
|
||||
|
||||
type wechatCorpMessageRequest struct {
|
||||
MessageType string `json:"msgtype"`
|
||||
ToUser string `json:"touser"`
|
||||
AgentId string `json:"agentid"`
|
||||
TextCard struct {
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
URL string `json:"url"`
|
||||
} `json:"textcard"`
|
||||
}
|
||||
|
||||
type wechatCorpMessageResponse struct {
|
||||
ErrorCode int `json:"errcode"`
|
||||
ErrorMessage string `json:"errmsg"`
|
||||
}
|
||||
|
||||
func SendWeChatCorpMessage(message *Message, user *model.User) error {
|
||||
if user.WeChatCorpAccountId == "" {
|
||||
return errors.New("未配置微信企业号消息推送方式")
|
||||
}
|
||||
values := wechatCorpMessageRequest{
|
||||
MessageType: "textcard",
|
||||
ToUser: user.WeChatCorpAccountUserId,
|
||||
AgentId: user.WeChatCorpAccountAgentId,
|
||||
}
|
||||
values.TextCard.Title = message.Title
|
||||
values.TextCard.Description = message.Description
|
||||
// TODO: render content and set URL
|
||||
values.TextCard.URL = common.ServerAddress
|
||||
jsonData, err := json.Marshal(values)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
key := fmt.Sprintf("%s%s%s", user.WeChatCorpAccountId, user.WeChatCorpAccountAgentId, user.WeChatCorpAccountSecret)
|
||||
accessToken := TokenStoreGetToken(key)
|
||||
resp, err := http.Post(fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s", accessToken), "application/json",
|
||||
bytes.NewBuffer(jsonData))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var res wechatCorpMessageResponse
|
||||
err = json.NewDecoder(resp.Body).Decode(&res)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if res.ErrorCode != 0 {
|
||||
return errors.New(res.ErrorMessage)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user