147 lines
5.8 KiB
Go
147 lines
5.8 KiB
Go
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
|
||
}
|