Files
baseapi/platformapi/enterprise_wechat/wechat_msg.go
邹宗楠 d3b6f4d6d1 1
2023-01-29 15:37:58 +08:00

147 lines
5.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package enterprise_wechat
import (
"errors"
"git.rosy.net.cn/baseapi/utils"
"net/http"
)
const (
MsgTypeText = "text" // 文本消息
MsgTypeImg = "image" // 图片消息
MsgTypeVoice = "voice" // 语音消息
MsgTypeVideo = "video" // 视频消息
MsgTypeFile = "file" // 文件消息
MsgTypeTextCard = "textcard" // 文本卡片消息
MsgTypeNews = "news" // 图文消息
MsgTypeMpNews = "mpnews" // 图文消息
MsgTypeMarkdown = "markdown" // markdown消息
MsgTypeMiniprogramNotice = "miniprogram_notice" // 小程序通知消息
MsgTypeTemplateCard = "template_card" // 模板卡片消息(文本型/图文型/按钮型/投票型/多项选择型)
)
const EnterpriseAgentid = 1000005 // 企业应用的id
// EnterpriseSendMsgReq 发送企业微信文本卡片消息请求参数
type EnterpriseSendMsgReq struct {
Touser string `json:"touser"` // 成员ID列表消息接收者多个接收者用|分隔最多支持1000个
Toparty string `json:"toparty"` // 部门ID列表多个接收者用|分隔最多支持100个
Totag string `json:"totag"` // 标签ID列表多个接收者用|分隔最多支持100个
Msgtype string `json:"msgtype"` // 消息类型此时固定为textcard
Agentid int `json:"agentid"` // 企业应用的id
Textcard TextCardObject `json:"textcard"`
EnableIdTrans int `json:"enable_id_trans"` // 表示是否开启id转译0表示否1表示是默认0
EnableDuplicateCheck int `json:"enable_duplicate_check"` // 表示是否开启重复消息检查0表示否1表示是
DuplicateCheckInterval int `json:"duplicate_check_interval"` // 表示是否重复消息检查的时间间隔默认1800s最大不超过4小时
}
type TextCardObject struct {
Title string `json:"title"` // 标题不超过128个字节
Description string `json:"description"` // 描述不超过512个字节
Url string `json:"url"` // 点击后跳转的链接
Btntxt string `json:"btntxt"` // 按钮文字
}
// EnterpriseSendMsgRes 返回参数
type EnterpriseSendMsgRes struct {
Errcode int `json:"errcode"` // 返回码
Errmsg string `json:"errmsg"` // 对返回码的文本描述内容
Invaliduser string `json:"invaliduser"` // 不合法的userid不区分大小写统一转为小写
Invalidparty string `json:"invalidparty"` // 不合法的partyid
Invalidtag string `json:"invalidtag"` // 不合法的标签id
Unlicenseduser string `json:"unlicenseduser"` // 没有基础接口许可(包含已过期)的userid
Msgid string `json:"msgid"` // 消息id用于撤回应用消息
ResponseCode string `json:"response_code"` // 仅消息类型为“按钮交互型”“投票选择型”和“多项选择型”的模板卡片消息返回应用可使用response_code调用更新模版卡片消息接口72小时内有效且只能使用一次
}
// SendMsgToUser 将消息发送给企业微信用户 msgtype = textcard
func (a *API) SendMsgToUser(msg *EnterpriseSendMsgReq) error {
a.CheckAccessTokenExpiresIn()
param := utils.Struct2Map(msg, "", false)
data, err := a.AccessAPI(WeChatBaseApi, SendMsgToUser, http.MethodPost, param)
if err != nil {
return err
}
result := &EnterpriseSendMsgRes{}
if err := utils.Map2StructByJson(data, result, false); err != nil {
return err
}
if result.Errcode != 0 {
return errors.New(result.Errmsg)
}
return nil
}
// 发送文本消息
type SendTextMsgReq struct {
Touser string `json:"touser"`
Toparty string `json:"toparty"`
Totag string `json:"totag"`
Msgtype string `json:"msgtype"`
Agentid int `json:"agentid"`
Text struct {
Content string `json:"content"`
} `json:"text"`
Safe int `json:"safe"`
EnableIdTrans int `json:"enable_id_trans"`
EnableDuplicateCheck int `json:"enable_duplicate_check"`
DuplicateCheckInterval int `json:"duplicate_check_interval"`
}
// SendMsgToUserTypeText 发送文本消息给用户
func (a *API) SendMsgToUserTypeText(msg *SendTextMsgReq) error {
a.CheckAccessTokenExpiresIn()
param := utils.Struct2Map(msg, "", false)
data, err := a.AccessAPI(WeChatBaseApi, SendMsgToUser, http.MethodPost, param)
if err != nil {
return err
}
result := &EnterpriseSendMsgRes{}
if err := utils.Map2StructByJson(data, result, false); err != nil {
return err
}
if result.Errcode != 0 {
return errors.New(result.Errmsg)
}
return nil
}
// 发送文本消息
type SendMarkdownMsgReq struct {
Touser string `json:"touser"`
Toparty string `json:"toparty"`
Totag string `json:"totag"`
Msgtype string `json:"msgtype"`
Agentid int `json:"agentid"`
Markdown struct {
Content string `json:"content"`
} `json:"markdown"`
Safe int `json:"safe"`
EnableIdTrans int `json:"enable_id_trans"`
EnableDuplicateCheck int `json:"enable_duplicate_check"`
DuplicateCheckInterval int `json:"duplicate_check_interval"`
}
// SendMsgToUserMarkdown 发送makedown消息
func (a *API) SendMsgToUserMarkdown(msg *SendMarkdownMsgReq) error {
a.CheckAccessTokenExpiresIn()
param := utils.Struct2Map(msg, "", false)
data, err := a.AccessAPI(WeChatBaseApi, SendMsgToUser, http.MethodPost, param)
if err != nil {
return err
}
result := &EnterpriseSendMsgRes{}
if err := utils.Map2StructByJson(data, result, false); err != nil {
return err
}
if result.Errcode != 0 {
return errors.New(result.Errmsg)
}
return err
}