-
Notifications
You must be signed in to change notification settings - Fork 0
/
initial.go
148 lines (127 loc) · 3.3 KB
/
initial.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package WoComApi
import (
"github.com/thep0y/predator"
"github.com/tidwall/gjson"
"time"
)
type WoCom struct {
corpId string
secret string
agentId string
}
type Message interface {
// MessageText 文本消息
MessageText(content string) error
// MessageTextCard 卡片消息 title标题,description内容(支持html),Url链接,btntxt按钮文字
MessageTextCard(title, description, URL, btntxt string) error
// MessageMarkdown markdown消息
MessageMarkdown(content string) error
}
var (
crawler *predator.Crawler
token string
)
func init() {
//初始化爬虫框架
crawler = predator.NewCrawler()
}
// NewWoCom 使用一些 WoComOption 创建一个新的 WoCom 实例
func NewWoCom(opts ...WoComOption) *WoCom {
//创建WoCom
c := new(WoCom)
for _, op := range opts {
op(c)
}
//Token
c.getToken()
go c.updateToken()
return c
}
/************************* token处理 ****************************/
//获取Token
func (w *WoCom) getToken() {
var body string
//爬虫
crawler.AfterResponse(func(r *predator.Response) {
body = string(r.Body)
})
crawler.Get("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + w.corpId + "&corpsecret=" + w.secret)
//提取json中的token
result := gjson.Get(body, "access_token")
token = result.Str
}
//更新一个小时获取一次
func (w *WoCom) updateToken() {
//定时刷新token
for {
time.Sleep(time.Millisecond * 3600000)
w.getToken()
}
}
/************************* 发送消息 ****************************/
// MessageText 文本消息
func (m *WoCom) MessageText(content string) error {
data := `{
"touser" : "@all",
"toparty" : "@all",
"totag" : "@all",
"msgtype" : "text",
"agentid" : ` + m.agentId + `,
"text" : {
"content" : ` + `"` + content + `""` + `
},
"safe":0,
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}`
err := crawler.PostRaw("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+token, []byte(data), nil)
if err != nil {
return err
}
return nil
}
// MessageTextCard 卡片消息 title标题,description内容(支持html),Url链接,btntxt按钮文字
func (m *WoCom) MessageTextCard(title, description, URL, btntxt string) error {
data := `{
"touser" : "@all",
"toparty" : "@all",
"totag" : "@all",
"msgtype" : "textcard",
"agentid" : ` + m.agentId + `,
"textcard" : {
"title" : "` + title + `",
"description" : "` + description + `",
"url" : "` + URL + `",
"btntxt":"` + btntxt + `"
},
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}`
err := crawler.PostRaw("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+token, []byte(data), nil)
if err != nil {
return err
}
return nil
}
// MessageMarkdown markdown消息
func (m *WoCom) MessageMarkdown(content string) error {
data := `{
"touser" : "@all",
"toparty" : "@all",
"totag" : "@all",
"msgtype": "markdown",
"agentid" : ` + m.agentId + `,
"markdown": {
"content": "` + content + `"
},
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}`
err := crawler.PostRaw("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+token, []byte(data), nil)
if err != nil {
return err
}
return nil
}