package
0.0.0-20170417092845-701127331479
Repository: https://github.com/c77cc/wechat.git
Documentation: pkg.go.dev
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# README
微信公众平台(订阅号、服务号) golang SDK
整体架构图
示例
主動調用微信 api,mp 子包裏面的 Client 基本都是這樣的調用方式
package main
import (
"fmt"
"github.com/c77cc/wechat/mp"
"github.com/c77cc/wechat/mp/menu"
)
var AccessTokenServer = mp.NewDefaultAccessTokenServer("appId", "appSecret", nil) // 一個應用只能有一個實例
var WechatClient = mp.NewWechatClient(AccessTokenServer, nil)
func main() {
var mn menu.Menu
mn.Buttons = make([]menu.Button, 3)
mn.Buttons[0].SetAsClickButton("今日歌曲", "V1001_TODAY_MUSIC")
mn.Buttons[1].SetAsViewButton("视频", "http://v.qq.com/")
var subButtons = make([]menu.Button, 2)
subButtons[0].SetAsViewButton("搜索", "http://www.soso.com/")
subButtons[1].SetAsClickButton("赞一下我们", "V1001_GOOD")
mn.Buttons[2].SetAsSubMenuButton("子菜单", subButtons)
clt := menu.Client{WechatClient: WechatClient}
if err := clt.CreateMenu(mn); err != nil {
fmt.Println(err)
return
}
fmt.Println("ok")
}
被動接收消息(事件)推送,一个 URL 监听一个公众号的消息
package main
import (
"log"
"net/http"
"github.com/c77cc/wechat/mp"
"github.com/c77cc/wechat/mp/message/request"
"github.com/c77cc/wechat/mp/message/response"
"github.com/c77cc/wechat/util"
)
// 非法请求的 Handler
func InvalidRequestHandler(w http.ResponseWriter, r *http.Request, err error) {
log.Println(err.Error())
}
// 文本消息的 Handler
func TextMessageHandler(w http.ResponseWriter, r *mp.Request) {
// 简单起见,把用户发送过来的文本原样回复过去
text := request.GetText(r.MixedMsg) // 可以省略...
resp := response.NewText(text.FromUserName, text.ToUserName, text.CreateTime, text.Content)
//mp.WriteRawResponse(w, r, resp) // 明文模式
mp.WriteAESResponse(w, r, resp) // 安全模式
}
func main() {
aesKey, err := util.AESKeyDecode("encodedAESKey") // 这里 encodedAESKey 改成你自己的参数
if err != nil {
panic(err)
}
messageServeMux := mp.NewMessageServeMux()
messageServeMux.MessageHandleFunc(request.MsgTypeText, TextMessageHandler) // 注册文本处理 Handler
// 下面函数的几个参数设置成你自己的参数: wechatId, token, appId
wechatServer := mp.NewDefaultWechatServer("wechatId", "token", "appId", aesKey, messageServeMux)
wechatServerFrontend := mp.NewWechatServerFrontend(wechatServer, mp.InvalidRequestHandlerFunc(InvalidRequestHandler))
// 如果你在微信后台设置的回调地址是
// http://xxx.yyy.zzz/wechat
// 那么可以这么注册 http.Handler
http.Handle("/wechat", wechatServerFrontend)
http.ListenAndServe(":80", nil)
}
被動接收消息(事件)推送,一个 URL 监听多个公众号的消息
package main
import (
"log"
"net/http"
"github.com/c77cc/wechat/mp"
"github.com/c77cc/wechat/mp/message/request"
"github.com/c77cc/wechat/mp/message/response"
"github.com/c77cc/wechat/util"
)
// 非法请求处理函数
func InvalidRequestHandler(w http.ResponseWriter, r *http.Request, err error) {
log.Println(err.Error())
}
// 文本消息的处理
func TextMessageHandler(w http.ResponseWriter, r *mp.Request) {
// 简单起见,把用户发送过来的文本原样回复过去
text := request.GetText(r.MixedMsg) // 可以省略...
resp := response.NewText(text.FromUserName, text.ToUserName, text.CreateTime, text.Content)
//mp.WriteRawResponse(w, r, resp) // 明文模式
mp.WriteAESResponse(w, r, resp) // 安全模式
}
func main() {
// wechatServer1
aesKey1, err := util.AESKeyDecode("encodedAESKey1") // 这里 encodedAESKey1 改成你自己的参数
if err != nil {
panic(err)
}
messageServeMux1 := mp.NewMessageServeMux()
messageServeMux1.MessageHandleFunc(request.MsgTypeText, TextMessageHandler) // 注册文本处理 Handler
// 下面函数的几个参数设置成你自己的参数: wechatId1, token1, appId1
wechatServer1 := mp.NewDefaultWechatServer("wechatId1", "token1", "appId1", aesKey1, messageServeMux1)
// wechatServer2
aesKey2, err := util.AESKeyDecode("encodedAESKey2") // 这里 encodedAESKey2 改成你自己的参数
if err != nil {
panic(err)
}
messageServeMux2 := mp.NewMessageServeMux()
messageServeMux2.MessageHandleFunc(request.MsgTypeText, TextMessageHandler) // 注册文本处理 Handler
// 下面函数的几个参数设置成你自己的参数: wechatId2, token2, appId2
wechatServer2 := mp.NewDefaultWechatServer("wechatId2", "token2", "appId2", aesKey2, messageServeMux2)
// multiWechatServerFrontend
var multiWechatServerFrontend mp.MultiWechatServerFrontend
multiWechatServerFrontend.SetInvalidRequestHandler(mp.InvalidRequestHandlerFunc(InvalidRequestHandler))
multiWechatServerFrontend.SetWechatServer("wechat1", wechatServer1) // 回調url上面要加上 wechat_server=wechat1
multiWechatServerFrontend.SetWechatServer("wechat2", wechatServer2) // 回調url上面要加上 wechat_server=wechat2
// 如果你在微信后台设置的回调地址是
// http://xxx.yyy.zzz/wechat
// 那么可以这么注册 http.Handler
http.Handle("/wechat", &multiWechatServerFrontend)
http.ListenAndServe(":80", nil)
}