【Golang】golang实现发送微信服务号模板消息
2023-02-18 15:36:56 时间
在我自己的在线客服系统项目(唯一客服)中,实现了对接微信公众号的功能,并且可以调用发送模板消息接口
下面是一些简化后的代码,供大家参考
引入的包是这些
"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去查的,这里大家可以酌情修改
上面只是我的代码片段,并不能直接使用,参考后进行修改
相关文章
- MongoDB 事务,复制和分片的关系
- 【经验之谈】Git使用之Windows环境下配置
- git clone开启云上AI开发
- 实践GoF的设计模式:代理模式
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
- 初学开发必看:何为Git,何为SVN
- 实践GoF的设计模式:访问者模式
- 【经验之谈】Git使用之TortoiseGit配置VS详解
- cmder git bash 使用
- 4步教你学会使用Linux-Audit工具
- 10种有用的Linux Bash_Completion 命令示例
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
- 实践GoF的设计模式:迭代器模式
- 【补充】Gitlab 部署 CI 持续集成
- Google Chrome 应用商店上传扩展程序
- 实践GoF的23种设计模式:观察者模式
- Ubuntu Docker 安装和配置 GitLab CI 持续集成
- Ubuntu 简单安装和配置 GitLab
- 二进制SCA指纹提取黑科技:Go语言逆向技术
- 解读Go分布式链路追踪实现原理