-
Notifications
You must be signed in to change notification settings - Fork 0
/
model.go
199 lines (173 loc) · 10.1 KB
/
model.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
package wecom
import (
"encoding/json"
"errors"
"fmt"
)
// User 用户信息
type User struct {
UserID string `json:"userid" xml:"UserID"` // 成员UserID。对应管理端的帐号,企业内必须唯一。不区分大小写,长度为1~64个字节
Name string `json:"name" xml:"Name"` // 成员名称
Department []int `json:"department,omitempty" xml:"Department"` // 成员所属部门id列表,仅返回该应用有查看权限的部门id
OpenUserid string `json:"open_userid,omitempty" xml:"OpenUserid"` // 全局唯一。对于同一个服务商,不同应用获取到企业内同一个成员的open_userid是相同的,最多64个字节。仅第三方应用可获取
Order []int `json:"order,omitempty" xml:"Order"` // 部门内的排序值,默认为0。数量必须和department一致,数值越大排序越前面
Position string `json:"position,omitempty" xml:"Position"` // 职务信息
Mobile string `json:"mobile,omitempty" xml:"Mobile"` // 手机号码
Gender string `json:"gender,omitempty" xml:"Gender"` // 性别。0表示未定义,1表示男性,2表示女性
Email string `json:"email,omitempty" xml:"Email"` // 邮箱
BizMail string `json:"biz_mail,omitempty" xml:"BizMail"` // 企业邮箱
IsLeaderInDept []int `json:"is_leader_in_dept,omitempty" xml:"IsLeaderInDept"` // 表示在所在的部门内是否为部门负责人
DirectLeader []string `json:"direct_leader,omitempty" xml:"DirectLeader"` // 直属上级UserID,最多有五个直属上级
Avatar string `json:"avatar,omitempty" xml:"Avatar"` // 头像url
ThumbAvatar string `json:"thumb_avatar,omitempty" xml:"ThumbAvatar"` // 头像缩略图url
Telephone string `json:"telephone,omitempty" xml:"Telephone"` // 座机
Alias string `json:"alias,omitempty" xml:"Alias"` // 别名
Status int `json:"status,omitempty" xml:"Status"` // 激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业
Address string `json:"address,omitempty" xml:"Address"` // 地址
HideMobile int `json:"hide_mobile,omitempty" xml:"HideMobile"` // 是否隐藏手机号 0=未隐藏
EnglishName string `json:"english_name,omitempty" xml:"EnglishName"` // 英文名
MainDepartment int `json:"main_department,omitempty" xml:"MainDepartment"` // 主部门,仅当应用对主部门有查看权限时返回
QrCode string `json:"qr_code,omitempty" xml:"QrCode"` // 员工个人二维码,扫描可添加为外部联系人(注意返回的是一个url,可在浏览器上打开该url以展示二维码)
ExternalPosition string `json:"external_position,omitempty" xml:"ExternalPosition"` // 对外职务,如果设置了该值,则以此作为对外展示的职务
ExternalProfile *UserExternalProfile `json:"external_profile,omitempty"` // 成员对外属性
}
// UserExternalProfile 用户外部属性
type UserExternalProfile struct {
ExternalCorpName string `json:"external_corp_name,omitempty"`
WechatChannels []UserWechatChannel `json:"wechat_channels,omitempty"`
ExternalAttr []UserExternalAttr `json:"external_attr,omitempty"`
}
// UserWechatChannel 视频号属性
type UserWechatChannel struct {
Nickname string `json:"nickname,omitempty"` // 视频号名称
Status int `json:"status,omitempty"` // 对外展示视频号状态。0表示企业视频号已被确认,可正常使用,1表示企业视频号待确认
}
// UserExternalAttr 扩展属性
type UserExternalAttr struct {
Type int `json:"type"` // 属性类型: 0-文本 1-网页 2-小程序
Name string `json:"name"` // 属性名称: 需要先确保在管理端有创建该属性,否则会忽略
Text struct {
Value string `json:"value"` // 文本属性内容,长度限制32个UTF8字符
} `json:"text"` // 文本类型的属性
}
// UserInvalidList 邀请成员的报错信息
type UserInvalidList struct {
InvalidUser []string `json:"invaliduser"`
InvalidParty []string `json:"invalidparty"`
InvalidTag []string `json:"invalidtag"`
}
// Department 部门详细信息
type Department struct {
Id int `json:"id" xml:"Id"` // 部门ID
Name string `json:"name" xml:"Name"` // 部门名称
NameEn string `json:"name_en" xml:"NameEn"` // 部门英文名
Leaders []string `json:"department_leader" xml:"DepartmentLeader"` // 部门负责人Userid, ["zhangsan", "lisi"]
ParentId int `json:"parentid" xml:"ParentId"` // 上级部门id,根部门为1
Order int `json:"order" xml:"Order"` // 在父部门中的次序值,order值大的排序靠前。值范围是[0, 2^32)
}
// Tag 通讯录的标签结构
type Tag struct {
TagId int `json:"tagid" xml:"TagId"`
Tagname string `json:"tagname"`
}
// TagMemberList tag成员信息结构
type TagMemberList struct {
TagName string `json:"tagname"`
UserList []User `json:"userlist"`
PartyList []int `json:"partylist"`
}
// Import 异步导入接口
type Import struct {
MediaID string `json:"media_id"` // 上传的csv文件的media_id, media_id在素材管理接口上传csv后获取
ToInvite bool `json:"to_invite,omitempty"` // 是否邀请新建的成员使用企业微信(将通过微信服务通知或短信或邮件下发邀请,每天自动下发一次,最多持续3个工作日),默认值为true。
Callback *ImportCallback `json:"callback,omitempty"` // 回调信息。如填写该项则任务完成后,通过callback推送事件给企业。具体请参考应用回调模式中的相应选项
}
// ImportCallback 异步导入时配置的web回调
type ImportCallback struct {
Url string `json:"url,omitempty"` // 企业应用接收企业微信推送请求的访问协议和地址,支持http或https协议
Token string `json:"token,omitempty"` // 用于生成签名
Encodingaeskey string `json:"encodingaeskey,omitempty"` // 用于消息体的加密,是AES密钥的Base64编码
}
// ImportResult 通过任务ID查询导入结果
type ImportResult struct {
Status int `json:"status"` // 任务状态,整型,1表示任务开始,2表示任务进行中,3表示任务已完成
Type string `json:"type"` // 操作类型,字节串,目前分别有:1. sync_user(增量更新成员) 2. replace_user(全量覆盖成员)3. replace_party(全量覆盖部门)
Total int `json:"total"` // 任务运行总条数
Percentage int `json:"percentage"` // 目前运行百分比,当任务完成时为100
Result json.RawMessage `json:"result"` // 详细的处理结果,需要上层应用后续解析
}
// ImportUserResult 用户的导入结果
type ImportUserResult struct {
UserID string `json:"userid"` // 成员userid
Error
}
// ImportPartyResult 组的导入结果
type ImportPartyResult struct {
Action int `json:"action"` // 操作类型(按位或), 1=新建部门, 2=更改部门名称, 4=移动部门, 8=修改部门排序
PartyID int `json:"partyid"` // 部门ID
Error
}
// ExportResult 通过任务ID查询的导出结果
type ExportResult struct {
Status int `json:"status"` // 任务状态:0-未处理,1-处理中,2-完成,3-异常失败
DataList []ExportUrl `json:"data_list"` // 数据文件列表
}
// ExportUrl 导出结果资源所指向的url,用户需要根据该url下载导出文件并解密
type ExportUrl struct {
Url string `json:"url"` // 数据下载链接,支持指定Range头部分段下载。有效期2个小时
Size int `json:"size"` // 密文数据大小
Md5 string `json:"md5"` // 密文数据md5
}
// - MsgType = event
// - Event = batch_job_result
// - JobType = export_user(导出成员详情)
// - JobType = export_simple_user(导出成员)
// - JobType = export_department(导出部门)
// - JobType = export_tag(导出标签成员)
// - JobType = sync_user(增量更新成员完成通知)
// - JobType = replace_user(全量覆盖成员完成通知)
// - JobType = invite_user(邀请成员关注完成通知)
// - JobType = replace_party(全量覆盖部门完成通知)
// - Event = change_contact
// - ChangeType = create_user(新增成员事件)
// - ChangeType = update_user(更新成员事件)
// - ChangeType = delete_user(删除用户事件)
// - ChangeType = create_party(新增部门事件)
// - ChangeType = update_party(更新部门事件)
// - ChangeType = delete_party(删除部门事件)
// - ChangeType = update_tag(标签成员变更事件)
// CallbackEvent
type CallbackEvent struct {
ToUserName string `xml:"ToUserName"` // 企业微信CorpID
FromUserName string `xml:"FromUserName"` // 消息的产生这,企业微信发出的为sys
CreateTime int `xml:"CreateTime"` // 消息创建时间 (整型)
MsgType string `xml:"MsgType"` // 消息的类型
Event string `xml:"Event"` // 事件的类型
}
// BatchJobResult 导出任务完成通知
// 对应 Callback.Event = "batch_job_result"
// -> BatchJob []BatchJob
type BatchJob struct {
JobId string `xml:"JobId"`
JobType string `xml:"JobType"`
Error
}
type Error struct {
Errcode int `json:"errcode" xml:"ErrCode"`
Errmsg string `json:"errmsg" xml:"ErrMsg"`
}
func (e Error) Check() error {
if e.Errcode == 0 {
return nil
}
if e.Errmsg != "" {
return errors.New(e.Errmsg)
}
return errors.New(fmt.Sprintf("request error with code %d", e.Errcode))
}
// CodeAuthRequest 用户发起授权码验证的请求信息
type CodeAuthRequest struct {
Code string `json:"code" form:"code"`
State string `json:"state" form:"state"`
Appid string `json:"appid" form:"appid"`
}