-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
86 lines (68 loc) · 2.43 KB
/
main.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
package main
import (
"log"
"net/http"
"sync"
"github.com/chanxuehong/wechat.v2/mp/core"
"github.com/chanxuehong/wechat.v2/mp/menu"
"github.com/chanxuehong/wechat.v2/mp/message/callback/request"
"github.com/chanxuehong/wechat.v2/mp/message/callback/response"
)
const (
wxAppId = "wx0a0cca0eeaf499f5"
wxAppSecret = "31b863270ee4b4b5b2c83038c233778f"
wxOriId = "gh_035061674bc6"
wxToken = "abcd1234"
wxEncodedAESKey = "hI8w2QQF1VmtpZTgG9nnBkox7NIsBfyKQKON6NIT3uV"
)
var (
// 下面两个变量不一定非要作为全局变量, 根据自己的场景来选择.
msgHandler core.Handler
msgServer *core.Server
globalMutex = &sync.Mutex{}
)
func init() {
mux := core.NewServeMux()
mux.DefaultMsgHandleFunc(defaultMsgHandler)
mux.DefaultEventHandleFunc(defaultEventHandler)
mux.MsgHandleFunc(request.MsgTypeText, textMsgHandler)
mux.EventHandleFunc(menu.EventTypeClick, menuClickEventHandler)
msgHandler = mux
msgServer = core.NewServer(wxOriId, wxAppId, wxToken, wxEncodedAESKey, msgHandler, nil)
}
func textMsgHandler(ctx *core.Context) {
log.Printf("收到文本消息:\n%s\n", ctx.MsgPlaintext)
globalMutex.Lock()
msg := request.GetText(ctx.MixedMsg)
resp := response.NewText(msg.FromUserName, msg.ToUserName, msg.CreateTime, msg.Content)
//ctx.RawResponse(resp) // 明文回复
ctx.AESResponse(resp, 0, "", nil) // aes密文回复
globalMutex.Unlock()
}
func defaultMsgHandler(ctx *core.Context) {
log.Printf("收到消息:\n%s\n", ctx.MsgPlaintext)
ctx.NoneResponse()
}
func menuClickEventHandler(ctx *core.Context) {
log.Printf("收到菜单 click 事件:\n%s\n", ctx.MsgPlaintext)
event := menu.GetClickEvent(ctx.MixedMsg)
resp := response.NewText(event.FromUserName, event.ToUserName, event.CreateTime, "收到 click 类型的事件")
//ctx.RawResponse(resp) // 明文回复
ctx.AESResponse(resp, 0, "", nil) // aes密文回复
}
func defaultEventHandler(ctx *core.Context) {
log.Printf("收到事件:\n%s\n", ctx.MsgPlaintext)
ctx.NoneResponse()
}
func init() {
http.HandleFunc("/wx_callback", wxCallbackHandler)
}
// wxCallbackHandler 是处理回调请求的 http handler.
// 1. 不同的 web 框架有不同的实现
// 2. 一般一个 handler 处理一个公众号的回调请求(当然也可以处理多个, 这里我只处理一个)
func wxCallbackHandler(w http.ResponseWriter, r *http.Request) {
msgServer.ServeHTTP(w, r, nil)
}
func main() {
log.Println(http.ListenAndServe(":80", nil))
}