forked from chanxuehong/wechat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
event.go
224 lines (187 loc) · 8.63 KB
/
event.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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
// @description wechat 是腾讯微信公众平台 api 的 golang 语言封装
// @link https://gopkg.in/chanxuehong/wechat.v1 for the canonical source repository
// @license https://github.com/chanxuehong/wechat/blob/v1/LICENSE
// @authors chanxuehong(chanxuehong@gmail.com)
package menu
import (
"gopkg.in/chanxuehong/wechat.v1/corp"
)
const (
EventTypeClick = "click" // 点击菜单拉取消息时的事件推送
EventTypeView = "view" // 点击菜单跳转链接时的事件推送
// 请注意, 下面的事件仅支持微信iPhone5.4.1以上版本, 和Android5.4以上版本的微信用户,
// 旧版本微信用户点击后将没有回应, 开发者也不能正常接收到事件推送.
EventTypeScanCodePush = "scancode_push" // scancode_push: 扫码推事件的事件推送
EventTypeScanCodeWaitMsg = "scancode_waitmsg" // scancode_waitmsg: 扫码推事件且弹出"消息接收中"提示框的事件推送
EventTypePicSysPhoto = "pic_sysphoto" // pic_sysphoto: 弹出系统拍照发图的事件推送
EventTypePicPhotoOrAlbum = "pic_photo_or_album" // pic_photo_or_album: 弹出拍照或者相册发图的事件推送
EventTypePicWeixin = "pic_weixin" // pic_weixin: 弹出微信相册发图器的事件推送
EventTypeLocationSelect = "location_select" // location_select: 弹出地理位置选择器的事件推送
EventTypeEnterAgent = "enter_agent" // enter_agent: 用户进入应用的事件推送
)
// 点击菜单拉取消息的事件推送
type ClickEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, CLICK
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 与自定义菜单接口中KEY值对应
}
func GetClickEvent(msg *corp.MixedMessage) *ClickEvent {
return &ClickEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
}
}
// 点击菜单跳转链接的事件推送
type ViewEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, VIEW
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 设置的跳转URL
}
func GetViewEvent(msg *corp.MixedMessage) *ViewEvent {
return &ViewEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
}
}
// scancode_push: 扫码推事件的事件推送
type ScanCodePushEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, scancode_push
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 由开发者在创建菜单时设定
ScanCodeInfo struct {
ScanType string `xml:"ScanType" json:"ScanType"` // 扫描类型, 一般是qrcode
ScanResult string `xml:"ScanResult" json:"ScanResult"` // 扫描结果, 即二维码对应的字符串信息
} `xml:"ScanCodeInfo" json:"ScanCodeInfo"` // 扫描信息
}
func GetScanCodePushEvent(msg *corp.MixedMessage) *ScanCodePushEvent {
return &ScanCodePushEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
ScanCodeInfo: msg.ScanCodeInfo,
}
}
// scancode_waitmsg: 扫码推事件且弹出"消息接收中"提示框的事件推送
type ScanCodeWaitMsgEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, scancode_waitmsg
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 由开发者在创建菜单时设定
ScanCodeInfo struct {
ScanType string `xml:"ScanType" json:"ScanType"` // 扫描类型, 一般是qrcode
ScanResult string `xml:"ScanResult" json:"ScanResult"` // 扫描结果, 即二维码对应的字符串信息
} `xml:"ScanCodeInfo" json:"ScanCodeInfo"` // 扫描信息
}
func GetScanCodeWaitMsgEvent(msg *corp.MixedMessage) *ScanCodeWaitMsgEvent {
return &ScanCodeWaitMsgEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
ScanCodeInfo: msg.ScanCodeInfo,
}
}
// pic_sysphoto: 弹出系统拍照发图的事件推送
type PicSysPhotoEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, pic_sysphoto
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 由开发者在创建菜单时设定
SendPicsInfo struct {
Count int `xml:"Count" json:"Count"` // 发送的图片数量
PicList []struct {
PicMD5Sum string `xml:"PicMd5Sum" json:"PicMd5Sum"` // 图片的MD5值, 开发者若需要, 可用于验证接收到图片
} `xml:"PicList>item,omitempty" json:"PicList,omitempty"` // 图片列表
} `xml:"SendPicsInfo" json:"SendPicsInfo"` // 发送的图片信息
}
func GetPicSysPhotoEvent(msg *corp.MixedMessage) *PicSysPhotoEvent {
return &PicSysPhotoEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
SendPicsInfo: msg.SendPicsInfo,
}
}
// pic_photo_or_album: 弹出拍照或者相册发图的事件推送
type PicPhotoOrAlbumEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, pic_photo_or_album
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 由开发者在创建菜单时设定
SendPicsInfo struct {
Count int `xml:"Count" json:"Count"` // 发送的图片数量
PicList []struct {
PicMD5Sum string `xml:"PicMd5Sum" json:"PicMd5Sum"` // 图片的MD5值, 开发者若需要, 可用于验证接收到图片
} `xml:"PicList>item,omitempty" json:"PicList,omitempty"` // 图片列表
} `xml:"SendPicsInfo" json:"SendPicsInfo"` // 发送的图片信息
}
func GetPicPhotoOrAlbumEvent(msg *corp.MixedMessage) *PicPhotoOrAlbumEvent {
return &PicPhotoOrAlbumEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
SendPicsInfo: msg.SendPicsInfo,
}
}
// pic_weixin: 弹出微信相册发图器的事件推送
type PicWeixinEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, pic_weixin
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 由开发者在创建菜单时设定
SendPicsInfo struct {
Count int `xml:"Count" json:"Count"` // 发送的图片数量
PicList []struct {
PicMD5Sum string `xml:"PicMd5Sum" json:"PicMd5Sum"` // 图片的MD5值, 开发者若需要, 可用于验证接收到图片
} `xml:"PicList>item,omitempty" json:"PicList,omitempty"` // 图片列表
} `xml:"SendPicsInfo" json:"SendPicsInfo"` // 发送的图片信息
}
func GetPicWeixinEvent(msg *corp.MixedMessage) *PicWeixinEvent {
return &PicWeixinEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
SendPicsInfo: msg.SendPicsInfo,
}
}
// location_select: 弹出地理位置选择器的事件推送
type LocationSelectEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, location_select
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 由开发者在创建菜单时设定
SendLocationInfo struct {
LocationX float64 `xml:"Location_X" json:"Location_X"` // 地理位置纬度
LocationY float64 `xml:"Location_Y" json:"Location_Y"` // 地理位置经度
Scale int `xml:"Scale" json:"Scale"` // 精度, 可理解为精度或者比例尺, 越精细的话 scale越高
Label string `xml:"Label" json:"Label"` // 地理位置的字符串信息
PoiName string `xml:"Poiname" json:"Poiname"` // 朋友圈POI的名字, 可能为空
} `xml:"SendLocationInfo" json:"SendLocationInfo"` // 发送的位置信息
}
func GetLocationSelectEvent(msg *corp.MixedMessage) *LocationSelectEvent {
return &LocationSelectEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
SendLocationInfo: msg.SendLocationInfo,
}
}
// enter_agent: 用户进入应用的事件推送
// 本事件只有在应用的回调模式中打开上报开关时上报
type EnterAgentEvent struct {
XMLName struct{} `xml:"xml" json:"-"`
corp.MessageHeader
Event string `xml:"Event" json:"Event"` // 事件类型, enter_agent
EventKey string `xml:"EventKey" json:"EventKey"` // 事件KEY值, 此事件该值为空
}
func GetEnterAgentEvent(msg *corp.MixedMessage) *EnterAgentEvent {
return &EnterAgentEvent{
MessageHeader: msg.MessageHeader,
Event: msg.Event,
EventKey: msg.EventKey,
}
}