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 }