在我自己的在线客服系统项目(唯一客服)中,实现了对接微信公众号的功能,并且可以调用发送模板消息接口
下面是一些简化后的代码,供大家参考
引入的包是这些
"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去查的,这里大家可以酌情修改
上面只是我的代码片段,并不能直接使用,参考后进行修改