This commit is contained in:
邹宗楠
2023-01-29 14:42:40 +08:00
parent 268eace3d4
commit 9f0e014981
3 changed files with 101 additions and 6 deletions

View File

@@ -3,6 +3,7 @@ package enterprise_wechat
import (
"fmt"
"git.rosy.net.cn/baseapi"
"git.rosy.net.cn/jx-callback/globals"
"go.uber.org/zap"
"strconv"
"testing"
@@ -26,7 +27,6 @@ func init() {
}
func TestGetToken(t *testing.T) {
api = New("ww9a156bfa070e1857", "JQsEmSTltHhNgdPIT320YJFphiYmRs-YZa-rCBwplss")
token, err := api.GetAccessToken()
if err != nil {
fmt.Println("err=", err)
@@ -60,7 +60,6 @@ func TestGetAllDepartmentList(t *testing.T) {
// 创建员工
func TestCreateStaff(t *testing.T) {
api = New("ww9a156bfa070e1857", "0jBdCjSmoFiOoHIXyeCK9VbGQ82fVNJZ8uMl6JNN7X4") // 通讯录
err := api.CreateBoss2JxStaff(&CreateBoos2JXStaffReq{
Userid: "jx2022524_6685111",
Name: "门店老板",
@@ -94,7 +93,6 @@ func TestGetUserByMobile(t *testing.T) {
// 创建会话群聊
func TestCreateSession(t *testing.T) {
api = New("ww9a156bfa070e1857", "JQsEmSTltHhNgdPIT320YJFphiYmRs-YZa-rCBwplss") // 小程序
err := api.CreateAppChat(&CreateAppChatParamReq{
UserList: []string{"WangXiao", "LiuLei"},
Name: "刘磊的企业微信群1",
@@ -104,7 +102,30 @@ func TestCreateSession(t *testing.T) {
fmt.Println("err======", err)
}
func TestGetSuiteTicket(t *testing.T) {
api = New("ww9a156bfa070e1857", "JQsEmSTltHhNgdPIT320YJFphiYmRs-YZa-rCBwplss") // 小程序
// 发送消息到企业微信
func TestSendMsg(t *testing.T) {
msg := &EnterpriseSendMsgReq{
Touser: "LiuLei",
Toparty: "",
Totag: "",
Msgtype: "textcard",
Agentid: 1000005,
Textcard: TextCardObject{
Title: "异步任务",
Description: "刚刚的同步任务下载链接",
Url: "https://www.baidu.com",
Btntxt: "详情",
},
EnableIdTrans: 0,
EnableDuplicateCheck: 0,
DuplicateCheckInterval: 0,
}
err := api.SendMsgToUser(msg)
fmt.Println("err === ", err)
}
// 获取员工信息
func TestGetUserId(t *testing.T) {
phone, err := api.GetUserIdByMobile("18981810340")
globals.SugarLogger.Debugf("phone := %s,err :=%s", phone, err)
}

View File

@@ -16,6 +16,7 @@ const (
CreateBoosToJxStaff = "cgi-bin/user/create" // 将京西老板创建为企业员工
GetDepartmentUserDetail = "cgi-bin/user/list" // 获取部门用户详细情况
GetUserByMobileUrl = "cgi-bin/user/getuserid" // 通过手机号获取用户id
SendMsgToUser = "cgi-bin/message/send" // 给用户发送消息
EnterpriseTicketInfo = "/suite/receive" // 企业微信服务器会定时每十分钟推送ticket
)

View File

@@ -0,0 +1,73 @@
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" // 模板卡片消息(文本型/图文型/按钮型/投票型/多项选择型)
)
// 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 将消息发送给企业微信用户
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
}