【Golang】golang实现发送微信服务号模板消息
在我自己的在线客服系统项目(唯一客服)中,实现了对接微信公众号的功能,并且可以调用发送模板消息接口
下面是一些简化后的代码,供大家参考
引入的包是这些
"github.com/silenceper/wechat/v2" "github.com/silenceper/wechat/v2/cache" offConfig "github.com/silenceper/wechat/v2/officialaccount/config" "github.com/silenceper/wechat/v2/officialaccount/message" workConfig "github.com/silenceper/wechat/v2/work/config"
使用了内存存储access_token
var memory = cache.NewMemory()
路由部分
v2.POST("/wechatTemplate", controller.PostSendWechatTemplate)
控制器部分
//发送微信模板消息 func PostSendWechatTemplate(c *gin.Context) { entId := c.PostForm("ent_id") openid := c.PostForm("openid") templateId := c.PostForm("template_id") url := c.PostForm("url") keyword1 := c.PostForm("keyword1") keyword2 := c.PostForm("keyword2") keyword3 := c.PostForm("keyword3") wechatConfig, _ := lib.NewWechatLib(entId) msgData := make(map[string]*message.TemplateDataItem) msgData["keyword1"] = &message.TemplateDataItem{ Value: keyword1, Color: "", } msgData["keyword2"] = &message.TemplateDataItem{ Value: keyword2, Color: "", } msgData["keyword3"] = &message.TemplateDataItem{ Value: keyword3, Color: "", } msgData["remark"] = &message.TemplateDataItem{ Value: models.FindConfig("WechatTemplateRemark"), Color: "", } msg := &message.TemplateMessage{ ToUser: openid, Data: msgData, TemplateID: templateId, URL: url, } _, err := SendWechatTemplate(wechatConfig, msg) if err != nil { c.JSON(200, gin.H{ "code": 400, "msg": err.Error(), }) return } c.JSON(200, gin.H{ "code": 200, "msg": "ok", }) }
函数部分
//发送微信模板消息 func SendWechatTemplate(wechatConfig *lib.Wechat, msg *message.TemplateMessage) (bool, error) { if wechatConfig == nil { return false, errors.New("该企业未配置appid等公众号资料") } if msg.TemplateID == "" || msg.ToUser == "" { return false, errors.New("openid或templateId不存在") } wc := wechat.NewWechat() cfg := &offConfig.Config{ AppID: wechatConfig.AppId, AppSecret: wechatConfig.AppSecret, Token: wechatConfig.Token, //EncodingAESKey: "xxxx", Cache: memory, } officialAccount := wc.GetOfficialAccount(cfg) template := officialAccount.GetTemplate() msgId, err := template.Send(msg) if err != nil { return false, err } log.Println("发送微信模板消息:", msgId, err, msg.ToUser) return true, nil }
我的公众号相关配置存储到了数据库里,根据ent_id去查的,这里大家可以酌情修改
上面只是我的代码片段,并不能直接使用,参考后进行修改
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网