department.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package addresslist
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. // departmentCreateURL 创建部门
  8. departmentCreateURL = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=%s"
  9. // departmentSimpleListURL 获取子部门ID列表
  10. departmentSimpleListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=%s&id=%d"
  11. // departmentListURL 获取部门列表
  12. departmentListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s"
  13. // departmentGetURL 获取单个部门详情 https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=ACCESS_TOKEN&id=ID
  14. departmentGetURL = "https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%d"
  15. )
  16. type (
  17. // DepartmentCreateRequest 创建部门数据请求
  18. DepartmentCreateRequest struct {
  19. Name string `json:"name"`
  20. NameEn string `json:"name_en,omitempty"`
  21. ParentID int `json:"parentid"`
  22. Order int `json:"order,omitempty"`
  23. ID int `json:"id,omitempty"`
  24. }
  25. // DepartmentCreateResponse 创建部门数据响应
  26. DepartmentCreateResponse struct {
  27. util.CommonError
  28. ID int `json:"id"`
  29. }
  30. // DepartmentSimpleListResponse 获取子部门ID列表响应
  31. DepartmentSimpleListResponse struct {
  32. util.CommonError
  33. DepartmentID []*DepartmentID `json:"department_id"`
  34. }
  35. // DepartmentID 子部门ID
  36. DepartmentID struct {
  37. ID int `json:"id"`
  38. ParentID int `json:"parentid"`
  39. Order int `json:"order"`
  40. }
  41. // DepartmentListResponse 获取部门列表响应
  42. DepartmentListResponse struct {
  43. util.CommonError
  44. Department []*Department `json:"department"`
  45. }
  46. // Department 部门列表数据
  47. Department struct {
  48. ID int `json:"id"` // 创建的部门id
  49. Name string `json:"name"` // 部门名称
  50. NameEn string `json:"name_en"` // 英文名称
  51. DepartmentLeader []string `json:"department_leader"` // 部门负责人的UserID
  52. ParentID int `json:"parentid"` // 父部门id。根部门为1
  53. Order int `json:"order"` // 在父部门中的次序值。order值大的排序靠前
  54. }
  55. // DepartmentGetResponse 获取单个部门详情
  56. DepartmentGetResponse struct {
  57. util.CommonError
  58. Department Department `json:"department"`
  59. }
  60. )
  61. // DepartmentCreate 创建部门
  62. // see https://developer.work.weixin.qq.com/document/path/90205
  63. func (r *Client) DepartmentCreate(req *DepartmentCreateRequest) (*DepartmentCreateResponse, error) {
  64. var (
  65. accessToken string
  66. err error
  67. )
  68. if accessToken, err = r.GetAccessToken(); err != nil {
  69. return nil, err
  70. }
  71. var response []byte
  72. if response, err = util.PostJSON(fmt.Sprintf(departmentCreateURL, accessToken), req); err != nil {
  73. return nil, err
  74. }
  75. result := &DepartmentCreateResponse{}
  76. if err = util.DecodeWithError(response, result, "DepartmentCreate"); err != nil {
  77. return nil, err
  78. }
  79. return result, nil
  80. }
  81. // DepartmentSimpleList 获取子部门ID列表
  82. // see https://developer.work.weixin.qq.com/document/path/95350
  83. func (r *Client) DepartmentSimpleList(departmentID int) ([]*DepartmentID, error) {
  84. var (
  85. accessToken string
  86. err error
  87. )
  88. if accessToken, err = r.GetAccessToken(); err != nil {
  89. return nil, err
  90. }
  91. var response []byte
  92. if response, err = util.HTTPGet(fmt.Sprintf(departmentSimpleListURL, accessToken, departmentID)); err != nil {
  93. return nil, err
  94. }
  95. result := &DepartmentSimpleListResponse{}
  96. if err = util.DecodeWithError(response, result, "DepartmentSimpleList"); err != nil {
  97. return nil, err
  98. }
  99. return result.DepartmentID, nil
  100. }
  101. // DepartmentList 获取部门列表
  102. // @desc https://developer.work.weixin.qq.com/document/path/90208
  103. func (r *Client) DepartmentList() ([]*Department, error) {
  104. // 获取accessToken
  105. accessToken, err := r.GetAccessToken()
  106. if err != nil {
  107. return nil, err
  108. }
  109. // 发起http请求
  110. response, err := util.HTTPGet(fmt.Sprintf(departmentListURL, accessToken))
  111. if err != nil {
  112. return nil, err
  113. }
  114. // 按照结构体解析返回值
  115. result := &DepartmentListResponse{}
  116. if err = util.DecodeWithError(response, result, "DepartmentList"); err != nil {
  117. return nil, err
  118. }
  119. // 返回数据
  120. return result.Department, err
  121. }
  122. // DepartmentGet 获取单个部门详情
  123. // see https://developer.work.weixin.qq.com/document/path/95351
  124. func (r *Client) DepartmentGet(departmentID int) (*Department, error) {
  125. var (
  126. accessToken string
  127. err error
  128. )
  129. if accessToken, err = r.GetAccessToken(); err != nil {
  130. return nil, err
  131. }
  132. var response []byte
  133. if response, err = util.HTTPGet(fmt.Sprintf(departmentGetURL, accessToken, departmentID)); err != nil {
  134. return nil, err
  135. }
  136. result := &DepartmentGetResponse{}
  137. if err = util.DecodeWithError(response, result, "DepartmentGet"); err != nil {
  138. return nil, err
  139. }
  140. return &result.Department, nil
  141. }