diff --git a/work/addresslist/linkedcorp.go b/work/addresslist/linkedcorp.go new file mode 100644 index 0000000..d00fac2 --- /dev/null +++ b/work/addresslist/linkedcorp.go @@ -0,0 +1,230 @@ +package addresslist + +import ( + "fmt" + + "github.com/silenceper/wechat/v2/util" +) + +const ( + // getPermListURL 获取应用的可见范围 + getPermListURL = "https://qyapi.weixin.qq.com/cgi-bin/linkedcorp/agent/get_perm_list?access_token=%s" + // getLinkedCorpUserURL 获取互联企业成员详细信息 + getLinkedCorpUserURL = "https://qyapi.weixin.qq.com/cgi-bin/linkedcorp/user/get?access_token=%s" + // linkedCorpSimpleListURL 获取互联企业部门成员 + linkedCorpSimpleListURL = "https://qyapi.weixin.qq.com/cgi-bin/linkedcorp/user/simplelist?access_token=%s" + // linkedCorpUserListURL 获取互联企业部门成员详情 + linkedCorpUserListURL = "https://qyapi.weixin.qq.com/cgi-bin/linkedcorp/user/list?access_token=%s" + // linkedCorpDepartmentListURL 获取互联企业部门列表 + linkedCorpDepartmentListURL = "https://qyapi.weixin.qq.com/cgi-bin/linkedcorp/department/list?access_token=%s" +) + +// GetPermListResponse 获取应用的可见范围响应 +type GetPermListResponse struct { + util.CommonError + UserIDs []string `json:"userids"` + DepartmentIDs []string `json:"department_ids"` +} + +// GetPermList 获取应用的可见范围 +// see https://developer.work.weixin.qq.com/document/path/93172 +func (r *Client) GetPermList() (*GetPermListResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.HTTPPost(fmt.Sprintf(getPermListURL, accessToken), ""); err != nil { + return nil, err + } + result := &GetPermListResponse{} + if err = util.DecodeWithError(response, result, "GetPermList"); err != nil { + return nil, err + } + return result, nil +} + +// GetLinkedCorpUserRequest 获取互联企业成员详细信息请求 +type GetLinkedCorpUserRequest struct { + UserID string `json:"userid"` +} + +// GetLinkedCorpUserResponse 获取互联企业成员详细信息响应 +type GetLinkedCorpUserResponse struct { + util.CommonError + UserInfo LinkedCorpUserInfo `json:"user_info"` +} + +// LinkedCorpUserInfo 互联企业成员详细信息 +type LinkedCorpUserInfo struct { + UserID string `json:"userid"` + Name string `json:"name"` + Department []string `json:"department"` + Mobile string `json:"mobile"` + Telephone string `json:"telephone"` + Email string `json:"email"` + Position string `json:"position"` + CorpID string `json:"corpid"` + Extattr Extattr `json:"extattr"` +} + +// Extattr 互联企业成员详细信息扩展属性 +type Extattr struct { + Attrs []ExtattrItem `json:"attrs"` +} + +// ExtattrItem 互联企业成员详细信息扩展属性条目 +type ExtattrItem struct { + Name string `json:"name"` + Value string `json:"value,omitempty"` + Type int `json:"type"` + Text ExtattrItemText `json:"text,omitempty"` + Web ExtattrItemWeb `json:"web,omitempty"` +} + +// ExtattrItemText 互联企业成员详细信息自定义属性(文本) +type ExtattrItemText struct { + Value string `json:"value"` +} + +// ExtattrItemWeb 互联企业成员详细信息自定义属性(网页) +type ExtattrItemWeb struct { + URL string `json:"url"` + Title string `json:"title"` +} + +// GetLinkedCorpUser 获取互联企业成员详细信息 +// see https://developer.work.weixin.qq.com/document/path/93171 +func (r *Client) GetLinkedCorpUser(req *GetLinkedCorpUserRequest) (*GetLinkedCorpUserResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(getLinkedCorpUserURL, accessToken), req); err != nil { + return nil, err + } + result := &GetLinkedCorpUserResponse{} + if err = util.DecodeWithError(response, result, "GetLinkedCorpUser"); err != nil { + return nil, err + } + return result, nil +} + +// LinkedCorpSimpleListRequest 获取互联企业部门成员请求 +type LinkedCorpSimpleListRequest struct { + DepartmentID string `json:"department_id"` +} + +// LinkedCorpSimpleListResponse 获取互联企业部门成员响应 +type LinkedCorpSimpleListResponse struct { + util.CommonError + Userlist []LinkedCorpUser `json:"userlist"` +} + +// LinkedCorpUser 企业部门成员 +type LinkedCorpUser struct { + UserID string `json:"userid"` + Name string `json:"name"` + Department []string `json:"department"` + CorpID string `json:"corpid"` +} + +// LinkedCorpSimpleList 获取互联企业部门成员 +// see https://developer.work.weixin.qq.com/document/path/93168 +func (r *Client) LinkedCorpSimpleList(req *LinkedCorpSimpleListRequest) (*LinkedCorpSimpleListResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(linkedCorpSimpleListURL, accessToken), req); err != nil { + return nil, err + } + result := &LinkedCorpSimpleListResponse{} + if err = util.DecodeWithError(response, result, "LinkedCorpSimpleList"); err != nil { + return nil, err + } + return result, nil +} + +// LinkedCorpUserListRequest 获取互联企业部门成员详情请求 +type LinkedCorpUserListRequest struct { + DepartmentID string `json:"department_id"` +} + +// LinkedCorpUserListResponse 获取互联企业部门成员详情响应 +type LinkedCorpUserListResponse struct { + util.CommonError + UserList []LinkedCorpUserInfo `json:"userlist"` +} + +// LinkedCorpUserList 获取互联企业部门成员详情 +// see https://developer.work.weixin.qq.com/document/path/93169 +func (r *Client) LinkedCorpUserList(req *LinkedCorpUserListRequest) (*LinkedCorpUserListResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(linkedCorpUserListURL, accessToken), req); err != nil { + return nil, err + } + result := &LinkedCorpUserListResponse{} + if err = util.DecodeWithError(response, result, "LinkedCorpUserList"); err != nil { + return nil, err + } + return result, nil +} + +// LinkedCorpDepartmentListRequest 获取互联企业部门列表请求 +type LinkedCorpDepartmentListRequest struct { + DepartmentID string `json:"department_id"` +} + +// LinkedCorpDepartmentListResponse 获取互联企业部门列表响应 +type LinkedCorpDepartmentListResponse struct { + util.CommonError + DepartmentList []LinkedCorpDepartment `json:"department_list"` +} + +// LinkedCorpDepartment 互联企业部门 +type LinkedCorpDepartment struct { + DepartmentID string `json:"department_id"` + DepartmentName string `json:"department_name"` + ParentID string `json:"parentid"` + Order int `json:"order"` +} + +// LinkedCorpDepartmentList 获取互联企业部门列表 +// see https://developer.work.weixin.qq.com/document/path/93170 +func (r *Client) LinkedCorpDepartmentList(req *LinkedCorpDepartmentListRequest) (*LinkedCorpDepartmentListResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(linkedCorpDepartmentListURL, accessToken), req); err != nil { + return nil, err + } + result := &LinkedCorpDepartmentListResponse{} + if err = util.DecodeWithError(response, result, "LinkedCorpDepartmentList"); err != nil { + return nil, err + } + return result, nil +}