Просмотр исходного кода

feat:企业微信-通讯录管理-互联企业 (#688)

markwang 3 лет назад
Родитель
Сommit
46c3722308
1 измененных файлов с 230 добавлено и 0 удалено
  1. 230 0
      work/addresslist/linkedcorp.go

+ 230 - 0
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
+}