WeChat SDK

微信SDK的golang实现,短小精悍,同时兼容【企业微信/服务号/订阅号/小程序】
快速开始
5行代码,链式消息,快速开启微信API示例:
package main
import (
"net/http"
"github.com/esap/wechat"
)
func main() {
wechat.Debug = true
cfg := &wechat.WxConfig{
Token: "yourToken",
AppId: "yourAppID",
Secret: "yourSecret",
EncodingAESKey: "yourEncodingAesKey",
}
app := wechat.New(cfg)
app.SendText("@all", "Hello,World!")
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
app.VerifyURL(w, r).NewText("客服消息1").Send().NewText("客服消息2").Send().NewText("查询OK").Reply()
})
http.ListenAndServe(":9090", nil)
}
配置方式
cfg := &wechat.WxConfig{
Token: "yourToken",
AppId: "yourAppID",
Secret: "yourSecret",
}
cfg := &wechat.WxConfig{
Token: "yourToken",
AppId: "yourAppID",
Secret: "yourSecret",
EncodingAESKey: "yourEncodingAesKey",
}
cfg := &wechat.WxConfig{
Token: "yourToken",
AppId: "yourCorpID",
AgentId: "yourAgentId",
Secret: "yourSecret",
EncodingAESKey: "yourEncodingAesKey",
AppType: 1,
}
主动推送消息
用户关注后,企业微信可以主动推送消息,服务号需要用户48小时内进入过。
app.SendText(to, msg)
app.SendImage(to, mediaId)
app.SendVoice(to, mediaId)
app.SendFile(to, mediaId)
app.SendVideo(to, mediaId, title, desc)
app.SendTextcard(to, title, desc, url)
app.SendMusic(to, mediaId, title, desc, musicUrl, qhMusicUrl)
app.SendNews(to, arts...)
app.SendMpNews(to, arts...)
app.SendMpNewsId(to, mediaId)
app.SendMarkDown(to, content)
消息回调
- 通常将
app.VerifyURL(http.ResponseWriter, *http.Request)
嵌入http handler
该函数返回*wechat.Context
基本对象,其中的Msg为用户消息:
WxMsg struct {
XMLName xml.Name `xml:"xml"`
ToUserName
FromUserName
CreateTime 64
MsgId 64
MsgType
Content
AgentID
PicUrl
MediaId
Format
Recognition
ThumbMediaId
LocationX float32 `xml:"Latitude"`
LocationY float32 `xml:"Longitude"`
Precision float32
Scale
Label
Title
Description
Url
Event
EventKey
SessionFrom
Ticket
FileKey
FileMd5
FileTotalLen
ScanCodeInfo struct {
ScanType
ScanResult
}
}
- 如果使用其他web框架,例如echo/gin/beego等,则把VerifyURL()放入controller或handler
func wxApiPost(c echo.Context) error {
ctx := app.VerifyURL(c.Response().Writer, c.Request())
return nil
}
回调回复消息
回调回复消息有两种方式:
ctx.NewText("正在查询中...").Reply()
ctx.NewText("客服消息1").Send().NewText("客服消息2").Send()
- 被动回复可直接调用Reply(),表示已收到,然后调用客服消息。
文本消息
ctx.NewText("content")
图片/语言/文件消息
ctx.NewImage("mediaID")
ctx.NewVoice("mediaID")
ctx.NewFile("mediaID")
视频消息
ctx.NewVideo("mediaID", "title", "description")
音乐消息
ctx.NewMusic("thumbMediaID","title", "description", "musicURL", "hqMusicURL")
图文消息
art1 := wechat.NewArticle("拥抱AI,享受工作",
"来自村长的ESAP系统最新技术分享",
"http://ylin.wang/img/esap18-1.png",
"http://ylin.wang/2017/07/13/esap18/")
art2 := wechat.NewArticle("用企业微信代替pda实现扫描入库",
"来自村长的ESAP系统最新技术分享",
"http://ylin.wang/img/esap17-2.png",
"http://ylin.wang/2017/06/23/esap17/")
art3 := wechat.NewArticle("大道至简的哲学",
"来自村长的工作日志",
"http://ylin.wang/img/golang.jpg",
"http://ylin.wang/2017/01/29/log7/")
ctx.NewNews(art1, art2, art3)
模板消息
相关issue
tlpdata := map[string]struct {
Value `json:"value"`
Color `json:"color"`
}{
"first": {Value: "我是渣渣涛", Color: "#173177"},
"keyword1": {Value: "这是一个你从没有玩过的全新游戏", Color: "#173177"},
"keyword2": {Value: "只要你跟着我一起试玩一下", Color: "#173177"},
"keyword3": {Value: "你就会爱上这款游戏", Color: "#4B1515"},
"remark": {Value: "是兄弟就来砍我", Color: "#071D42"},
}
ctx.SendTemplate(
ctx.Msg.FromUserName,
"tempid",
c.Request.Host,
ctx.AppId,
"",
tlpdata,
)
License
MIT