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.
37 lines
998 B
37 lines
998 B
package message
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"gitea.codecodify.com/golang/tool/helper"
|
|
"log"
|
|
)
|
|
|
|
// Message 定义消息范型, 统一发送消息入口, 为了类型安全, 需要实现Req接口
|
|
type Message[T Req] struct{}
|
|
|
|
const title = "【企业微信消息通知】"
|
|
|
|
// Send 发送消息
|
|
func (m *Message[T]) Send(body T, token string) (Resp, error) {
|
|
log.Printf("%s token: %v\n", title, token)
|
|
log.Printf("%s send message: %v\n", title, body)
|
|
url := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s", token)
|
|
b, err := json.Marshal(body)
|
|
if err != nil {
|
|
log.Printf("%s 消息体转换json失败: %v\n", title, err)
|
|
return Resp{}, err
|
|
}
|
|
if b, err := helper.SendHttpRequest(url, "POST", bytes.NewReader(b), nil); err != nil {
|
|
return Resp{}, err
|
|
} else {
|
|
var resp Resp
|
|
if err := json.Unmarshal(b, &resp); err != nil {
|
|
log.Printf("%s 响应体转换json失败: %v\n", title, err)
|
|
return Resp{}, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
}
|